friend
방금 내 친구에게 SFTP 액세스를 제공하여 친구가 자신의 웹사이트를 호스팅할 수 있도록 내 서버에 새 사용자를 만들었습니다 .
사용자가 SFTP를 통해 서버에 연결할 때 friend
기본 폴더는 이지만 /home/friend/
쉽게 종료할 수 있다는 것을 확인했습니다./home/friend/
읽기 액세스 권한으로 서버의 모든 파일에 액세스합니다., 예를 들어 /home/anotheruser/website2/config.php
! 나는 이것을 원하지 않습니다.
이 사용자를 "감옥/격리 모드"로 설정하라는 지시를 받았으므로 기본 설정이 끝나면 다음과 같습니다 sshd_config
.
...
Subsystem sftp /usr/lib/openssh/sftp-server
...이것을 추가했습니다:
Match User friend
ChrootDirectory /home/friend
ForceCommand internal-sftp
그리고 해냈습니다 service sshd restart
.
그러면 더 이상 사용자를 사용하여 SFTP를 통해 서버에 연결할 수 없습니다 friend
. 이런! 또한 Subsystem ...
으로 교체해 보았지만 Subsystem sftp internal-sftp
결과는 동일합니다. friend
더 이상 SFTP를 통해 서버에 연결할 수 없습니다.
질문:
friend
집 밖으로 나갈 수 없도록 SFTP/SSH를 통해 사용자를 격리하는 방법은 무엇입니까 ?/home/friend/
참고: 읽었습니다.chroot Jail을 사용하여 SFTP 사용자를 홈 디렉터리로 제한하는 방법,SFTP 전용 SSH 사용자를 집으로 어떻게 루트로 전환합니까? , 등.
답변1
어떤 OS를 사용하고 있는지 잘 모르겠지만 감옥에 갇힌 SFTP 사용자를 구성해야 할 때 아래 링크를 사용합니다. 다음은 감옥에 갇힌 SFTP 사용자를 구성하는 방법에 대한 매우 유용한 튜토리얼입니다.
https://access.redhat.com/solutions/2399571
그런 다음 친구가 액세스할 수 있도록 원하는 chroot 디렉토리에 두 디렉토리 중 하나를 마운트합니다.
답변2
작업 솔루션
이것은 튜토리얼에서 영감을 얻었습니다SSH 키를 사용하여 제한된 chroot 사용자로 SFTP 서버를 구성하는 방법 @HeysusEscobar의 답변에서 언급되었습니다.
다음에서 수행하세요 root
.
useradd friend # NB: this doesn't create a home dir, see https://askubuntu.com/q/374870
passwd friend # set the password
groupadd sftpusers
mkdir /sftp
mkdir /sftp/friend # this is where he'll be chrooted
mkdir /sftp/friend/home # his home directory
mkdir /sftp/friend/www # for websites
usermod -aG sftpusers friend # aG for append group
chown friend:sftpusers /sftp/friend/home/
chown friend:sftpusers /sftp/friend/www/
usermod -d /sftp/friend/home friend # set as his home directory
다음 항목에 추가하세요 /etc/ssh/sshd_config
.
# Subsystem sftp /usr/lib/openssh/sftp-server # you'll probably need to comment this line
Subsystem sftp internal-sftp -d /home
Match Group sftpusers
ChrootDirectory /sftp/%u
그리고 service sshd restart
. 그게 다야!
알아채다:
- 다른 사용자는 여전히 가능하므로
ssh
다른 사용자를 위해 아무것도 수정하지 않습니다. - 사용자는
friend
다음을 수행할 수 없습니다.ssh
- 사용자는
friend
다음을 통해 연결할 수 있습니다.sftp
friend
추신: 웹사이트에서 인터넷에 액세스할 수 있도록 하려면 이를 Apache 구성에 추가하면 됩니다.
<VirtualHost *:80>
ServerName friend.example.com
DocumentRoot /sftp/friend/www
php_admin_value "open_basedir" "/sftp/friend"
<Directory />
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
사이트 참고 사항: 위의 작업을 수행한 후에도 여전히 PHP를 사용하여 chroot 환경을 종료하거나 전체 파일 시스템에 영향을 미치는 악성 코드를 실행할 open_basedir
수 없습니까 ? friend
링크 질문:루트가 변경되거나 격리된 SFTP 사용자는 여전히 PHP를 사용하여 전체 파일 시스템에 액세스할 수 있습니다.
오래된(절반만 작동하는) 솔루션
문서에 따르면 ChrootDirectory /home/friend
도움말로 바꾸십시오.ChrootDirectory /home
ChrootDirectory: 인증 후 chroot(2)에 대한 디렉터리 경로 이름을 지정합니다.경로 이름의 모든 구성 요소는 루트가 소유해야 합니다.다른 사용자나 그룹이 쓸 수 없는 디렉터리입니다.
이렇게 하면 사용자는 friend
SFTP에 다시 연결할 수 있지만 나갈 수는 없지만 /home/
여전히 액세스할 수 있습니다 /home/anotheruser/...
.
답변3
.sshd_config 파일에 대한 수정 사항을 유지하고 이를 사용하여 chmod -R 700 /home/anotheruser
다른 사람(포함)을 제한 friend
할 수 있습니다.chmod 값 수정이것이 너무 엄격하다면 이것이 제가 개인적으로 제 질문에서 찾는 것입니다.여기. (이 답변을 다른 답변으로 게시해서 죄송합니다. 귀하의 답변에 댓글로 추가할 만큼 평판이 충분하지 않습니다.)