FTP用户不能修改文件,但具有正确的权限

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

在目录中,他可以login到ls -l给我:

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

用户属于www-pub组。 下面是cat /etc/group的输出结果,以certificate他确实在这个组中:

 ... 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 

所以他可以通过ftplogin,因为他需要编辑的文件有正确的权限让www-pub组读取和写入文件,而且他是该组的成员,为什么他不能编辑它(或上传任何东西)?

只有当我将文件更改为777可以对其进行编辑。 就好像他不在小组里,但他是! 这是怎么回事?

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

细节

好的,问题源于我使用vsftpd版本2.3.5(我的服务器可用的最新软件包)。 这个版本的vsftpd要求ftp用户主目录没有写权限。 是的,你没看错。 所以在我的情况下,我希望用户能够ftp到一个web根目录并开始编辑。 不能这样做。 我不得不在Web根目录上创build另一个目录,使用户的主目录,使其不可写入,然后用户可以在ftp中,导航到Web根目录并按预期编辑/上传。

这个解决scheme吸引我的情况,因为我有一些用户在几个虚拟目录中以不同的深度操作,但至less可以工作(我正在使用重写来防止人们感到困惑)。 现在我需要始终确保我想要分配特定用户的任何东西都有一个“包装器”目录。

我在网上find的主要build议是:

 add `allow_writeable_chroot=YES` to your conf file 

(这不但没有起作用,而且还导致守护进程在重启时遇到麻烦,如果你有vsftpd的更高版本(3.0以上版本)

降级到以前版本的vsftpd

(我删除了当前的版本,并开始试图让旧版本与我的服务器一起工作,但遇到了很多丢失和失败的依赖项,我放弃了。其他的在线版本有一些运气可以返回到版本2.3.2或3。 x如果你可以自己编译)

我在网上find的vsftpd背后的人提出了一些其他build议的解决scheme:

在configuration文件中定义选项local_root =。 必须由/ home或其他path与用户文件夹的目录。 以这种方式将vsftpd chrooting到/ home目录。

(对我来说这是行不通的,因为我不能有一个本地根目录)

在configuration文件中定义选项passwd_chroot_enable = yes并将/ etc / passwd文件用户主目录从“/ home / user”更改为“/home/./user”(不包括引号)。 以这种方式将vsftpd chrooting到/ home目录。

(这根本不适用于我的服务器。)

下载vsftpd-ext源文件,编译并覆盖存在的vsftpd二进制文件,或者从存储库中取出并添加到configuration文件中

选项allow_writeable_root =是。

(我不能在这个服务器上编译。)