决定完全重新措辞该问题,以便不必提出新的问题。
我目前使用 OpenSSH 的 SFTP 功能设置了一个 SFTP 服务器。我的所有用户都已 chroot,一切正常。
我现在最需要的是让一个非 root 用户(因为这个用户不能拥有任何真正的 SSH 权限!)能够访问所有其他用户的 chrooted 目录。这个用户的工作是偶尔获取所有上传的文档。
目前的目录结构如下:
/家|_ /家/用户1 |_ /家/用户2 |_ /家/用户3
将 ChrootDirectory 设置为 /home/%u
用户“adminuser”应该有权访问 user1、user2 和 user3 的目录,但无权访问 /home,或者至少不能访问 /home 以外的任何目录。
奖励积分谁能告诉我如何让用户在 /home/%u 内写入,而不必在他们自己拥有的目录中创建新目录,而不是像 /home/%u 那样以 root 身份进行写入(openssh chroot 先决条件)。
答案1
创建一个新的主目录,例如 /chroothome。
让所有用户的主目录位于该 chroothome 内。
chroot 管理员用户到 /chroothome。
对于其他一切,只需使用文件系统权限。
至于您的“附加问题”,使用本机功能无法实现。chroot 用户无法写入根目录是设计上的安全机制。当然,您始终可以修改源代码。
不过,我怀疑您可以将用户的主目录指定为 /user1,并将登录时的工作目录设为他们可以写入的目录。
答案2
在您的 /etc/ssh/sshd_config 中添加以下行:
Subsystem sftp internal-sftp
Match group SFTP-users
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
然后更改用户主目录的所有者
# chown root.root /home/user
# usermod -d / user
# adduser user SFTP-users
重新启动 ssh 服务器守护进程
#/etc/init.d/sshd restart
答案3
1°) sshd 检查主目录是否由登录的用户拥有。 2°) 如果你使用 chroot,sshd 将检查主目录下的每个父目录是否由 root 拥有(http://www.tenshu.net/archives/2008/10/09/openssh-51-chrootdirectory-permissions-issue/)
如果你想 chroot 一个用户并让他读取其他用户的 chroot,那么这个用户的 home 必须是这些用户 chroot 的父目录。因此你将违反前两个规则之一。
据我所知,唯一的解决办法就是修补 sshd :-)