클라이언트에게 서버에 대한 액세스 권한을 부여하고 싶지만 해당 사용자를 홈 디렉토리로 제한하고 싶습니다. 볼 수있는 파일을 바인드 마운트합니다.
라는 사용자를 만들고이라는 bob
새 그룹에 추가했습니다 sftponly
. 에 홈 디렉토리가 /home/bob
있습니다. /bin/false
SSH 로그인을 중지 하도록 쉘을 변경했습니다 . 그들의 /etc/passwd
선 은 다음과 같습니다 .
bob:x:1001:1002::/home/bob:/bin/false
또한 /etc/ssh/sshd_config
다음을 포함하도록 변경했습니다 .
Match Group sftponly
ChrootDirectory /home/%u
ForceCommand internal-sftp
AllowTcpForwarding no
내가 그들로 로그인하려고 할 때, 여기 내가 보는 것입니다
$ sftp bob@server
bob@server's password:
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer
내가 ChrootDirectory
줄을 주석 처리하면 SFTP를 입력 할 수 있지만 서버를 자유롭게 사용할 수 있습니다. 나는 그것이 ChrootDirectory /home
효과 가 있음을 발견 했지만 여전히 모든 홈 디렉토리에 액세스 할 수 있습니다. 명시 적으로 시도 ChrootDirectory /home/bob
했지만 작동하지 않습니다.
내가 무엇을 잘못하고 있지? 어떻게 제한 bob
할 수 /home/bob/
있습니까?
—-편집하다—–
좋아, 방금 살펴 /var/log/auth.log
보고 이것을 보았습니다.
May 9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session opened for user bob by (uid=0)
May 9 14:45:48 nj sshd[5091]: fatal: bad ownership or modes for chroot directory component "/home/bob/"
May 9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session closed for user bob
나는 무슨 일이 일어나고 있는지 확실하지 않지만 사용자 디렉토리에 문제가 있음을 암시합니다. ls -h /home
출력 은 다음과 같습니다 .
drwxr-xr-x 26 oli oli 4096 2012-01-19 17:19 oli
drwxr-xr-x 3 bob bob 4096 2012-05-09 14:11 bob
답변
이 모든 고통은 여기에 설명 된 몇 가지 보안 문제로 인한 것 입니다. 기본적으로 chroot 디렉토리는 소유해야하며 root
그룹 쓰기 액세스가 될 수 없습니다. 아름다운. 따라서 본질적으로 chroot를 보류 셀로 바꿔야하며 그 안에 편집 가능한 내용을 담을 수 있습니다.
sudo chown root /home/bob
sudo chmod go-w /home/bob
sudo mkdir /home/bob/writable
sudo chown bob:sftponly /home/bob/writable
sudo chmod ug+rwX /home/bob/writable
그리고 bam, 당신은 로그인하고 쓸 수 있습니다 /writable
.
답변
SFTP 디렉토리를 chroot하려면 다음을 수행해야합니다.
-
사용자를 작성하고 루트가 소유자가되도록하십시오.
cd /home mkdir john useradd -d /home/john -M -N -g users john sudo chown root:root /home/john sudo chmod 755 /home/john
-
/ etc / ssh / sshd_config에서 서브 시스템 위치를 변경하십시오.
#Subsystem sftp /usr/lib/openssh/sftp-server Subsystem sftp internal-sftp
파일 끝에 사용자 섹션을 만듭니다 (서브 시스템 라인 뒤에 배치하면 ssh는 다시 생성 될 수 있습니다).
Match User john ChrootDirectory /home/john ForceCommand internal-sftp AllowTCPForwarding no X11Forwarding no
답변
나는 하루 종일 라즈베리에서 네트워크 공유를 시도했습니다. 전체 파일 시스템을 탐색하고 ssh 로그인 액세스를 할 수 없도록 사용자를 잠그고 싶었고 네트워크 공유에 대한 쓰기 액세스 권한을 원했습니다.
그리고 여기 내가 작동시키는 방법이 있습니다 :
먼저 사용자를 만들었습니다.
sudo useradd netdrive
그런 다음 편집 하여 사용자 /etc/passwd
가 가지고 있는지 확인하십시오 /bin/false
.
netdrive:x:1001:1004:Net Drive User,,,:/home/netdrive:/bin/false
/etc/ssh/sshd_config
다음을 포함하도록 편집 했습니다.
Match User netdrive
ChrootDirectory /home/netdrive
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
변경된 홈 디렉토리 소유자 및 권한 :
sudo chown root:root /home/netdrive/
sudo chmod 755 /home/netdrive/
좋아, 결국이 모든 것을 사용 sshfs
하지만 읽기 전용 모드 로 연결할 수있었습니다 . 쓰기 가능한 폴더를 얻기 위해해야 할 일 :
sudo mkdir -p /home/netdrive/home/netdrive/
sudo chown netdrive:netdrive /home/netdrive/home/netdrive/
sudo chmod 755 /home/netdrive/home/netdrive/
그것은 더 이상 변경없이 작동했습니다. 나는에만 쓰기 권한이 있는지 참고 사용자 가 아니라에, 그룹을 온라인으로 다른 많은 솔루션으로. 문제없이 파일 / 폴더를 생성 / 삭제 / 편집 / 이름 바꾸기 할 수있었습니다.
chroot 구성으로 인해 netdrive 사용자 sshfs
와 함께 사용하여 액세스 할 때 서버 디렉토리 내부에 저장된 것만 볼 수 있습니다. 반복되는 디렉토리 구조는 깨끗한 chroot ssh 쓰기 가능 솔루션을 만드는 데 효과적이었습니다 ./home/netdrive/
/home/netdrive/home/netdrive/
이제 내가 가진 문제를 아래에서 설명하겠습니다.
다음 단락을 실행해서는 안됩니다 .
위의 솔루션 (및 acl (액세스 제어 목록)을 사용하는 인터넷의 많은 다른 사람들)을 본 후에도 다음에 수행 한 작업 때문에 여전히 작동하지 못했습니다.
다음은 않았다 NOT 나를 위해 작동 :
sudo mkdir /home/netdrive/writable/
sudo chown netdrive:netdrive /home/netdrive/writable/
sudo chmod 755 /home/netdrive/writable/
때문에 Netdrive가 사용자는 여전히에 쓸 수 없습니다 /home/netdrive/writable/
폴더를 소유하고 권한을에도 불구 디렉토리. 그런 다음 sudo chmod 775 / home / netdrive / writable /을 수행했습니다. 이제 디렉토리를 작성하고 삭제할 수는 있지만 그룹 쓰기 가능 권한없이 작성 되었기 때문에 디렉토리를 편집 할 수 없었습니다. 여기 사람들이 인터넷에서 본 내용 acl
을 수정 하는 데 사용합니다. 그러나 설치 acl
후 마운트 지점 등을 구성 해야했기 때문에 나는 만족하지 못했습니다 . 동일한 사용자가 소유 한 폴더에 쓰려면 그룹 권한 이 필요한 이유를 모릅니다 .
어떤 이유로 든 /home/netdrive/home/netdrive
마지막 netdrive
폴더에 소유권을 부여하고 소유권을 부여 하면 그룹 권한 을 망칠 필요없이 모든 것이 작동하도록 할 수있는 것 같습니다 .
답변
나는 이 기사를 따랐 지만 효과가 없었다. 이 변경을 한 후에 작동하기 시작했습니다 (위의 답변에서 제안).
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
또한 사용자가 쓸 수있는 하위 디렉토리가있는 루트 소유 홈 디렉토리를 만들었습니다 (위 설명 참조).
이 답변으로 추가하려는 새롭고 유용한 것은 사용자 홈 디렉토리로 % h를 지정하여 구성을 단순화 할 수 있다는 것입니다.
ChrootDirectory %h
이 링크 덕분에 그것을 발견했습니다 .