Chrooted SFTP用户写入权限


10

我只有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用户,并且对于组设置为不可写,那么就不可能对文件夹具有写权限。

有人知道周围有什么好工作吗?


chroot用户拥有自己的版ChrootDirectory?他们可以访问吗?
约翰·史密斯

Answers:


2

我在服务器上有相同的设置。我们使用SSHD的相同配置。用户的主目录由root拥有,并且其中包含文件夹documentspublic_html并由相应的用户拥有。然后,用户使用SFTP登录并写入这些文件夹(而不是直接写入主目录)。由于不允许使用SSH,因此可以正常使用。您可以在/ etc / skel /中调整将为新用户创建的目录(至少在openSUSE中,我对其他发行版不太熟悉)。

另一种可能性是ACLopenSUSE文档)-它可以为各自用户的主目录添加写许可权。


1
对我而言,在Debian Jessie(8.10)上,无法在用户家中设置ACL。当用户尝试使用SFTP登录时,他们会收到packet_write_wait: Connection to 10.0.0.42 port 22: Broken pipe
Drew Chapin

7

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

/ 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

将受限用户的房屋设置为它们在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层次结构并遵循符号链接的脚本。

嗨artm或任何其他读者,我知道这是一篇旧文章,但是请您帮我了解解决方法2吗?我有一个用户(ftpuser),需要将其监禁到其主目录(/ home / ftpuser /),这可以实现,但是/ home / ftpuser当然必须有755。我需要ftpuser能够在其主目录中创建文件nad文件夹。我需要创建什么符号链接,我的ChrootDirectory应该具有什么值?
公然

4

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


0

您应该创建以下目录结构:

/ home /用户

/ home / user / home / user <-用户将有权访问的真实目录

可选地:

/home/user/.ssh/authorized_keys <-如果要使用公共密钥进行身份验证


0

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

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

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

我找到:

root@server:~ # chmod 555 /home

可使用具有“读取”和“执行”权限(即555)的sftp进行连接。不确定debian与其他版本是否有所不同,但这就是在我的ubuntu安装中起作用的原因。


0

创建用户时,必须将所有权设置chown为每个用户的每个目录。

例如:

sudo chown usertest:groupsftp /home/rootsftp/usertest
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.