Chrooted SFTP 用户写入权限

Adi*_*sak 10 linux ssh sftp centos

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

Match Group sftponly
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no
Run Code Online (Sandbox Code Playgroud)

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

fatal: bad ownership or modes for chroot directory
Run Code Online (Sandbox Code Playgroud)

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

有人知道一个好的工作吗?

art*_*rtm 7

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

/etc/ssh/sshd_config:

...

Subsystem sftp internal-sftp

Match Group sftponly
    ChrootDirectory /home
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp
Run Code Online (Sandbox Code Playgroud)

目录权限:

root@server:~ # chown root:root /home
root@server:~ # chmod 111 /home
root@server:~ # chmod 700 /home/*
Run Code Online (Sandbox Code Playgroud)

现在/home满足ChrootDirectory限制用户不能列出的要求,但是sftponly如果他们的家目录照常设置,用户将无法登录(/home/$LOGNAME):在chrooted环境下,他们的家目录不在里面,/home而是直接在根 ( /)

解决方法 1

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

root@server:~ # usermod -d /username username
Run Code Online (Sandbox Code Playgroud)

警告 1

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

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

解决方法 2

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

root@server:~ # ln -s . /home/home
Run Code Online (Sandbox Code Playgroud)

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

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

警告 2

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


Til*_*lia 2

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

另一种可能性是ACL(openSUSE 文档)——它可以为各个用户添加对其主目录的写权限。