基于组名的 Chroot

基于组名的 Chroot

我有一个 *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 也需要同样的处理。

这里有一个关于如何为 ssh 用户设置 chroot jail 的精彩教程

相关内容