首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SFTP用户无法删除文件

问SFTP用户无法删除文件
EN

Server Fault用户
提问于 2020-02-06 14:25:58
回答 1查看 7.2K关注 0票数 0

我在Ubuntu18.04上设置了一个简单的SFTP服务器。我有10个用户,应该只能访问他们的主目录中的文件,他们不应该能够走出他们的主目录。

我们有一个API,它正在将文件写入他们的主目录。

到现在为止还好。

用户可以登录,检索文件,并被限制到他们自己的目录。但是,他们不能删除这些文件。任何'rm‘命令返回一个权限错误-无法删除文件:权限被拒绝。

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

下面是主文件夹的样子:

代码语言:javascript
复制
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配置是:

代码语言:javascript
复制
Match group sftp
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

我的用户设置如下:

代码语言:javascript
复制
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组是:

代码语言:javascript
复制
sftp:x:1001:26,44
EN

回答 1

Server Fault用户

发布于 2020-02-06 21:48:12

除了应该更正的用户命名问题 (但可能对用例没有影响)之外,您的配置还必须满足两个不兼容的约束:

  • 正如sshd_配置手册:ChrootDirectory所指定的那样,将目录的路径名指定为chroot(2)到身份验证后。路径名的所有组件必须是根拥有的目录,这些目录是任何其他用户或组都可以写的not 。在chroot之后,sshd(8)将工作目录更改为用户的主目录。
  • 另一方面,如果希望用户删除主目录中的文件,则需要用户可写的目录。

因此,您需要在/home/user中创建一个目录,该目录将由用户拥有。最好的选择是/home/user/home/user,在登录之后,sftp将转到它。

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

代码语言:javascript
复制
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

您只需创建一些目录:

代码语言:javascript
复制
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:

代码语言:javascript
复制
ForceCommand internal-sftp -u 0002

PS:我不明白,为什么许多人坚持<#>管理上禁止用户访问对方的主目录。主目录(例如700)和umask (077)上的声音默认权限应该足够了。那些知道自己在做什么的人可以改变他们的权限。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1002051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档