当前位置: 首页>>技术问答>>正文


我如何才能将sftp-only SSH用户打入家中?

, , ,

问题描述

我想给客户端访问我的服务器,但我想限制这些用户到他们的主目录。我将bind-mount放入我希望他们能够看到的任何文件中。

我创建了一个名为bob的用户,并将他添加到名为sftponly的新组中。他们在/home/bob有一个主目录。我已将他们的shell更改为/bin/false以停止SSH登录。这是他们的/etc/passwd系列:

bob:x:1001:1002::/home/bob:/bin/false

我还更改了/etc/ssh/sshd_config以包含以下内容:

Match Group sftponly
        ChrootDirectory /home/%u
        ForceCommand internal-sftp
        AllowTcpForwarding no

当我尝试以他们的身份登录时,以下是我所看到的内容

$ sftp bob@server
bob@server's password: 
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer

如果我注释掉ChrootDirectory行,我可以使用SFTP,但是他们可以自由地控制服务器。我发现ChrootDirectory /home可以工作,但它仍然可以访问任何主目录。我明确地尝试过ChrootDirectory /home/bob,但那也不起作用。

我究竟做错了什么?如何限制bob/home/bob/

– – 编辑 – – –

好吧,我只是看看/var/log/auth.log并看到了这一点:

May  9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session opened for user bob by (uid=0)
May  9 14:45:48 nj sshd[5091]: fatal: bad ownership or modes for chroot directory component "/home/bob/"
May  9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session closed for user bob

我不完全确定那里发生了什么,但它表明用户目录有问题。这是ls -h /home输出:

drwxr-xr-x 26 oli      oli      4096 2012-01-19 17:19 oli
drwxr-xr-x  3 bob      bob      4096 2012-05-09 14:11 bob

最佳解决方法

所有这些痛苦都归功于几个安全问题,如described here。基本上,chroot目录必须由root拥有,不能是任何group-write访问。可爱。所以你基本上需要把你的chroot变成一个控制单元,并且你可以拥有你的可编辑内容。

sudo chown root /home/bob
sudo chmod go-w /home/bob
sudo mkdir /home/bob/writable
sudo chown bob:sftponly /home/bob/writable
sudo chmod ug+rwX /home/bob/writable

而且,您可以登录并在/writable中写入。

次佳解决方法

要chroot一个SFTP目录,你必须

  1. 创建一个用户并强制root成为它的所有者

    cd /home
    mkdir john
    useradd -d /home/john -M -N -g users john
    sudo chown root:root /home/john
    sudo chmod 755 /home/john
    
  2. 更改/etc /ssh /sshd_config上的子系统位置:

    #Subsystem sftp /usr/lib/openssh/sftp-server
    Subsystem sftp internal-sftp
    

    并在文件末尾创建一个用户部分(如果放置在Subsystem行之后,ssh可能会重新生成):

    Match User john
        ChrootDirectory /home/john
        ForceCommand internal-sftp
        AllowTCPForwarding no
        X11Forwarding no
    

第三种解决方法

我花了整整一天的时间试图在我的树莓上获得一个网络共享。我想锁定用户,使其无法浏览整个文件系统,没有ssh登录访问权限,并且我想拥有对网络共享的写入权限。

这里是我如何工作:

首先我创建了一个用户:

sudo useradd netdrive

然后编辑/etc/passwd并确保它具有用户的/bin/false,因此该行是:

netdrive:x:1001:1004:Net Drive User,,,:/home/netdrive:/bin/false

我编辑/etc/ssh/sshd_config包括:

Match User netdrive
  ChrootDirectory /home/netdrive
  ForceCommand internal-sftp
  AllowTcpForwarding no
  X11Forwarding no

更改了主目录所有者和权限:

sudo chown root:root /home/netdrive/
sudo chmod 755 /home/netdrive/

好吧,所有这一切后,我能够使用sshfs连接,但在只读模式。我必须做些什么才能获得可写文件夹:

sudo mkdir -p /home/netdrive/home/netdrive/
sudo chown netdrive:netdrive /home/netdrive/home/netdrive/
sudo chmod 755 /home/netdrive/home/netdrive/

就是这样,它没有任何进一步的变化。请注意,我只拥有对用户的可写权限,而不是像许多其他在线解决方案那样对组进行写权限。我能够创建/删除/编辑/重命名文件/文件夹没有问题。

当由于chroot配置使用netdrive用户访问sshfs时,我只能看到存储在服务器/home/netdrive/目录中的东西,非常完美。重复的/home/netdrive/home/netdrive/目录结构就是让我在使用干净的chroot ssh可写解决方案时工作的。

现在我将在下面解释我遇到的问题:

您可能不应执行以下段落:

看了上面的解决方案(甚至使用acl(访问控制列表)的网络上的许多其他人),我仍然无法得到它的工作,因为我接下来做的是:

以下不适合我:

sudo mkdir /home/netdrive/writable/
sudo chown netdrive:netdrive /home/netdrive/writable/
sudo chmod 755 /home/netdrive/writable/

由于netdrive用户仍然无法在该/home/netdrive/writable/目录中写入,尽管拥有该文件夹并且具有权限。然后我做了:sudo chmod 775 /home /netdrive /writable /现在我可以创建一个目录并将其删除,但我无法对其进行编辑,因为它是在没有组可写权限的情况下创建的。在网上看到的人们使用acl来修复它。但我不满意,因为它必须安装acl,然后配置挂载点等。我也不知道为什么我需要组权限才能写入同一用户拥有的文件夹。

看起来出于某种原因创建/home/netdrive/home/netdrive并给予最后一个netdrive文件夹的所有权,我能够使所有工作都不会破坏组权限。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/582.html,未经允许,请勿转载。