(→계정 생성) |
Jmnote bot (토론 | 기여) 잔글 (봇: 자동으로 텍스트 교체 (-source +syntaxhighlight)) |
||
(사용자 2명의 중간 판 4개는 보이지 않습니다) | |||
6번째 줄: | 6번째 줄: | ||
==계정 생성== | ==계정 생성== | ||
{{소스헤더|명령어}} | {{소스헤더|명령어}} | ||
< | <syntaxhighlight lang='bash'> | ||
useradd -s /sbin/nologin -G sftp-only 계정명 | useradd -s /sbin/nologin -G sftp-only 계정명 | ||
</ | </syntaxhighlight> | ||
:→ <code>-G<code> 옵션은 [[useradd 그룹 지정하여 만들기]] 참고 | :→ <code>-G</code> 옵션은 [[useradd 그룹 지정하여 만들기]] 참고 | ||
{{소스헤더|실행예시}} | {{소스헤더|실행예시}} | ||
< | <syntaxhighlight lang='console'> | ||
[root@zetawiki ~]# useradd -s /sbin/nologin -G sftp-only sftpuser | [root@zetawiki ~]# useradd -s /sbin/nologin -G sftp-only sftpuser | ||
[root@zetawiki ~]# | [root@zetawiki ~]# | ||
</ | </syntaxhighlight> | ||
==패스워드 지정 & 확인== | ==패스워드 지정 & 확인== | ||
{{소스헤더|명령어}} | {{소스헤더|명령어}} | ||
< | <syntaxhighlight lang='bash'> | ||
echo '패스워드' | passwd --stdin 계정명 | echo '패스워드' | passwd --stdin 계정명 | ||
ssh 계정명@localhost | ssh 계정명@localhost | ||
</ | </syntaxhighlight> | ||
{{소스헤더|실행예시}} | {{소스헤더|실행예시}} | ||
< | <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. | ||
31번째 줄: | 31번째 줄: | ||
[root@zetawiki ~]# ssh sftpuser@localhost | [root@zetawiki ~]# ssh sftpuser@localhost | ||
sftpuser@localhost's password: | sftpuser@localhost's password: | ||
</ | </syntaxhighlight> | ||
:→ 패스워드 입력 | :→ 패스워드 입력 | ||
< | <syntaxhighlight lang='console'> | ||
This account is currently not available. | This account is currently not available. | ||
Connection to localhost closed. | Connection to localhost closed. | ||
</ | </syntaxhighlight> | ||
:→ 패스워드는 맞지만 쉘권한이 없어서 세션이 닫힘. | :→ 패스워드는 맞지만 쉘권한이 없어서 세션이 닫힘. | ||
42번째 줄: | 42번째 줄: | ||
특정 경로를 root로 정하고 그 디렉토리 밖으로 못 나가는 chroot 설정이 가능하다.<ref> https://en.wikibooks.org/wiki/OpenSSH/Cookbook/File_Transfer_with_SFTP#SFTP-only_Accounts</ref> | 특정 경로를 root로 정하고 그 디렉토리 밖으로 못 나가는 chroot 설정이 가능하다.<ref> https://en.wikibooks.org/wiki/OpenSSH/Cookbook/File_Transfer_with_SFTP#SFTP-only_Accounts</ref> | ||
< | <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 | ||
48번째 줄: | 48번째 줄: | ||
ChrootDirectory /sftp_home/ | ChrootDirectory /sftp_home/ | ||
ForceCommand internal-sftp -d %u | ForceCommand internal-sftp -d %u | ||
</ | </syntaxhighlight> | ||
:→ 위와 같이 설정하면 <code>sftp-only</code> 그룹에 속한 유저가 접속할 경우, <code>/sftp_home/사용자명</code> 경로가 <code>/</code>로 보인다. | :→ 위와 같이 설정하면 <code>sftp-only</code> 그룹에 속한 유저가 접속할 경우, <code>/sftp_home/사용자명</code> 경로가 <code>/</code>로 보인다. | ||
:→ Subsystem | :→ Subsystem sftp를 변경하는 이유는 [[sftp-server와 internal-sftp 차이]] 참고 | ||
chroot 사용 시 디렉토리 소유자와 퍼미션에 주의해야 한다. | chroot 사용 시 디렉토리 소유자와 퍼미션에 주의해야 한다. | ||
61번째 줄: | 61번째 줄: | ||
예를 들어 위 설정이 적용된 서버에 sftpuser 계정으로 접속한 사용자가 원활히 업로드 할 수 있게 하려면 root 권한으로 아래와 같이 해야 한다. | 예를 들어 위 설정이 적용된 서버에 sftpuser 계정으로 접속한 사용자가 원활히 업로드 할 수 있게 하려면 root 권한으로 아래와 같이 해야 한다. | ||
< | <syntaxhighlight lang='bash'> | ||
mkdir -p /sftp_home/sftpuser/uploads | mkdir -p /sftp_home/sftpuser/uploads | ||
chown sftpuser:sftp-only /sftp_home/sftpuser/uploads | chown sftpuser:sftp-only /sftp_home/sftpuser/uploads | ||
</ | </syntaxhighlight> | ||
아래와 같이 소유자 설정이 되면 된다. 그룹이 꼭 sftp-only일 필요가 없으며 group, other 권한은 없어도 무관함. | 아래와 같이 소유자 설정이 되면 된다. 그룹이 꼭 sftp-only일 필요가 없으며 group, other 권한은 없어도 무관함. | ||
< | <syntaxhighlight lang='bash'> | ||
drwxr-xr-x root root /sftp_home/sftpuser/ | drwxr-xr-x root root /sftp_home/sftpuser/ | ||
drwxr-xr-x sftpuser sftp-only /sftp_home/sftpuser/uploads | drwxr-xr-x sftpuser sftp-only /sftp_home/sftpuser/uploads | ||
</ | </syntaxhighlight> | ||
==sshd 재시작== | ==sshd 재시작== | ||
< | <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 ] | ||
</ | </syntaxhighlight> | ||
이제 sftpuser 계정으로 SFTP로 접속하면 된다... | 이제 sftpuser 계정으로 SFTP로 접속하면 된다... | ||
83번째 줄: | 83번째 줄: | ||
==sftp만 되는 계정의 password 변경== | ==sftp만 되는 계정의 password 변경== | ||
sftp만 되는 사용자가 자신의 패스워드를 바꾸는 것은 불가능하다. root 사용자가 변경해주거나 별도 툴이 있어야 한다. | sftp만 되는 사용자가 자신의 패스워드를 바꾸는 것은 불가능하다. root 사용자가 변경해주거나 별도 툴이 있어야 한다. | ||
/etc/passwd 에 접근이 불가능하기 때문이다.<ref>http://serverfault.com/questions/275002/openssh-sftp-with-chroot-how-to-change-password</ref><ref>http://changepassword. | /etc/passwd 에 접근이 불가능하기 때문이다.<ref>http://serverfault.com/questions/275002/openssh-sftp-with-chroot-how-to-change-password</ref><ref>http://changepassword.syntaxhighlightforge.net/</ref> | ||
==같이 보기== | ==같이 보기== |
2020년 11월 2일 (월) 00:56 기준 최신판
✔️ CentOS 6.3에서 테스트하였습니다.
- SFTP만 되는 계정 생성
- Shell 로그인 권한은 없고 SFTP만 접속할 수 있는 계정 설정하기
- nologin 계정에 SFTP를 허용하는 방법
1 계정 생성[ | ]
명령어
Bash
Copy
useradd -s /sbin/nologin -G sftp-only 계정명
- →
-G
옵션은 useradd 그룹 지정하여 만들기 참고
실행예시
Console
Copy
[root@zetawiki ~]# useradd -s /sbin/nologin -G sftp-only sftpuser
[root@zetawiki ~]#
2 패스워드 지정 & 확인[ | ]
명령어
Bash
Copy
echo '패스워드' | passwd --stdin 계정명
ssh 계정명@localhost
실행예시
Console
Copy
[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:
- → 패스워드 입력
Console
Copy
This account is currently not available.
Connection to localhost closed.
- → 패스워드는 맞지만 쉘권한이 없어서 세션이 닫힘.
3 chroot 적용[ | ]
특정 경로를 root로 정하고 그 디렉토리 밖으로 못 나가는 chroot 설정이 가능하다.[1]
Bash
Copy
#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 사용 시 디렉토리 소유자와 퍼미션에 주의해야 한다.
- 소유자는 root 여야 한다
- root 이외의 사용자가 접속 '/' 경로에 쓰기 권한이 있어선 안된다.
- root 이외 사용자에게 쓰기 권한이 있는 경우, sftp 접속이 안된다.
- /var/log/secure 로그에 fatal: bad ownership or modes for chroot directory "경로" 라고 남음.
- '/' 경로에 쓰기 권한이 없으니 접속하는 사용자가 파일 업로드가 불가능하다. 접속자 소유의 uploads 디렉토리를 각 '/' 경로 밑에 만들어주면 해결.
예를 들어 위 설정이 적용된 서버에 sftpuser 계정으로 접속한 사용자가 원활히 업로드 할 수 있게 하려면 root 권한으로 아래와 같이 해야 한다.
Bash
Copy
mkdir -p /sftp_home/sftpuser/uploads
chown sftpuser:sftp-only /sftp_home/sftpuser/uploads
아래와 같이 소유자 설정이 되면 된다. 그룹이 꼭 sftp-only일 필요가 없으며 group, other 권한은 없어도 무관함.
Bash
Copy
drwxr-xr-x root root /sftp_home/sftpuser/
drwxr-xr-x sftpuser sftp-only /sftp_home/sftpuser/uploads
4 sshd 재시작[ | ]
Console
Copy
[root@zetawiki ~]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
이제 sftpuser 계정으로 SFTP로 접속하면 된다...
5 sftp만 되는 계정의 password 변경[ | ]
sftp만 되는 사용자가 자신의 패스워드를 바꾸는 것은 불가능하다. root 사용자가 변경해주거나 별도 툴이 있어야 한다. /etc/passwd 에 접근이 불가능하기 때문이다.[2][3]
6 같이 보기[ | ]
7 참고[ | ]
- http://snoopybox.co.kr/1687 리눅스 SFTP만 되는 계정 설정
편집자 Jmnote Jmnote bot
로그인하시면 댓글을 쓸 수 있습니다.
Jmnote 2020-04-05
Luckyow 2020-04-05
- 분류 댓글:
- SFTP (4)
- 리눅스 계정 (2)
SFTP만 되는 계정 생성 ― LuckyowSFTP만 되는 계정 생성 ― Jmnote리눅스 SFTP 서버 사용 ― …윈도우에 SFTP 서버 구축하기 ― …