SFTP 用户无法删除文件

SFTP 用户无法删除文件

我在 Ubuntu 18.04 上设置了一个简单的 SFTP 服务器。我有 10 个用户,他们只能访问其主目录中的文件,并且不能离开其主目录。

我们有一个将文件写入其主目录的 API。

到目前为止,一切都很好。

用户可以登录、检索文件,并被限制在自己的目录中。但是,他们无法删除文件。任何“rm”命令都会返回权限错误 - 无法删除文件:权限被拒绝。

该文件夹的用户/组是 root:www-data。如果我将其更改为 user:www-data,SFTP 就会中断 - 他们无法登录。我创建了一个组“sftp”,但如果我将用户添加到 sftp 组,将主目录更改为 user:sftp,他们就无法登录。

主文件夹如下所示:

drwxr-xr-x 2 root   www-data 172032 Feb  6 14:19 29
drwxr-xr-x 2 root   www-data 135168 Feb  6 14:17 52
drwxr-xr-x 4 root   www-data  69632 Feb  6 14:15 44
drwxr-xr-x 2 root   www-data  36864 Feb  6 14:14 68

我的 /etc/ssh/sshdconfig 中的 sftp 配置是:

Match group sftp
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

我的用户设置如下:

29:x:1002:1001::/home/26:/bin/sh
44:x:1003:1003::/home/44:/bin/sh
52:x:1004:1004::/home/52:/bin/sh
68:x:1005:1005::/home/29:/bin/sh

我的 sftp 组是:

sftp:x:1001:26,44

答案1

除了用户命名问题,这应该被纠正,但可能对您的用例没有影响,您的配置必须满足两个不兼容的限制:

  • 根据sshd_config 手册页

    Chroot目录 指定在认证后 chroot(2) 到的目录的路径名。路径名的所有组成部分都必须是根目录不可写任何其他用户或组。chroot 之后,sshd(8) 将工作目录更改为用户的主目录。

  • 另一方面你需要用户可写目录,如果您希望用户删除其主目录中的文件。

因此,您需要在 内创建一个目录/home/user,该目录将由用户拥有。首选/home/user/home/user安全FTP登录后即可。

总而言之,如果您有这样的用户:

u29:x:1002:1001::/home/u26:/bin/sh
u44:x:1003:1003::/home/u44:/bin/sh
u52:x:1004:1004::/home/u52:/bin/sh
u68:x:1005:1005::/home/u29:/bin/sh

您只需要创建一些目录:

for user in u29 u44 u52 u68; do
    home=/home/$user
    # Create the chroots owned by root
    mkdir -p $home
    # Create the homes inside the chroots
    mkdir -p $home$home
    # Fix ownership
    chgrp www-data -R $home
    chown root -R $home
    chown $user -R $home$home
    # Fix directory permissions
    find $home -type d -exec chmod 755 {} +
    find $home$home -type d -exec chmod 2770 {} +
done

设置组ID在用户主页上设置可能对你的脚本有用(www-data我认为它们会按预期运行)。你也可以考虑umask设置安全FTP

ForceCommand internal-sftp -u 0002

附言:我不明白为什么很多人坚持行政上禁止用户访问彼此的主目录。主目录上的合理默认权限(例如700)和 umask(077)应该足够了。那些知道自己在做什么的人可以更改他们的权限。

相关内容