我正在为我的系统(archlinux)上的某些用户设置一个sshd监狱。 在不赘述的情况下,我想将问题的范围保持在最小。
设置/etc/ssh/sshd_config
:
Match group jaileduser
ChrootDirectory /var/jailedusers
X11Forwarding no
AllowTcpForwarding no
以及类似于以下内容的系统/etc/password
条目:
testuser1:x:2001:2000::/home/testuser1:/bin/bash
所以问题是:/home/testuser1
的主目录是否相对于sshd_config
条目/var/jailedusers
即 passwd 条目应该/var/jailedusers/home/testuser1
还是/home/testuser1
/var/jailedusers
/home/testuser1
目录 - AND 是同一条船上的外壳 - passwd 条目是/var/jailedusers/bin/bash
还是简单地/bin/bash
。
最后,登录时系统/etc/passwd
读取或/var/jailedusers/etc/passwd
根据sshd_config
条目读取。
基于手册页:
Specifies the pathname of a directory to chroot(2) to after
authentication. All components of the pathname must be root-
owned directories that are not writable by any other user or
group. After the chroot, sshd(8) changes the working directory
to the user's home directory.
因此/etc/passwd
需要包含相对于系统根目录的路径(即 /bin/bash
和/home/testuser1
)和系统的根,在chroot之后,实际上是/var/jailedusers
的(这意味着/var/jailedusers/home/testuser1
将是实际的家,/var/jailedusers/bin/bash
实际的shell)。
要回答问题的第二部分,sshd
将读取/etc/passwd
,执行身份验证,然后chroot
/var/jailedusers
。
请注意,/var/jailedusers
还需要包含其他文件,例如bash
所需的共享库和一组最小的/dev
条目(例如 /dev/null
)。