我在 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
)应该足够了。那些知道自己在做什么的人可以更改他们的权限。