我在Ubuntu18.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发布于 2020-02-06 21:48:12
除了应该更正的用户命名问题 (但可能对用例没有影响)之外,您的配置还必须满足两个不兼容的约束:
因此,您需要在/home/user中创建一个目录,该目录将由用户拥有。最好的选择是/home/user/home/user,在登录之后,sftp将转到它。
总之,如果有这样的用户:
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用户主页上的setgid可能对您的脚本很有用(我假设脚本以www-data的形式运行)。还可以考虑为<>sftp设置umask:
ForceCommand internal-sftp -u 0002PS:我不明白,为什么许多人坚持<#>管理上禁止用户访问对方的主目录。主目录(例如700)和umask (077)上的声音默认权限应该足够了。那些知道自己在做什么的人可以改变他们的权限。
https://serverfault.com/questions/1002051
复制相似问题