ssh, sftp의 원격접속과 서버간의 파일전송 scp를 설명하기 위해 하나의 커다란 실습을 진행할 것이다.
이 실습이 끝나게 되면 위의 3가지를 모두 이해 할 수 있을것이다.
<실습>
먼저 서버 ssh, ftp를 활용하기 위한 서버를 만들고 클라이언트 pc를 만들어 총 두 대의 컴퓨터로 실습을 할 것이다. (물론 vmware로 간편하게 실습한다)
그래서 서버와 클라이언트간에 ssh접속으로의 다운로드 업드로, scp를 이용한 다운로드 업로드, sftp를 사용한 다운로드 업로드를 실습해보자.
[Server 세팅]
1. 500MB짜리 하드디스크(/dev/sdb2)를 장착한 후, /sshdir에다가 마운트 시킨다.
부팅시 자동 마운트를 위해 /etc/fstab도 이용하자.
2. 계정을 총 3개를 만들것이다.
/sshserver/scp에 abc계정만 UID권한을 조정하여 다운로드, 업로드와 같이 접근을사용가능하게 할 것이다.
/sshserver/sftp ftpuser계정만 GID권한을 조정하여 다운로드, 업로드와 같이 접근을 사용가능하게 할 것이다.
/sshserver/ssh 다른 계정은 건드리지 말고, user계정으로 접속해서 해결해보자.
3. ssh와 su와 같은 보안설정을 해보자. user계정만 su를 사용할 수 있게 하자. (마음대로 사용할 수 없게)
[Client 세팅]
1. /sshclient/scp/abc_sub의 빈 파일을 만들것
2. /sshclient/sftp/ftpuser_sub의 빈 파일을 만들것
3. /sshclient/ssh/sshuser_sub의 빈 파일을 만들것
이렇게 세팅한 후에 클라이언트 pc에서 3가지 방법으로 다운로드 업로드 해보도록 하자.
1. 하드디스크 추가와 파일시스템 설정 그리고 마운트를 시켜주자.
하드디스크 추가 후, 파티션 나누기
![](https://t1.daumcdn.net/cfile/tistory/2614DC4B56C00A6511)
![](https://t1.daumcdn.net/cfile/tistory/2704F34856C00A8B1C)
파일시스템 설정해주기
![](https://t1.daumcdn.net/cfile/tistory/2251545056C00A910A)
마운트 포인트를 만들고 마운트 해주기
![](https://t1.daumcdn.net/cfile/tistory/23533D4C56C00A970D)
부팅시 자동으로 마운트하기 위해 fstab파일 설정
![](https://t1.daumcdn.net/cfile/tistory/2576794B56C00AA11F)
2. /sshserver에 디렉토리 만들고 각 파일을 만들어보자.
scp, sftp, ssh각 3개의 디렉토리 생성 후,
scp/abc, sftp/ftpuser, ssh/user라는 빈 파일을 만들어주자.(클라이언트 pc에서 다운로드 해줄 파일들이다)
![](https://t1.daumcdn.net/cfile/tistory/256E324956C00AA90E)
3. vi/etc/ssh/sshd_config에서 PermitRootLogin을 no로 변경하여 서버에 root권한으로 접근 못하게 막아놓자.
![](https://t1.daumcdn.net/cfile/tistory/25468E4956C00AAE20)
4. 이제부터 계정에게 권한을 조절하여 위의 조건을 맞춰보자.
먼저, user계정만 su를 사용하게 해보자.
![](https://t1.daumcdn.net/cfile/tistory/2228D84056C00AEA18)
여기서 chown .wheel /bin/su는 /bin/su파일의 사용자와 그룹을 wheel로 바꾸겠다는 것이다.
usermod -G wheel user는 user라는 사용자를 wheel의 그룹으로 넣겠다는 것이다.
chmod 4750 /bin/su는 /bin/su파일의 권한을 rwsr-x---로 변경하는 것인데, 이 의미는 파일 소유자 wheel은 rwx가 모두 가능하며, wheel그룹에 속한 사용자들은 읽고 실행이 가능하게 한 것이다.
즉, wheel 그룹안에는 user라는 사용자가 있기 때문에 읽고 쓰기가 가능해진다는 의미이다.
한마디로 user는 su명령어를 사용할 수 있지만, ftpuser와 abc사용자는 su를 사용할 수 없다.
5. abc계정만 scp디렉토리의 권한을 UID로 변경해 사용할 수 있게 하고, ftpuser만 sftp디렉토리의 권한을 GID를 변경해 접근 제어를 해보자.
abc계정 제어
![](https://t1.daumcdn.net/cfile/tistory/257B504556C00AF20F)
ftpuser계정 제어
![](https://t1.daumcdn.net/cfile/tistory/2773F54656C00B0722)
6. 이제부터 Client PC를 실습해보자.
먼저 server와 똑같이 3개의 디렉토리 3명의 사용자, 3개의 파일을 만들어주자.
![](https://t1.daumcdn.net/cfile/tistory/2173FE4656C00B0E21)
7. 모든 설정이 끝났다.
이제부터 클라이언트 PC에서 업로드와 다운로드를 해보자.
각각 오류가 뜨는데 이유도 같이 알아보자.
① abc계정을 이용한 서버로 부터의 다운로드, 업로드
![](https://t1.daumcdn.net/cfile/tistory/2438DD3E56C00B1D10)
클라이언트 PC에서 scp디렉토리로 이동 후, scp명령어로 서버로부터 다운로드를 받으려고 했다.
지금 접속되어 있는 계정은 root이다. 192.168.1.10에 /sshserver/scp에 있는 abc파일을 현재 디렉토리로 옮기려고 했지만 디나이 걸렸다. 왜그럴까? 아까 우리가 설정했던... PermitRootLogin no 때문이다. 루트로 접속을 거부했기 때문이다.
![](https://t1.daumcdn.net/cfile/tistory/250CFC4156C00B222D)
자, 이번에는 user라는 계정으로 바꿔서 접근을 시도하였지만 역시 접근하지 못했다. 이유가 무엇일까? 아까 위에서 scp의 파일 권한을 abc계정만 접근할 수 있게 UID를 만져서 바꿔놓았다.
마지막으로 abc계정으로 접근을 시도하여 다운로드 받아보자.
![](https://t1.daumcdn.net/cfile/tistory/2644B74456C00C0B29)
잘 받아온 것을 볼 수 있다.
자 이번에는 업로드를 시켜보자.
클라이언트 pc에 있는 /sshclient/scp/abc-sub파일을 서버로 업로드해보자.
![](https://t1.daumcdn.net/cfile/tistory/254DF23F56C00C1101)
권한으로인해 업로드 하지 못했다. 일부러 ftpuser로 보내봤는데 왜 보낼 수 없을까?
![](https://t1.daumcdn.net/cfile/tistory/2426B64456C00DBD37)
서버측으로 옮기려는 scp폴더의 권한을 보면 abc로 되어있고, abc를 제외한 모든 사용자들은 접근하지 못하게 했다. 그래서 보낼 수 없었다.
그 말은 즉슨, abc사용자는 업로드 시킬 수 있다는 것이다.
![](https://t1.daumcdn.net/cfile/tistory/2231324056C00DC31F)
② ftpuser사용자를 이용해 sftp디렉토리의 파일을 다운로드 업로드 시켜보자.
ftpuser로 서버측에 있는 /sshserver/sftp로 잘 접속이 된다. 물론 다른 계정로 접속이 될 것이다. 하지만 그 이후에, 명령어의 제약이나 접근 제한이 있을것이다. 왜냐? /sshserver/sftp의 소유권은 root이고, 그룹은 ftpuser니까..!
ftpuser로 접속해 get으로 다운로드 하였다.
![](https://t1.daumcdn.net/cfile/tistory/260B8E4156C00DC903)
이번에는 클라이언트 PC에 있는 ftpuser-sub파일을 /sshserver/sftp로 put을 이용해 업로드 시켜주었다.
![](https://t1.daumcdn.net/cfile/tistory/2464B93E56C00DCD09)
③ user사용자로 ssh접속을 해서 다운로드, 업로드를 해보자.
![](https://t1.daumcdn.net/cfile/tistory/2416864156C00DDC36)
접속은 잘 되었지만, server에 있는 ssh파일을 보내려고 했지만 보낼 수 없었다.
왜 그런걸까? 지금 보내려고 하는 곳의 권한을 잘 보면 다음과 같다.
![](https://t1.daumcdn.net/cfile/tistory/214BC83D56C00DE805)
ssh의 소유자와 그룹 모두 root이다. 그렇기 때문에 user는 접근 거부 된것이다.
다음과 같이 server측에 있는 root만 접근 거부되었을 뿐, client측의 root계정은 권한이 풀려있기 때문에 root권한으로 다운로드 할 수 있다.
![](https://t1.daumcdn.net/cfile/tistory/2265F34556C00DED25)
업로드는 클라이언트 PC에서 ssh를 이용하여 server에 접속한 상태이다. 그 상태에서 su -를 이용해 server의 root권한을 얻은 후, 클라이언트 pc에게 보내는 것이다. 업로드 할때는 접속한 sevas계정으로는 할 수 있는 것이 아무것도 없기 때문이다
![](https://t1.daumcdn.net/cfile/tistory/2504644056C00E0635)