我有一个 *nix 系统,我想在其上配置 SFTP chroot。假设有三个用户,来自同一国家/地区的用户可以读取和写入来自其国家/地区的文件,但应进行 chroot,以便他们无法访问来自其他国家/地区的文件:
首先,创建一个 chroot:
$ sudo su -
$ mkdir /chroot
然后创建我的用户,他们的信息是:
alice
group: uk
other group: sftp-user
bob
group: uk
other group: sftp-user
charlie
group: italy
other group: sftp-user
它们都是使用命令创建的
useradd -g <group> -G <other group> -d /chroot/<group> -s /sbin/nologin -m <username>
(当bob
完成时,它会抱怨主目录已经存在,没关系)
现在我思考我需要向/etc/ssh/sshd_config
文件添加详细信息,但网络上的所有示例都是针对基于用户的 chroot,而不是组 chroot。我的计划是:
#Subsystem stfp /the/old/sftp/subsystem
Subsystem sftp internal-sftp
Match Group sftp-user
ForceCommand internal-sftp
ChrootDirectory %h
这看起来对吗?我运气不好!
答案1
这是一个老问题,但我会回答所有来自谷歌的人,
你的sshd_配置对于 sftp 用例来说看起来不错,您的问题可能是由其他原因引起的。
找出问题的最佳地点是/var/log/auth.log登录尝试失败后。还值得检查 ssh 服务是否正在运行,如果没有,则 sshd_config 中的其他地方可能存在格式错误。
您还需要确保每个用户的主目录(%h)归根:根并确保用户无法对其进行写入 - 这是监狱根目录的要求:
drwxr-xr-x 9 root root 4.0K Aug 2 00:10 alice
如果您想要同时允许 ssh 和 sftp (同时 chrooting 两者),请使用以下命令:
Subsystem sftp internal-sftp
Match Group jailed
ChrootDirectory %h
AllowTcpForwarding no
X11Forwarding no
现在要使 ssh 工作,您需要将 /bin/bash(或用户的默认 shell)复制到用户的主目录中:
cp /bin/bash $HOME/bin
将所有依赖项放入 $HOME/lib 和 $HOME/lib64。
DEPS=$(ldd /bin/bash | grep -Po '\/lib(64)?\/[a-zA-Z0-9\-_/.]+.so((.[0-9]{1,2})*.[0-9]{1,2})?' | tr '\n' ' ')
cp -n --parents $DEPS $HOME/
这些都需要用户可执行。
这是最低限度,其他程序如 ls 和 cat 也需要同样的处理。