
일반적으로 성공적으로 로그인하고 명령 sftp
을 실행한 후에는 put
내 파일이 로그인한 사용자의 디렉터리로 전송될 것으로 예상합니다 $HOME
. 이것은 기본적으로 작동하지만 sftp
사용자를 자신의 디렉토리로 제한하고 싶습니다( 예를 들어 더 이상 레벨을 올릴 $HOME
수 없도록 ).cd
이것은 내가 사용하는 곳입니다 ChrootDirectory
- 문서에 따라 (https://linux.die.net/man/5/sshd_config)
ChrootDirectory: 인증 후 chroot(2)에 대한 경로를 지정합니다. 이 경로와 모든 구성 요소는 다른 사용자나 그룹이 쓸 수 없는 루트 소유 디렉터리여야 합니다.
폴더/권한을 올바르게 설정했다고 생각합니다. 내가 생각하는 문서의 다음 문장은 예상대로 작동하지 않거나 작동하지 않습니다.
chroot 후에 sshd(8)는 작업 디렉토리를 사용자의 홈 디렉토리로 변경합니다.
사용자 작업 디렉토리를 통해 서버를 sshd_config
사용 하고 성공적으로 액세스하도록 수정한 후에는 사용자의 $HOME 디렉토리로 설정되지 않으며 실제로는 한 수준 위로 설정됩니다. (예: 대신 ) 사용자를 위한 확실한 해결 방법은 한 수준 아래의 올바른 디렉토리로 CD를 이동하는 것입니다. 그러나 단순히 데이터를 현재 작업 디렉토리로 FTP로 전송하는 자동화 시스템을 사용하는 경우 이는 매우 문제가 될 수 있습니다.ChrootDirectory
sftp
/home
/home/userTest
먼저 일반적인 사례를 보여준 다음 이를 수정하여 기본 작업 디렉토리 동작이 ChrootDirectory
도입된 후 어떻게 변경되는지 보여 드리겠습니다.sshd_config
이는 예상대로 작동합니다.
- 사용자를 생성합니다(
-m
이 사용자 홈 디렉터리를 생성하는 데 사용).sudo useradd -m userTest
- 사용자에게 비밀번호를 제공하십시오.
sudo passwd userTest
userTest
$HOME 디렉터리 참고 :cat /etc/passwd
->userTest:x:1002:1004::/home/userTest:/bin/sh
- 방금 생성한 사용자를 위해 서버에 sftp를 실행합니다.
sftp userTest@<your-server>
- 성공적으로 로그인한 후 작업 디렉터리를 기록해 두십시오.
pwd
->Remote working directory: /home/userTest
위의 예는 예상한 대로 정확하게 작동하지만 유일한 문제는 userTest
작업 디렉터리에 잠겨 있지 않고 cd ..
파일 시스템을 재설정할 수 있다는 것입니다.
여러 가이드에서 모두 이 문제에 대해 동일한 기본 해결책을 제시했습니다(https://linuxconfig.org/how-to-setup-sftp-server-on-ubuntu-20-04-focus-fossa-linux)
이전 단계에 추가
Match
sftp 그룹을 추가합니다(이는 에서 블록 의 키로 사용됩니다sshd_config
).sudo addgroup sftp
userTest
그룹에 사용자를 추가합니다 .sudo usermod -a -G sftp userTest
- 편집하다
sshd_config
:sudo nano /etc/ssh/sshd_config
- 파일 끝에 다음 줄을 추가하십시오.
Match group sftp
ChrootDirectory /home
ForceCommand internal-sftp
(이는 기본적으로 그룹에 속한 모든 사용자가 및 규칙 sftp
의 적용을 받는다는 것을 의미합니다 .)ChrootDirectory
ForceCommand
파일을 저장하고 SSH를 다시 시작합니다. sudo systemctl restart ssh
지정된 디렉토리가 ChrootDirectory
위 문서의 요구 사항을 충족하는지 확인하십시오. ls -ltr
-> drwxr-xr-x 4 root root 4096 Jun 10 09:02 home
(이것은 합격이라고 생각합니다)
userTest
다시 사용하여 즉시 사용 가능한 설정과 새로운 구성 SFTP의 결과를 비교하십시오 .sftp userTest@<your-server>
현재 작업 디렉토리를 기록해 두십시오: pwd
->Remote working directory: /
이것은 뭔가 잘못되었다는 확실한 증거가 아닙니다. 작업 디렉터리가 변경될 것으로 예상합니다... 그러나 현재 작업 디렉터리의 내용을 빠르게 확인하겠습니다.
ls -ltr
-> drwxr-x--- 3 1002 1004 4096 Jun 10 09:10 userTest
(!!!)
문서에 따르면:
chroot 후에 sshd(8)는 작업 디렉토리를 사용자의 홈 디렉토리로 변경합니다.
ls -ltr
작업 디렉터리가 userTest
홈 디렉터리에 있지 않고 실제로 한 수준 위라는 것을 보여줍니다.
ChrootDirectory
예상대로 작동하도록 구성하는 방법이나 다른 방법이 있습니까 ?
참고: ForceCommand
sshd_config에서 제거하면 실제로 11년 전에 ERRATA로 종결된 다른 문제가 발생합니까?
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=681202