openssh sftp chroot:两种访问级别

openssh sftp chroot:两种访问级别

我希望使用 OpenSSH 的 internal-sftp、chroot 和 Match 指令实现以下​​目标:

属于组的用户sftp用户应该具有对 /srv/sftp/{username} 的读写权限(或类似地,可以采取某些技巧来向 chrooted 用户呈现更好看的目录结构)

属于组的用户sftp管理员应该具有对 /srv/sftp 及其子目录(即所有其他用户目录)的读写权限。

所有属于 sftpadmin 或 sftpuser 的用户都是 sftp 专用用户。因此无需担心 shell 等。

/srv/sftp 需要由 root 拥有,以便 sftpadmin 用户能够 chroot 到该文件夹​​。/srv/sftp/{username} 也需要由 root 拥有,以便将 sftpuser 用户 chroot 到该文件夹​​。

我应该如何最好地授予 sftpadmin 用户对 root 拥有的 /srv/sftp/{username} 目录的访问权限?

我可以在根权限之上使用 ACL 吗?

答案1

我最终这样做了:

/srv/sftp/testadmin (主目录测试管理员用户)

/srv/sftp/testuser/testuser (测试用户用户)

我将 sftpadmin 组 chroot 到 /srv/sftp:

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

我将 sftpuser 组 chroot 到 /srv/sftp/{username},并将其起始目录更改为 /srv/sftp/{username}/{username}(从 chroot 来看,这只是 /{username}):

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

最后,我授予 sftpadmin 组对 /srv/sftp/testuser/testuser 目录的 rwx 权限:

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

这大致实现了我想要的。sftp管理员组可以读取、写入和更改工作目录到 /srv/sftp 下的任何内容(包括“主目录”sftp用户组)。sftp用户组只能写入 /srv/sftp/{username}/{username} 目录,而看不到其他目录sftp用户主目录,因为它们位于 sftpuser 组的 chroot 之外。

唯一不理想的是 /srv/sftp/{username}/{username} 结构。sftpuser 组的用户可以执行光盘 ..然后返回到 /srv/sftp/{username},该用户除了改回 /srv/sftp/{username}/{username} 外,无法执行任何有用的操作。可以通过删除 /srv/sftp/{username} 的执行位来阻止将目录更改为 /srv/sftp/{username},但这也会阻止 sftpadmin 组更改到该目录,从而有效地阻止他们列出 /srv/sftp/{username}/{username} 目录中的文件等。

相关内容