我正在使用ProFTPd 1.3.5a(顺便说一下,我得到了一个旧的1.3.4d相同的行为)与一个相当普通的虚拟用户设置为Web服务器。
简而言之,ProFTPd使用apache的UID / GID运行,并具有用于身份validation的本地文件。 所有的用户都有相同的真正的UID / GID(再次,阿帕奇的),并在他们的目录,与DirFake *条目chrooted。
这是从configuration摘录:
AuthPAM off AuthOrder mod_auth_file.c AuthUserFile /etc/proftpd/ftpd.passwd AuthGroupFile /etc/proftpd/ftpd.group UseFtpUsers off DefaultRoot ~ DefaultChdir / DirFakeUser on ~ DirFakeGroup on ~ DirFakeMode 0644 ShowSymLinks off Umask 026 027 <Directory ~/> UserOwner www-data GroupOwner www-data </Directory>
但是对于每一个ftp客户端我都会尝试,当列出文件时,我只能得到数字UID / GID而不是虚拟用户名。 这也令人讨厌,因为像CyberDuck这样的客户端会认为数字ID与他们所连接的用户不一样,并且会显示所有文件/目录不可访问(即使试图访问它们实际上是可用的)。
编辑 :在服务器上有一个“真正的”用户www-data
与UID 33和组www-data与GID 33,ProFTPd运行与该UID / GID,虚拟用户在/etc/proftpd/ftpd.[passwd|group]
都有uid = gid = 33,用户目录下的所有文件都有uid = gid = 33。 现在,ftp客户端将所有文件列为uid 33和gid 33,并且无法将数字ID转换为用户/组名。 我不想在ftp客户端显示属于www-data
文件,但属于他们用来validation的用户名。 这也是mod_ls
对DirFake*
选项所做的,正如我所理解的那样:将假的用户/组扔到连接的客户端。 这是不是这样做,或者至less它是这样做的数字ID。
我如何让ProFTPd在客户端显示列表中的虚拟用户名?
一些FTP客户端现在使用较新的MLSD
/ MLST
命令而不是LIST
和NLST
来列出文件。 这些较新的命令没有名称的事实,只有ID。 因此,您可以尝试在您的proftpd.conf
添加FactsAdvertise off
,告知ProFTPD不通告它可以处理这些较新的FTP命令。 这反过来又会导致FTP客户端回退到提供名称的旧FTP命令。
更新 :我已经要求向IANA注册两个新的操作系统特定事实UNIX.ownername
和UNIX.groupname
,以便在MLSD
列表中使用,以便能够使用该命令在列表中提供用户/组名。 我将很快将这些支持添加到ProFTPD。
希望这可以帮助!