중첩된 디렉터리에 대해 기본 setfacl이 실패하는 이유는 무엇입니까?

중첩된 디렉터리에 대해 기본 setfacl이 실패하는 이유는 무엇입니까?

나는 데비안의 내부 SFTP와 함께 SFTP를 사용합니다. 내가 달성하고 싶은 것은 모든 사용자를 잘 작동하는 특정 폴더에 가두는 것입니다. 또한 sftp에 대한 "관리자" 권한은 있지만 루트 권한은 없는 사용자가 필요합니다. 관리자 사용자는 파일에 액세스할 수 있도록 sftp 사용자 디렉토리에 파일을 넣습니다. 관리 사용자는 Winscp 또는 다른 클라이언트를 사용하여 작업을 수행하는 "비기술적" 사람입니다. 나는 그에게 bash를 사용하도록 강요할 수 없습니다.

나는 다음과 같은 해결책을 생각해 냈습니다.

  1. SFTP 구성

sshd_config를 사용하여 다음과 같이 설정했습니다.

Match group users
ChrootDirectory /home
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp -d %u

Match group sftponly
ChrootDirectory /home
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp -d admin/sftp/%u

따라서 내 "관리자" 사용자는 자신의 집에 있는 모든 SFTP 사용자를 소유합니다. "admin"도 사용자 그룹에 있습니다. 다른 모든 사용자는 sftponly 그룹에 생성됩니다. "admin"도 sftponly 그룹에 속해 있습니다.

  1. 디렉터리 설정

디렉토리 설정은 다음과 같습니다.

-/
 -home
  -admin
   -sftp
    -user1
    -user2

다음을 수행하는 sftp 사용자를 생성하는 스크립트를 만들었습니다.

  1. 사용자 $U 추가:

    useradd -d / -g 1000 -M -N -s /usr/sbin/nologin $U
    
  2. 사용자 $U 비밀번호 설정

    echo "$U:$P" | chpasswd
    
  3. /home/admin/sftp/$U 디렉토리 생성

    mkdir $SFTP_PATH/$U
    
  4. 소유권 설정

    chown $U:sftponly $SFTP_PATH/$U
    
  5. 권한 설정

    chmod u=rx,go= -R $SFTP_PATH/$U
    chmod g+s $SFTP_PATH/$U
    
  6. 액세스 제어 목록 설정

    setfacl -Rm u:admin:rwx,u:$U:r-x,g::--- $SFTP_PATH/$U
    setfacl -d -Rm u:admin:rwx,u:$U:r-x,g::--- $SFTP_PATH/$U
    

여태까지는 그런대로 잘됐다. 이제 저는 사용자 관리자가 $SFTP_PATH/$U$U 자체 내에 액세스할 수 있는 하위 디렉터리를 생성할 수 있도록 허용하는 6번 항목을 설정하고 싶지 않습니다 . 이는 생성된 첫 번째 디렉터리(사용자시험 장치):

# pwd
/home/admin/sftp/tester
# ls -alh
dr-xrwx---+  2 tester          sftponly 4.0K Oct 22 16:06 tester
# su admin
$ cd /home/admin/sftp/tester
$ mkdir subdir
$ ls -alh
admin@server:/home/admin/sftp/tester$ ls -alh
total 20K
dr-xrwx---+  3 tester   sftponly 4.0K Oct 22 22:41 .
drwxrwx---+ 28 admin sftponly 4.0K Oct 22 15:19 ..
dr-xrwx---+  2 admin users    4.0K Oct 22 22:41 subdir
$ cd subdir
admin@storage:/home/admin/sftp/tester/subdir$ mkdir nesteddir
mkdir: cannot create directory ‘nesteddir’: Permission denied

ACL을 테스트하면 다음과 같은 결과를 얻습니다.

admin@storage:/home/admin/sftp/tester$ getfacl subdir/
# file: subdir/
# owner: admin
# group: users
user::r-x
user:admin:rwx
user:tester:r-x
group::---
mask::rwx
other::---
default:user::r-x
default:user:admin:rwx
default:user:tester:r-x
default:group::---
default:mask::rwx
default:other::---

내 질문은 다음과 같습니다. 관리자로서 관리자의 setfacl을 rwx로 설정한 상태에서 왜 디렉터리를 만들 수 있습니까?하위 디렉토리하지만 디렉토리를 생성할 수 없습니다.중첩됨?

여기서 뭔가 빠졌나요? 나는 proftpd와 pureftp에 대해 알고 있지만 가능하다면 사용하고 싶습니다.SSH 모드. 이를 수행할 수 있는 방법이 없다면 기꺼이 올바른 방향을 제시하고 즉시 작동하는 설정을 가능하게 하는 소프트웨어를 추천해 드리겠습니다.

참고: 사용자 admin은 /home/admin/sharedfiles/ 아래에 자신의 디렉토리가 있으며, 여기에 나중에 sftp 사용자와 공유할 파일을 저장합니다. 파일은 해당 폴더의 하드 링크를 통해 공유됩니다. 예를 들어, 관리자가 3명의 사용자와 파일(500GB와 같이 매우 큰 파일)을 공유하려는 경우 해당 파일의 폴더에 하드 링크를 넣은 다음 큰 파일을 각 사용자에게 복사하지 않고도 다운로드할 수 있습니다. 사용자의 폴더.

이 문제는 관리자가 사용자를 위해 다양한 범주의 공유를 다양한 폴더에 배치하려고 할 때 발생합니다.

편집하다:

새로 생성된 폴더의 소유권을 "tester"로 변경하면 관리자가 중첩된 디렉터리를 생성할 수 있다는 것을 알았습니다. 그러나 추가 디렉터리 중첩을 허용하려면 중첩된 디렉터리의 소유권을 변경해야 했습니다.

# chown tester:sftponly subdir
# su admin
$ cd /home/admin/sftp/tester/subdir
$ mkdir nested                            # <----- works fine
$ cd nested
$ mkdir deepdir
mkdir: cannot create directory ‘deepdir’: Permission denied

따라서 다음 중첩 디렉터리를 생성하려면 그렇게 해야 하며 chown tester:sftponly nested사용자 관리자로서 해당 deepdir디렉터리를 생성할 수 있습니다.

ACL은 상속되며 이론적으로 사용자 admin은 첫 번째 폴더(예: subdir.

어쩌면 이것이 setfacl이 실패하는 이유를 찾는 데 도움이 될까요?

답변1

하위 디렉터리를 만들 때 그룹은 다릅니다.

drwxrwx---+ 28 admin sftponly 4.0K Oct 22 15:19 ..
dr-xrwx---+  2 admin *users* 4.0K Oct 22 22:41 subdir

중첩된 디렉터리 생성은 다른 하위 디렉터리 그룹으로 제한될 수 있습니다.

답변2

그룹의 원래 소유권을 할당하지 않도록 기본 그룹 ACL도 설정해야 하는 것으로 보입니다.

getfacl subdir/
# file: subdir/
# owner: admin
# group: users (It appears to then default to this)
user::r-x
user:admin:rwx
user:tester:r-x
group::--- (this is not set)
mask::rwx
other::---
default:user::r-x
default:user:admin:rwx
default:user:tester:r-x
default:group::---(this is not set)
default:mask::rwx
default:other::---

관련 정보