"SFTP만 되는 계정 생성"의 두 판 사이의 차이

잔글 (봇: 자동으로 텍스트 교체 (-<source lang='cli'> +<source lang='console'>))
잔글 (봇: 자동으로 텍스트 교체 (-source +syntaxhighlight))
 
(사용자 4명의 중간 판 34개는 보이지 않습니다)
5번째 줄: 5번째 줄:


==계정 생성==
==계정 생성==
;명령어
{{소스헤더|명령어}}
<source lang='bash'>
<syntaxhighlight lang='bash'>
useradd -s /sbin/nologin 계정명
useradd -s /sbin/nologin -G sftp-only 계정명
</source>
</syntaxhighlight>
:→ <code>-G</code> 옵션은 [[useradd 그룹 지정하여 만들기]] 참고


;실행예시
{{소스헤더|실행예시}}
<source lang='console'>
<syntaxhighlight lang='console'>
[root@zetawiki ~]# useradd -s /sbin/nologin sftpuser
[root@zetawiki ~]# useradd -s /sbin/nologin -G sftp-only sftpuser
[root@zetawiki ~]#  
[root@zetawiki ~]#  
</source>
</syntaxhighlight>


==패스워드 지정 & 확인==
==패스워드 지정 & 확인==
;명령어
{{소스헤더|명령어}}
<source lang='bash'>
<syntaxhighlight lang='bash'>
echo '패스워드' | passwd --stdin 계정명
echo '패스워드' | passwd --stdin 계정명
ssh 계정명@localhost
ssh 계정명@localhost
</source>
</syntaxhighlight>


;실행예시
{{소스헤더|실행예시}}
<source lang='console'>
<syntaxhighlight lang='console'>
[root@zetawiki ~]# echo 'P@ssw0rd' | passwd --stdin sftpuser
[root@zetawiki ~]# echo 'P@ssw0rd' | passwd --stdin sftpuser
Changing password for user sftpuser.
Changing password for user sftpuser.
30번째 줄: 31번째 줄:
[root@zetawiki ~]# ssh sftpuser@localhost
[root@zetawiki ~]# ssh sftpuser@localhost
sftpuser@localhost's password:  
sftpuser@localhost's password:  
</source>
</syntaxhighlight>
:→ 패스워드 입력
:→ 패스워드 입력
<source lang='console'>
<syntaxhighlight lang='console'>
This account is currently not available.
This account is currently not available.
Connection to localhost closed.
Connection to localhost closed.
</source>
</syntaxhighlight>
:→ 패스워드는 맞지만 쉘권한이 없어서 세션이 닫힘.
:→ 패스워드는 맞지만 쉘권한이 없어서 세션이 닫힘.


==sshd_config 수정==
==chroot 적용==
{{참고|sshd_config}}
특정 경로를 root로 정하고 그 디렉토리 밖으로 못 나가는 chroot 설정이 가능하다.<ref> https://en.wikibooks.org/wiki/OpenSSH/Cookbook/File_Transfer_with_SFTP#SFTP-only_Accounts</ref>
<source lang='console'>
[root@zetawiki ~]# vi /etc/ssh/sshd_config
</source>
아래와 같이 내용을 교체...


<syntaxhighlight lang='bash'>
#Subsystem sftp /usr/libexec/openssh/sftp-server
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Subsystem sftp internal-sftp
 
Match Group sftpuser
 
         ChrootDirectory /sftp_home/
==chroot 적용==
         ForceCommand internal-sftp -d %u
특정 경로를 root로 정하고 그 디렉토리 밖으로 못 나가는 chroot 설정이 가능하다.
</syntaxhighlight>
 
:→ 위와 같이 설정하면 <code>sftp-only</code> 그룹에 속한 유저가 접속할 경우, <code>/sftp_home/사용자명</code> 경로가 <code>/</code>로 보인다.
<source lang='bash'>
:→ Subsystem sftp를 변경하는 이유는 [[sftp-server와 internal-sftp 차이]] 참고
Subsystem sftp internal-sftp
Match Group sftpgrp
         ChrootDirectory /sftp_home/%u
         ForceCommand internal-sftp
</source>
위와 같이 설정하면 'sftpgrp' 그룹에 속한 유저가 접속할 경우, /sftp_home/사용자명 경로가 / 경로가 된다.


chroot 사용 시 디렉토리 소유자와 퍼미션에 주의해야 한다.
chroot 사용 시 디렉토리 소유자와 퍼미션에 주의해야 한다.
69번째 줄: 61번째 줄:


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


