FTP 用户无法修改文件但具有正确的权限

FTP 用户无法修改文件但具有正确的权限

我创建了一个新用户(foo),当他通过 ftp 登录时,他无法编辑他有权访问的目录中的文件。

在他可以登录的目录中ls -l给我:

-rw-rw-r-- 1 root www-pub  6427 Nov 17 04:21 index.html

该用户属于组www-pub。以下是 的输出,cat /etc/group表明他确实属于该组:

...
www-pub:x:1001:ftpuser,www-data,foo
foo:x:1002:

*编辑包含目录的权限为:

drwxrwsr-x  5 root www-pub  4096 Nov 17 02:53 thecontainingdir

以及上面的那个:

drwxrwsr-x 49 root www-pub  4096 Nov 16 02:40 thenextdirup

因此,既然他可以通过 ftp 登录,并且他需要编辑的文件具有正确的权限以让该组www-pub读取和写入文件,并且他是该组的成员,那么为什么他不能编辑它(或上传任何内容)?

只有当我将文件更改为时,777他才能编辑它。就好像他不在该组中……但他确实在该组中!发生了什么事?

答案1

简而言之,vsftpd 的 v3.2.5 无法在 chroot() 内部使用可写根,因此您需要使用户的根文件夹不可写,升级到新版本(并设置一些配置设置)或降级到旧版本。

细节

好的,问题源于我使用 vsftpd 版本 2.3.5(我的服务器可用的最新软件包)。此版本的 vsftpd 要求 ftp 用户主目录不具有写入权限。是的,您没有看错。因此,就我而言,我希望用户能够通过 ftp 进入 Web 根目录并开始编辑。做不到。我不得不在 Web 根目录之上创建另一个目录,将其设为用户的主目录,使其不可写入,然后用户才可以通过 ftp 进入,向下导航到 Web 根目录并按预期进行编辑/上传。

在我的情况下,这个解决方案很糟糕,因为我有许多用户在几个虚拟目录中以不同的深度进行操作,但至少它是有效的(我正在使用重写来防止人们感到困惑)。现在我需要始终确保我想要分配给特定用户的任何内容都有一个“包装器”目录。

我在网上找到的主要建议:

add `allow_writeable_chroot=YES` to your conf file

(这不仅不起作用,还导致守护进程无法重新启动。我怀疑如果您拥有更高版本(3.0+)的 vsftpd,这会起作用)

降级到 vsftpd 的先前版本

(我删除了当前版本并开始尝试让旧版本与我的服务器一起工作,但遇到了太多缺失和失败的依赖项,所以我放弃了。网上的其他人很幸运地回到了 2.3.2 版或 3.x 版,如果你可以编译自己的版本)

我在网上找到了 vsftpd 背后的一位人士提出的其他一些建议的解决方案:

在配置文件中定义选项 local_root=。必须通过 /home 或其他路径指向包含用户文件夹的目录。这样 vsftpd 就会 chroot 到 /home 目录。

(对我来说这行不通因为我无法拥有单个本地根)

在配置文件中定义选项 passwd_chroot_enable=yes,并将 /etc/passwd 文件中的用户主目录从“/home/user”更改为“/home/./user”(不带引号)。这样 vsftpd 就会 chroot 到 /home 目录。

(这在我的服务器上根本不起作用。)

下载 vsftpd-ext 的源代码,编译并覆盖现有的 vsftpd 二进制文件或从存储库中获取并添加到配置文件

选项 allow_writeable_root=yes。

(我无法在此服务器上进行编译。)

相关内容