Chroot SFTP 用户写入权限

Chroot SFTP 用户写入权限

我有一个仅 sftp 用户的设置:

Match Group sftponly
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

我在 secure.log 中收到以下消息:

fatal: bad ownership or modes for chroot directory

使用 match 关键字会带来一些安全问题...目录需要由 root 拥有,并且目录需要 chmod 755 (drwxr-xr-x)。因此,如果由于 ssh 的安全性而只能对用户 root 可写,而对组设置为不可写,那么用户就不可能拥有对文件夹的写权限。

有人知道有什么好的解决办法吗?

答案1

我们最近找到了一个解决方法,如下所示:

/etc/ssh/sshd_config:

...

Subsystem sftp internal-sftp

Match Group sftponly
    ChrootDirectory /home
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

目录权限:

root@server:~ # chown root:root /home
root@server:~ # chmod 111 /home
root@server:~ # chmod 700 /home/*

现在/home满足受限用户的要求ChrootDirectory并且不能被受限用户列出,但是sftponly如果用户的主目录照常设置,则用户将无法登录 ( /home/$LOGNAME):在 chroot 环境下,他们的主目录不在内部/home,而是直接在其下根 (/)。

解决方法1

将受限用户的 home 设置为它们在 chroot 下的显示方式:

root@server:~ # usermod -d /username username

注意事项 1

如果任何不受限制的用户或某些管理脚本使用 bash 的波形符扩展,就像~username它会扩展到/username现在一样,这不是本意。

此外,创建用户的管理员sftponly必须记住使用非默认主页。可以用脚本解决。管理员必须记住使用它。

解决方法2

这是我们最终使用的上一个的替代方案:

root@server:~ # ln -s . /home/home

/home在其自己的目录名中创建一个符号链接。现在,在 chroot 下/home/username指向与没有 chroot 时相同的目录。对于使用 sftp 登录的受限用户,它将显示为/username。该目录对其所有者(受限用户)是可写的。受限用户无法按名称列出任何同级用户的父目录或主目录。

用户唯一的特别之处sftponly在于其对sftponly群组的参与。我们发现它比解决方法 1 更容易处理。

注意事项 2

  1. 您不能让名为“home”的用户拥有主目录/home/home
  2. 您必须小心遍历/home层次结构并遵循符号链接的脚本。

答案2

您需要在用户的主目录中创建一个结构,例如 in 和 out dirs。这些目录应该由用户拥有,他可以在那里放置和获取文件。

答案3

我在我们的服务器上有相同的设置。我们使用相同的 SSHD 配置。用户的主目录由 root 拥有,其中有文件夹documents并由public_html各自的用户拥有。然后,用户使用 SFTP 登录并写入这些文件夹(而不是直接写入主目录)。由于他们不允许使用 SSH,所以它完全可以工作。你可以在 /etc/skel/ 中调整为新用户创建哪些目录(至少在 openSUSE 中,我对其他发行版不太熟悉)。

另一种可能性是前交叉韧带openSUSE 文档) - 它可以为各个用户添加对其主目录的写入权限。

答案4

参考“目录权限”部分在@artm(我刚刚测试过)的回答中..我发现:

root@server:~ # chmod 111 /home <- Does not work

它不允许 sftp 连接在 ubuntu 上工作,并且对所有内容(即 111)仅具有执行权限。

我找到:

root@server:~ # chmod 555 /home

可以使用读取和执行权限(即 555)连接到 sftp。不确定 debian 与其他风格是否不同,但这就是我安装的 ubuntu 上的功能。

相关内容