Chrooted SFTP 사용자 쓰기 권한


10

sftp 전용 사용자로 설정했습니다.

Match Group sftponly
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

secure.log에 다음 메시지가 표시됩니다.

fatal: bad ownership or modes for chroot directory

match 키워드를 사용하면 몇 가지 보안 기능이 제공됩니다 ... 디렉토리는 루트가 소유해야하며 디렉토리는 chmod 755 (drwxr-xr-x) 여야합니다. 따라서 사용자 루트에만 쓰기 가능하고 ssh의 보안으로 인해 그룹에 대해 쓰기 불가능으로 설정된 경우 사용자는 폴더에 대한 쓰기 권한을 가질 수 없습니다.

누군가 좋은 일에 대해 알고 있습니까?


할 일 chroot사용자가 자신의 에드 ChrootDirectory? 그들이 접근 할 수 있습니까?
존 WH 스미스

답변:


2

서버에 동일한 설정이 있습니다. 동일한 구성의 SSHD를 사용합니다. 사용자의 홈 디렉토리는이 폴더는 루트와 그 안에 소유 documents하고 public_html각각의 사용자가 소유. 그런 다음 사용자는 SFTP를 사용하여 로그인하여 해당 폴더에 직접 기록하지 않습니다. SSH는 허용되지 않으므로 완벽하게 작동합니다. / etc / skel /에서 새 사용자를 위해 생성 될 디렉토리를 조정할 수 있습니다 (적어도 openSUSE에서는 다른 배포판에 익숙하지 않습니다).

또 다른 가능성은 ACL ( openSUSE documentation )입니다. 홈 디렉토리에 대한 각 사용자에 대한 쓰기 권한을 추가 할 수 있습니다.


1
저에게는 데비안 Jessie (8.10)에서 사용자 집에 ACL을 설정해도 작동하지 않습니다. 사용자가 SFTP로 로그인을 시도 할 때, 그들은 얻을packet_write_wait: Connection to 10.0.0.42 port 22: Broken pipe
드류 채핀에게

7

최근에 다음과 같은 해결 방법을 찾았습니다.

/ etc / ssh / sshd_config :

...

Subsystem sftp internal-sftp

Match Group sftponly
    ChrootDirectory /home
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

디렉토리 권한 :

root@server:~ # chown root:root /home
root@server:~ # chmod 111 /home
root@server:~ # chmod 700 /home/*

이제 /home만족은 요구 사항 ChrootDirectory과는 제한된 사용자로 나열 할 수는 없지만, sftponly사용자는 자신의 홈 디렉토리가 (평소와 같이 설정된 경우에 로그인 할 수 없습니다 /home/$LOGNAME) : chroot 된 환경에서 홈 디렉토리는 없습니다 내부에 /home있지만 바로 아래 루트 ( /).

해결 방법 1

제한된 사용자의 집을 chroot 아래에 나타나는 방식으로 설정하십시오.

root@server:~ # usermod -d /username username

동굴 1

제한되지 않은 사용자 또는 일부 관리 스크립트가 bash의 물결표 확장을 사용 ~username하여 /username지금 확장되는 것처럼 의미하는 것은 아닙니다.

또한 sftponly사용자 를 만드는 관리자는 기본이 아닌 집을 사용해야합니다. 스크립트로 해결할 수 있습니다. 관리자가 사용해야하는 것을 기억하십시오.

해결 방법 2

이것은 이전에 사용했던 이전의 대안입니다.

root@server:~ # ln -s . /home/home

그것은 /home자신의 디렉토리 이름 으로 심볼릭 링크를 만드는 것 입니다. 이제 chroot에서 chroot /home/username가없는 것과 동일한 디렉토리를 가리 킵니다. sftp로 로그인 한 제한된 사용자의 경우으로 나타납니다 /username. 이 디렉토리는 소유자 (제한된 사용자)에게 쓸 수 있습니다. 제한된 사용자는 형제의 부모 또는 홈 디렉토리를 이름으로 나열 할 수 없습니다.

sftponly사용자의 특별한 점 은 sftponly그룹에 참여하는 것 입니다. 해결 방법 1보다 다루기가 더 쉽다는 것을 알았습니다.

동굴 2

  1. 홈 디렉토리에 이름이 'home'인 사용자를 가질 수 없습니다 /home/home
  2. /home계층 구조 를 통과 하고 심볼릭 링크를 따르는 스크립트에주의해야합니다 .

안녕 artm 또는 다른 독자들, 나는 이것이 오래된 게시물이라는 것을 알고 있지만 해결 방법 2를 이해하는 데 도움을 줄 수 있습니까? 나는 그들의 홈 디렉토리 (/ home / ftpuser /)에 투옥되어야하는 사용자 (ftpuser)를 가지고있다. 홈 디렉토리에 파일 nad 폴더를 만들려면 ftpuser가 필요합니다. 어떤 symlink를 만들어야합니까, ChrootDirectory가 어떤 가치를 가져야합니까?
노골적인

4

in과 out dirs와 같이 사용자의 홈 디렉토리 내부에 구조를 작성해야합니다. 이러한 dirs는 사용자가 소유해야하며 파일을 넣고 가져올 수 있습니다.


0

다음 디렉토리 구조를 작성해야합니다.

/ home / user

/ home / user / home / user <-사용자가 액세스 할 실제 디렉토리

선택적으로 :

/home/user/.ssh/authorized_keys <-공개 키로 인증하려는 경우


0

@artm (방금 테스트 한)의 답변에서 '디렉토리 권한'섹션 을 참조하십시오.

root@server:~ # chmod 111 /home <- Does not work

그것은 sftp 연결이 우분투에서 작동하도록 허용하지 않습니다.

나는 그것을 발견했다 :

root@server:~ # chmod 555 /home

읽기 및 실행 권한 (예 : 555)을 사용하여 sftp에 연결하여 작동합니다.


0

사용자를 만들 때 chown모든 사용자의 모든 디렉토리를 사용하여 소유권을 설정해야합니다 .

예를 들면 다음과 같습니다.

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