服务器chroot
环境已经搭建完成,用户可以通过 访问服务器sftp
,除此之外,还需要使用git
我正在关注这个链接创建 chroot-jail-ssh-访问,复制/bin/bash
/usr/bin/git-shell
到/home/someuser/bin/bash
和/home/someuser/usr/bin/git-shell
以及l2chroot
部分。
/home/someuser/lib#ls -al -R
total 12 drwxr-xr-x 3 git git 4096 Jul 24 15:21 . drwxr-xr-x 25
root root 4096 Jul 24 15:21 .. drwxr-xr-x 2 git git 4096 Jul 24
15:21 x86_64-linux-gnu
./x86_64-linux-gnu: total 2888 drwxr-xr-x 2 git git 4096 Jul 24
15:21 . drwxr-xr-x 3 git git 4096 Jul 24 15:21 ..
-rwxr-xr-x 1 git git 1868984 Jul 24 15:21 libc.so.6
-rw-r--r-- 1 git git 14608 Jul 24 15:21 libdl.so.2
-rw-r--r-- 1 git git 456632 Jul 24 15:21 libpcre.so.3
-rwxr-xr-x 1 git git 138696 Jul 24 15:21 libpthread.so.0
-rw-r--r-- 1 git git 31712 Jul 24 15:21 librt.so.1
-rw-r--r-- 1 git git 130224 Jul 24 15:21 libselinux.so.1
-rw-r--r-- 1 git git 167240 Jul 24 15:21 libtinfo.so.5
-rw-r--r-- 1 git git 104864 Jul 24 15:21 libz.so.1
但是我登录时someuser
它抱怨:
Last login: Mon Jul 24 16:59:19 2017 from 114.***.189
**/usr/bin/git-shell: Not a directory**
首先我希望 git 用户能够使用 git。其次我不希望他们能够读取系统上的每个文件。如何实现?
更新:
sshd_config
sftp 部分
Subsystem sftp internal-sftp -f AUTH -l INFO
Match group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp -l INFO -f AUTH
AllowTcpForwarding no
X11Forwarding no
Match group git
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
答案1
如果您希望在 chroot 中使用 git(一旦您不允许 shell 访问,就没有理由这样做),则需要将可执行文件包含在 chroot 中。只需从系统中复制一个(包括所有动态链接库)。
答案2
@Shihe Zhang,由于我只有拥有“50 点声誉”才能回复您,所以我将在这里回复...我怀疑您收到的错误/usr/bin/git-shell: Not a directory
是由于 chroot 中没有所需的库造成的。
例如,当我运行 时ldd /usr/bin/git-shell
,我会在 /lib 和 /lib64 中获得变量库。如果这些被mount --bind
放入 chroot。那么我也需要挂载“/dev”。
因此,执行以下操作可解决此问题(至少对我来说):
for i in lib lib64 dev; do mkdir /home/git/$i; mount --bind -o ro /$i /home/git/$i; done