sftp 전용 SSH 사용자를 어떻게 집으로 chroot 할 수 있습니까?


123

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

라는 사용자를 만들고이라는 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

2
나는 ChrootDirectory /home/%u대체 될 수 있다고 믿는다 ChrootDirectory %h.
Franck Dernoncourt

답변:


119

이 모든 고통은 여기에 설명 된 몇 가지 보안 문제로 인한 입니다. 기본적으로 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.


3
정말 감사합니다. 그래도 두 가지 문제가 있습니다. 1.) 쓸 수는 없지만 여전히 전체 파일 시스템을 탐색 할 수 있습니다. 2.) 쉘을 / bin / false로 변경하면 SFTP가 완전히 방지됩니다. 내가 뭔가 잘못하고 있습니까?
kim3er 2016 년

1
감사합니다! 이 주제에 대한 다른 많은 기사는이 세부 사항을 놓치고 일부는 서버가 ssh 연결을 수락 할 수 없도록합니다 (EC2에있을 때 짜증나 며 유일한 방법입니다).
Tom Harrison Jr

4
kim3er : 사용자의 쉘을 / sbin / nologin으로 설정해야하기 때문입니다. / bin / false는 모든 종류의 액세스를 비활성화합니다.

8
또한 chroot 폴더로 연결되는 모든 폴더는에 의해 소유되어야합니다 root. 이 예에서는 /home루트가 소유해야합니다.
Shiki

2
14.04에서 나는 또한 작동하기 전에 Subsystem sftp /usr/lib/openssh/sftp-server줄을 바꿔야 Subsystem sftp internal-sftp -f AUTH -l VERBOSE했습니다.
partofthething

57

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
    

3
이것은 작동하지 않는 것 같습니다. 귀하의 예에서, 사용자 john/home/john디렉토리에 잠겨 있습니다. 755디렉토리에 대한 권한을 부여했습니다 . 따라서 소유자는 read (4), write (2) 및 execute (1)을 가지며 그룹은 read (4) 및 execute (1)을 갖습니다. 소유자 및 그룹을 (으)로 설정 root했으므로 john다른 그룹에 속합니다 그는 또한 읽고 (4 + 1 = 5) 실행했습니다. 존을 쓰기 권한이없는 디렉토리에 잠갔습니다. 이 문제를 해결하는 방법? 권한을 변경 757하거나 777로그인을 중단시킵니다. 그룹 또는 소유자를 john으로 변경하면 로그인이 중단됩니다.
Daniel

참고 사항 : / etc / ssh / sshd_config에서 구성을 순서대로 읽습니다. 따라서 일반 사용자에 대한 규칙이 있고 그 중 하나를 덮어 쓰려면 사용자 별 규칙을 맨 위에 두십시오.
rwenz3l

다른 사용자의 홈 폴더에 SFTP 디렉토리를 chroot하고 싶습니다. /home/userx/sftproot/uploads/ home / sftpuse에 userx가 있고 sftpuser가 있습니다. 나는 /home/usex/sftprootroot : root 및 chmod 755 /home/usex/sftproot/uploads가 chroot를 소유하도록 설정 했습니다. sftpuser : sftpuser에 의해 chown-ed됩니다. 위의 초기 질문과 동일한 오류가 발생합니다. sftp가 작동하려면 chroot와 모든 상위 폴더를 root : root가 소유해야합니까?
Primoz Rome

6

나는 하루 종일 라즈베리에서 네트워크 공유를 시도했습니다. 전체 파일 시스템을 탐색하고 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폴더에 소유권을 부여하고 소유권을 부여 하면 그룹 권한 을 망칠 필요없이 모든 것이 작동하도록 할 수있는 것 같습니다 .


1

나는 기사를 따랐 지만 효과가 없었다. 이 변경을 한 후에 작동하기 시작했습니다 (위의 답변에서 제안).

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

또한 사용자가 쓸 수있는 하위 디렉토리가있는 루트 소유 홈 디렉토리를 만들었습니다 (위 설명 참조).

이 답변으로 추가하려는 새롭고 유용한 것은 사용자 홈 디렉토리로 % h를 지정하여 구성을 단순화 할 수 있다는 것입니다.

ChrootDirectory %h

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.