ネストされたディレクトリに対してデフォルトのsetfaclが失敗するのはなぜですか?

ネストされたディレクトリに対してデフォルトのsetfaclが失敗するのはなぜですか?

私はDebianの内部SFTPでSFTPを使用します。私が達成したいのは、すべてのユーザーをうまく機能する特定のフォルダに閉じ込めることです。また、sftpに対する「管理者」権限はありますが、root権限を持たないユーザーが必要です。管理者ユーザーは、ファイルにアクセスできるように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人のユーザーとファイル(500 GBなどの非常に大きなファイル)を共有したい場合は、そのファイルのフォルダにハードリンクを配置してから、大きなファイルを各ユーザーにコピーせずにダウンロードできます。ユーザーのフォルダ。

この問題は、管理者がユーザーのさまざまなカテゴリの共有をさまざまなフォルダに配置しようとしたときに発生します。

編集する:

新しく作成されたフォルダの所有権を「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::---

関連情報