sftp 전용 SSH 사용자를 어떻게 집으로 chroot 할 수 있습니까? 쉘을 변경했습니다 .

클라이언트에게 서버에 대한 액세스 권한을 부여하고 싶지만 해당 사용자를 홈 디렉토리로 제한하고 싶습니다. 볼 수있는 파일을 바인드 마운트합니다.

라는 사용자를 만들고이라는 bob새 그룹에 추가했습니다 sftponly. 에 홈 디렉토리가 /home/bob있습니다. /bin/falseSSH 로그인을 중지 하도록 쉘을 변경했습니다 . 그들의 /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하려면 다음을 수행해야합니다.

  1. 사용자를 작성하고 루트가 소유자가되도록하십시오.

    cd /home
    mkdir john
    useradd -d /home/john -M -N -g users john
    sudo chown root:root /home/john
    sudo chmod 755 /home/john
    
  2. / 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

링크 덕분에 그것을 발견했습니다 .