SFTP만 되는 계정 생성

Jmnote bot (토론 | 기여)님의 2020년 11월 2일 (월) 00:42 판 (봇: 자동으로 텍스트 교체 (-</source> +</syntaxhighlight>))
SFTP만 되는 계정 생성
Shell 로그인 권한은 없고 SFTP만 접속할 수 있는 계정 설정하기
nologin 계정에 SFTP를 허용하는 방법

1 계정 생성

명령어

<source lang='bash'> useradd -s /sbin/nologin -G sftp-only 계정명 </syntaxhighlight>

-G 옵션은 useradd 그룹 지정하여 만들기 참고
실행예시

<source lang='console'> [root@zetawiki ~]# useradd -s /sbin/nologin -G sftp-only sftpuser [root@zetawiki ~]# </syntaxhighlight>

2 패스워드 지정 & 확인

명령어

<source lang='bash'> echo '패스워드' | passwd --stdin 계정명 ssh 계정명@localhost </syntaxhighlight>

실행예시

<source lang='console'> [root@zetawiki ~]# echo 'P@ssw0rd' | passwd --stdin sftpuser Changing password for user sftpuser. passwd: all authentication tokens updated successfully. [root@zetawiki ~]# ssh sftpuser@localhost sftpuser@localhost's password: </syntaxhighlight>

→ 패스워드 입력

<source lang='console'> This account is currently not available. Connection to localhost closed. </syntaxhighlight>

→ 패스워드는 맞지만 쉘권한이 없어서 세션이 닫힘.

3 chroot 적용

특정 경로를 root로 정하고 그 디렉토리 밖으로 못 나가는 chroot 설정이 가능하다.[1]

<source lang='bash'>

  1. Subsystem sftp /usr/libexec/openssh/sftp-server

Subsystem sftp internal-sftp Match Group sftpuser

       ChrootDirectory /sftp_home/
       ForceCommand internal-sftp -d %u

</syntaxhighlight>

→ 위와 같이 설정하면 sftp-only 그룹에 속한 유저가 접속할 경우, /sftp_home/사용자명 경로가 /로 보인다.
→ Subsystem sftp를 변경하는 이유는 sftp-server와 internal-sftp 차이 참고

chroot 사용 시 디렉토리 소유자와 퍼미션에 주의해야 한다.

  1. 소유자는 root 여야 한다
  2. root 이외의 사용자가 접속 '/' 경로에 쓰기 권한이 있어선 안된다.
    1. root 이외 사용자에게 쓰기 권한이 있는 경우, sftp 접속이 안된다.
    2. /var/log/secure 로그에 fatal: bad ownership or modes for chroot directory "경로" 라고 남음.
  3. '/' 경로에 쓰기 권한이 없으니 접속하는 사용자가 파일 업로드가 불가능하다. 접속자 소유의 uploads 디렉토리를 각 '/' 경로 밑에 만들어주면 해결.

예를 들어 위 설정이 적용된 서버에 sftpuser 계정으로 접속한 사용자가 원활히 업로드 할 수 있게 하려면 root 권한으로 아래와 같이 해야 한다. <source lang='bash'> mkdir -p /sftp_home/sftpuser/uploads chown sftpuser:sftp-only /sftp_home/sftpuser/uploads </syntaxhighlight>

아래와 같이 소유자 설정이 되면 된다. 그룹이 꼭 sftp-only일 필요가 없으며 group, other 권한은 없어도 무관함. <source lang='bash'> drwxr-xr-x root root /sftp_home/sftpuser/ drwxr-xr-x sftpuser sftp-only /sftp_home/sftpuser/uploads </syntaxhighlight>

4 sshd 재시작

<source lang='console'> [root@zetawiki ~]# service sshd restart Stopping sshd: [ OK ] Starting sshd: [ OK ] </syntaxhighlight>

이제 sftpuser 계정으로 SFTP로 접속하면 된다...

5 sftp만 되는 계정의 password 변경

sftp만 되는 사용자가 자신의 패스워드를 바꾸는 것은 불가능하다. root 사용자가 변경해주거나 별도 툴이 있어야 한다. /etc/passwd 에 접근이 불가능하기 때문이다.[2][3]

6 같이 보기

7 참고

문서 댓글 (2)
Jmnote 2020-04-05
Luckyow 2020-04-05
왜 /etc/ssh/sshd_config 에 있는 Subsystem sftp /usr/libexec/openssh/sftp-server 이거를 Subsystem sftp internal-sftp 이렇게 바꾸나요