작업 솔루션

작업 솔루션

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)에 대한 디렉터리 경로 이름을 지정합니다.경로 이름의 모든 구성 요소는 루트가 소유해야 합니다.다른 사용자나 그룹이 쓸 수 없는 디렉터리입니다.

이렇게 하면 사용자는 friendSFTP에 다시 연결할 수 있지만 나갈 수는 없지만 /home/여전히 액세스할 수 있습니다 /home/anotheruser/....

답변3

.sshd_config 파일에 대한 수정 사항을 유지하고 이를 사용하여 chmod -R 700 /home/anotheruser다른 사람(포함)을 제한 friend할 수 있습니다.chmod 값 수정이것이 너무 엄격하다면 이것이 제가 개인적으로 제 질문에서 찾는 것입니다.여기. (이 답변을 다른 답변으로 게시해서 죄송합니다. 귀하의 답변에 댓글로 추가할 만큼 평판이 충분하지 않습니다.)

관련 정보