web-dev-qa-db-ja.com

openssh sftp chroot:2つのレベルのアクセス

OpenSSHのinternal-sftp、chroot、Matchディレクティブを使用して次のことを実現したいと思います。

グループsftpuserに属するユーザーは、/ srv/sftp/{username}への読み取りおよび書き込みアクセス権を持っている必要があります(または同様の、chrootされたユーザーに見栄えの良いディレクトリ構造を提示するための特定のトリックが取られる場合があります)

グループsftpadminに属するユーザーは、/ srv/sftpおよびサブディレクトリ、つまり他のすべてのユーザーディレクトリへの読み取りおよび書き込みアクセス権を持っている必要があります。

Sftpadminまたはsftpuserのいずれかに属するすべてのユーザーは、sftpのみのユーザーです。したがって、シェルなどについて心配する必要はありません。

/ srv/sftpは、sftpadminユーザーがそのフォルダーにchrootされるために、rootが所有している必要があります。/srv/sftp/{username}も、sftpuserユーザーをそのフォルダーにchrootするために、rootが所有する必要があります。

ルートが所有する/ srv/sftp/{username}ディレクトリへのアクセスをsftpadminユーザーに許可するにはどうすればよいですか?

ルート権限に加えてACLを使用できますか?

3
Wuhtzu

私はこれをすることになった:

/ srv/sftp/testadmin(testadminユーザーのホームディレクトリ)

/ srv/sftp/testuser/testuser(testuserユーザーのホーム)

/ srv/sftpにchrootしたsftpadminグループ:

Match Group sftpadmin
    ChrootDirectory /srv/sftp
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

そして、私が/ srv/sftp/{username}にchrootし、開始ディレクトリを/ srv/sftp/{username}/{username}(chrootから見た/ {username})に変更したsftpuserグループ:

Match Group sftpuser
    ChrootDirectory /srv/sftp/%u
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp -d /%u

最後に、/ srv/sftp/testuser/testuserディレクトリにsftpadminグループrwxを指定しました。

setfacl -m g:sftpadmin:rwx /srv/sftp/testuser/testuser

これは私が望んでいたことを大まかに達成しました。 sftpadminグループは、作業ディレクトリの読み取り、書き込み、および/ srv/sftpの下の任意の場所への変更(sftpuserグループの「ホームディレクトリ」を含む)を行うことができます。 sftpuserグループは/ srv/sftp/{username}/{username}ディレクトリにのみ書き込むことができ、他のsftpuserホームディレクトリはchrootの外部にあるため表示できません。 sftpuserグループ。

これについて望ましくないと思うのは、/ srv/sftp/{username}/{username}構造だけです。 sftpuserグループのユーザーはcd ..を実行して、/ srv/sftp/{username}に戻ることができます。この場合、ユーザーは変更以外に何もできません。/srv/sftp/{username}/{username}に戻ります。/srv/sftp/{username}へのディレクトリの変更は、/ srv/sftp/{username}の実行ビットを削除することで防ぐことができますが、sftpadminグループがそのディレクトリに変更するのを防ぎ、ファイルの一覧表示を効果的に防ぐことができます。/srv/sftp/{username}/{username}ディレクトリなど。

4
Wuhtzu