服务器:Red Hat Enterprise Linux Server 版本 6.5(圣地亚哥)
使用 openssh-server 允许 sftp 连接。
我试图将用户限制在他们自己的个人主目录中。因此我修改了 /etc/passwd,设置用户“john”使用/bin/rbash
而不是/bin/bash
john:502:503::/home/john:/bin/rbash
如果我这样做,john 就无法通过 sftp 连接:他一登录,连接就会关闭(sftp 消息是Connection closed
)。如果我将 bash 设置为 /bin/bash,他的连接可以正常工作,但是 john 可以使用 cd 遍历整个服务器文件系统。
你能解释一下我做错了什么,以限制用户通过 sftp 连接到他们自己的目录吗?
答案1
rbash
不允许您运行以 为开头的命令/
,如果有人尝试运行,它就会退出。
除非您使用内部 sftp 服务器,否则执行尝试/usr/libexec/sftp-server
将会失败。
使用Subsystem sftp internal-sftp
将sshd_config
解决这个问题。
但是,使用rbash
不会阻止 sftp 在你的文件系统中漫游,你可能需要chroot 用户。
答案2
您可以使用没有链接的普通 shell,对于受限制的 shell,请在 /etc/profile 中输入以下内容
if [[ $USER == "pluto" ]]; then
export PATH=$HOME/bin
readonly PATH
set -r
fi
和
mkdir /home/pluto/bin as root
ln -s /bin/ls /home/pluto/bin/ls
这样 sftp 就可以工作了,而 pluto 只能使用 ls 命令