아래와 같이 소유자 설정이 되면 된다. group은 sftpgrp일 필요가 없으며 group, other 권한은 없어도 무관함.
아래와 같이 소유자 설정이 되면 된다. 그룹이 sftp-only일 필요가 없으며 group, other 권한은 없어도 무관함.
<source lang='bash'>
<syntaxhighlight lang='bash'>
drwxr-xr-x root root /sftp_home/sftpuser/
drwxr-xr-x root root /sftp_home/sftpuser/
drwxr-xr-x sftpuser sftpgrp /sftp_home/sftpuser/uploads
drwxr-xr-x sftpuser sftp-only /sftp_home/sftpuser/uploads
</source>
</syntaxhighlight>
 
==sftp만 되는 계정의 password 변경==
sftp만 되는 사용자가 직접 패스워드 변경은 불가능하다. root 사용자가 변경해주거나 별도 툴이 있어야 한다.
/etc/passwd 에 접근이 불가능 해서라고...
 
*http://serverfault.com/questions/275002/openssh-sftp-with-chroot-how-to-change-password
*http://changepassword.sourceforge.net/


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


이제 sftpuser 계정으로 SFTP로 접속하면 된다...
이제 sftpuser 계정으로 SFTP로 접속하면 된다...
==sftp만 되는 계정의 password 변경==
sftp만 되는 사용자가 자신의 패스워드를 바꾸는 것은 불가능하다. root 사용자가 변경해주거나 별도 툴이 있어야 한다.
/etc/passwd 에 접근이 불가능하기 때문이다.<ref>http://serverfault.com/questions/275002/openssh-sftp-with-chroot-how-to-change-password</ref><ref>http://changepassword.syntaxhighlightforge.net/</ref>


==같이 보기==
==같이 보기==
*[[쉘 권한 없는 계정 생성]]
* [[chroot]]
*[[리눅스 SFTP 서버 사용]]
* [[쉘 권한 없는 계정 생성]]
* [[리눅스 SFTP 서버 사용]]
* [[sftp-server과 internal-sftp 차이]]


==참고 자료==
==참고==
*http://www.stevebooks.com/blog/?p=26
* http://snoopybox.co.kr/1687 리눅스 SFTP만 되는 계정 설정
*http://en.wikibooks.org/wiki/OpenSSH/Cookbook/SFTP
*http://snoopybox.co.kr/1687


[[분류: 리눅스 계정]]
[[분류: 리눅스 계정]]
[[분류: SFTP]]
[[분류: SFTP]]

2020년 11월 2일 (월) 00:56 기준 최신판

SFTP만 되는 계정 생성
Shell 로그인 권한은 없고 SFTP만 접속할 수 있는 계정 설정하기
nologin 계정에 SFTP를 허용하는 방법

1 계정 생성[ | ]

명령어
useradd -s /sbin/nologin -G sftp-only 계정명
-G 옵션은 useradd 그룹 지정하여 만들기 참고
실행예시
[root@zetawiki ~]# useradd -s /sbin/nologin -G sftp-only sftpuser
[root@zetawiki ~]#

2 패스워드 지정 & 확인[ | ]

명령어
echo '패스워드' | passwd --stdin 계정명
ssh 계정명@localhost
실행예시
[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:
→ 패스워드 입력
This account is currently not available.
Connection to localhost closed.
→ 패스워드는 맞지만 쉘권한이 없어서 세션이 닫힘.

3 chroot 적용[ | ]

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

#Subsystem	sftp	/usr/libexec/openssh/sftp-server
Subsystem	sftp	internal-sftp
Match Group sftpuser
        ChrootDirectory /sftp_home/
        ForceCommand internal-sftp -d %u
→ 위와 같이 설정하면 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 권한으로 아래와 같이 해야 한다.

mkdir -p /sftp_home/sftpuser/uploads
chown sftpuser:sftp-only /sftp_home/sftpuser/uploads

아래와 같이 소유자 설정이 되면 된다. 그룹이 꼭 sftp-only일 필요가 없으며 group, other 권한은 없어도 무관함.

drwxr-xr-x root root /sftp_home/sftpuser/
drwxr-xr-x sftpuser sftp-only /sftp_home/sftpuser/uploads

4 sshd 재시작[ | ]

[root@zetawiki ~]# service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]

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

5 sftp만 되는 계정의 password 변경[ | ]

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

6 같이 보기[ | ]

7 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}