SFTP 用户根目录

SFTP 用户根目录

我编写了以下运行良好的脚本。它将创建一个 sftp 用户,当用户登录时,他们将处于 中/var/base/test1,他们无法在此目录中写入,他们需要输入/var/base/test1/test1,然后才能写入。

/var/base/test1/test1但是,这有点烦人,理想情况下我希望用户通过 ftp 登录时进入目录。有没有办法实现这一点?如果我将 ChrootDirectory(在 sshd_config 中)更改为/var/base/test1/test1,则 ftp 用户将无法再登录。

mkdir -p /var/base/test1/test1
chown root:root /var/base/test1
chown root:root /var/base
chmod 755 /var/base/test1
adduser --disabled-password --gecos test1
echo “test1:apassword” | chpasswd
chown test1:test1 /var/base/test1/test1
vim /etc/ssh/sshd_config
systemctl restart sshd

sshd_配置:

Match User test1
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/base/test1
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no

答案1

简短回答

这是不可能的,但设置 home/test1作为一种解决方法。

长答案

openssh要求ChrootDirectory和所有指向它的路径组件都属于 root 所有,并且其他任何人都无法写入。这是一项安全措施,以确保 不会ChrootDirectory被恶意操纵,例如被替换为指向完全其他地方的符号链接。如果 或其ChrootDirectory任何父目录不属于 root 所有,或不是组或世界可写的,则sshd拒绝登录。如果发生这种情况,您会在 中看到类似以下内容/var/log/auth.log

Jun 10 07:54:01 ubuntu-bionic sshd[2251]: fatal: bad ownership or modes for chroot directory "/var/base/test1"
Jun 10 07:54:01 ubuntu-bionic sshd[2173]: pam_unix(sshd:session): session closed for user test1

错误信息应该会给你指明正确的方向。

这也明确说明了sshd_config 手册页

Chroot目录
指定在认证后 chroot(2) 到的目录路径名。在会话启动时,sshd(8) 检查路径名的所有组件是否都是 root 拥有的目录,且其他任何用户或组都无法写入。chroot 之后,sshd(8) 将工作目录更改为用户的主目录。[...]

为了安全起见,防止目录层次结构被系统上的其他进程(尤其是 jail 之外的进程)修改非常重要。配置错误可能会导致 sshd(8) 无法检测到的不安全环境。

解决方法

但是,您可以将用户的主目录设置为/test1( sudo usermod test1 -d /test1),这样在chroot应用 后目录将更改为/var/base/test1/test1。这样,用户无需更改为 ,test1而是sftp在该目录中开始其会话。

$ sftp -P 2222 test1@localhost
test1@localhost's password: 
Connected to localhost.
sftp> pwd
Remote working directory: /test1

相关内容