정말 도움이 필요합니다. ubuntu
.
주의할 점:
james
사용자입니다sshusers
그룹이다/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
재귀 옵션을 사용하고 권한을 제거하십시오 . 수정된 세트는 다음과 같습니다.chown
chmod
/home/james
read
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자세한 내용은.