vsftpd 为匿名用户共享的默认文件夹是 /var/ftp。这很好用。现在我想共享一个不同的文件夹。我将此行添加到 /etc/vsftpd/vsftpd.conf 中:
anon_root=/data/downloads/
但这不起作用。以前可以连接的客户端现在根本无法连接。我缺少什么?
日志不显示任何内容,只显示某些客户端已连接。我在 Fedora 服务器上运行;因此,是的,SELinux。实际上,/data 是另一个分区的挂载点。
好吧,SELinux 是罪魁祸首。在宽容模式下没有问题。
$ sudo ausearch -ts recent -m avc
----
time->Wed Dec 21 17:22:59 2022
type=AVC msg=audit(1671664979.645:273): avc: denied { search } for pid=1163 comm="vsftpd" name="/" dev="dm-1" ino=128 scontext=system_u:system_r:ftpd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:unlabeled_t:s0 tclass=dir permissive=1
----
time->Wed Dec 21 17:23:01 2022
type=AVC msg=audit(1671664981.026:274): avc: denied { search } for pid=1162 comm="vsftpd" name="downloads" dev="dm-1" ino=131 scontext=system_u:system_r:ftpd_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:unlabeled_t:s0 tclass=dir permissive=1
----
time->Wed Dec 21 17:23:01 2022
type=AVC msg=audit(1671664981.179:275): avc: denied { read } for pid=1162 comm="vsftpd" name="downloads" dev="dm-1" ino=131 scontext=system_u:system_r:ftpd_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:unlabeled_t:s0 tclass=dir permissive=1
----
time->Wed Dec 21 17:23:01 2022
type=AVC msg=audit(1671664981.179:276): avc: denied { open } for pid=1162 comm="vsftpd" path="/" dev="dm-1" ino=131 scontext=system_u:system_r:ftpd_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:unlabeled_t:s0 tclass=dir permissive=1
----
time->Wed Dec 21 17:23:01 2022
type=AVC msg=audit(1671664981.179:277): avc: denied { getattr } for pid=1162 comm="vsftpd" path="/" dev="dm-1" ino=131 scontext=system_u:system_r:ftpd_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:unlabeled_t:s0 tclass=dir permissive=1
----
time->Wed Dec 21 17:23:01 2022
type=AVC msg=audit(1671664981.448:278): avc: denied { getattr } for pid=1167 comm="vsftpd" path=2F54726F6C6C20283230323229205B31303830705D205B5745425269705D205B352E315D205B5954532E4D585D2F7777772E5954532E4D582E6A7067 dev="dm-1" ino=134 scontext=system_u:system_r:ftpd_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:unlabeled_t:s0 tclass=file permissive=1
答案1
SELinux 正在阻止对您的文件系统的访问。当您共享默认情况下不共享的路径时,这是正确的行为。
为您的目录提供正确的 SELinux 上下文:
# sudo semanage fcontext -a -t public_content_rw_t /data/downloads/
# sudo restorecon -Rv /data/downloads/
要允许 VSFTPD 访问系统上的所有文件(当然受 VSFTPD 配置和正确的 FS 访问权限的限制),请通过运行以下命令设置适当的 SELinux 布尔值:
# sudo setsebool -P ftpd_full_access 1