SFTP 사용자를 잠그는 방법은 무엇입니까?

SFTP 사용자를 잠그는 방법은 무엇입니까?

정말 도움이 필요합니다. ubuntu.

주의할 점:

  1. james사용자입니다
  2. sshusers그룹이다
  3. /home/james/upload/사용자를 잠그고 싶은 디렉토리입니다

sshd_config:

AllowGroups sshusers 

Match Group sshusers
    ChrootDirectory /home/%u/upload/
    ForceCommand internal-sftp

대답을 따랐다askubuntu에서 내 명령은 다음과 같습니다.

sudo chown root /home/james
sudo chmod go-w /home/james
sudo mkdir /home/james/upload
sudo chown james:sshusers /home/james/upload
sudo chmod ug+rwX /home/james/upload

문제:

이 오류가 발생합니다.

Error:  Network error: Software caused connection abort
Error:  Could not connect to server

로그를 조사한 결과 다음과 같은 사실을 발견했습니다.

치명적: chroot 디렉토리 구성 요소 "/home/james/upload/"에 대한 잘못된 소유권 또는 모드

하지만 다음 명령을 실행하면

sudo chown root /home/james/upload
sudo chmod go-w /home/james/upload

완벽하게 작동하고 사용자가 연결할 수 있으며 폴더가 잠겨 있습니다.하지만 파일을 삭제할 수는 없습니다.디렉토리에

Status: Listing directory /
Status: Directory listing successful
Status: Starting upload of C:\Users\Program\AppData\Local\Temp\fz3temp-1\empty_file_yq744zm
Command:    put "C:\Users\Program\AppData\Local\Temp\fz3temp-1\empty_file_yq744zm" "test"
Error:  /test: open for write: permission denied
Error:  File transfer failed

조언 부탁드립니다. Google에서 검색을 너무 많이 해서 이제 모든 링크가 보라색으로 표시됩니다(방문 :P)

테스트를 위해 filezilla 클라이언트를 사용하고 있습니다 SFTP.

답변1

지시어 ChrootDirectory는 chroot 디렉토리가 에 의해 소유되고 root다른 사람이 쓸 수 없다고 예상합니다. 그래서 당신은할 수 없다사용자를 디렉토리에 감금하고 사용자에게 해당 디렉토리에 쓸 수 있는 권한을 허용합니다. 다음을 수행할 수 있습니다.

집으로 Chroot하여 업로드upload/

시도한 첫 번째 명령 세트는 이에 대해 정확합니다.

sudo chown root /home/james
sudo chmod go-w /home/james
sudo mkdir /home/james/upload
sudo chown james:sshusers /home/james/upload
sudo chmod ug+rwX /home/james/upload

그러나 옵션은 다음과 sshd_config같습니다.

Match Group sshusers
    ChrootDirectory %h
    ForceCommand internal-sftp

( %h는 인증되는 사용자의 홈 디렉터리로 대체되며 /home/%u대부분의 경우와 동일합니다.) 또한 에서 폴더의 표시 여부를 제한 하고 쓰기 권한을 제한 하려면 에 대한 및 첫 번째 명령에서 /home/james재귀 옵션을 사용하고 권한을 제거하십시오 . 수정된 세트는 다음과 같습니다.chownchmod/home/jamesread

sudo chown root /home/james -R 
sudo chmod go-rwx /home/james -R  # Disallow traversing any directory in home 
sudo chmod go+x /home/james       # Allow traversing this directory
sudo mkdir /home/james/upload
sudo chown james:sshusers /home/james/upload
sudo chmod ug+rwx /home/james/upload

이제 사용자는 /home/james/upload또는 에만 액세스할 수 있습니다 /upload.

업로드할 Chroot, 업로드upload/some_directory

위와 거의 동일하며 /home/james/, /home/james/upload/home/james/upload로 대체됩니다 /home/james/upload/some_directory. 특별한 이득은 없습니다.

홈 디렉토리를 james다음 으로 변경하십시오./upload

ChrootDirectory의 일반적인 동작은 다음과 같습니다. "chroot 이후 sshd(8)는 작업 디렉터리를 사용자의 홈 디렉터리로 변경합니다." 그래서 우리는 james의 홈 디렉토리를 변경합니다:

usermod -d /upload  user

그런 다음 ChrootDirectory을 으로 설정합니다 /home/%u. 첫 번째 옵션에서도 동일한 제한 사항을 사용합니다.

답변2

OpenSSH에 내장된 sftp chroot 메커니즘을 사용하려면 chroot 디렉터리를 루트가 소유해야 하며 사용자가 쓸 수는 없습니다. 예를 들어 디렉터리가 바인드 마운트를 수행해야 하는 SMB/CIFS 공유인 경우 이는 어려울 수 있습니다.

보다 유연한 솔루션 중 하나는 MySecureShell(http://mysecureshell.readthedocs.io/en/latest/)

apt install mysecureshell

기본 OpenSSH 설정을 수정하지 않고도 작동합니다. SFTP 사용자 로그인 셸을 mysecureshell로 만들기만 하면 ACL/가상 chroot가 자동으로 처리됩니다. 자세한 내용은 설명서를 참조하세요.

예를 들어 MySecureShell을 설치한 후에는 아래와 같이 SFTP 사용자(홈 디렉터리로 제한됨)를 추가할 수 있습니다.

sudo useradd -m -d /home/sftpuser01 --shell /usr/bin/mysecureshell sftpuser01

위에서 'sftpuser01' 사용자는 SFTP 세션에서 '/home/sftpuser01'로 가상 루트가 지정됩니다.

또한 '/etc/ssh/sftp-config'를 구성하여 ACL, 그룹 등을 제어할 수 있는 유연한 옵션을 많이 제공합니다. 참고하세요http://mysecureshell.readthedocs.io/en/latest/configuration.html자세한 내용은.

관련 정보