![vsftpd 适用于本地用户和匿名登录](https://linux22.com/image/702704/vsftpd%20%E9%80%82%E7%94%A8%E4%BA%8E%E6%9C%AC%E5%9C%B0%E7%94%A8%E6%88%B7%E5%92%8C%E5%8C%BF%E5%90%8D%E7%99%BB%E5%BD%95.png)
我正在尝试设置我的 ftp 服务器(vsftpd)以允许本地用户和匿名用户访问。
我希望本地用户对其主目录具有写权限,但匿名登录只能对目录具有读权限,我可以将文件放入该目录以供更广泛的世界下载。
首先,这可能吗?还是所有登录都必须具有读取权限或写入权限,而不是两者的组合?
如果可能的话,我无法让它工作。当我尝试匿名登录时,我当前的设置会给我“权限被拒绝”错误。本地用户的访问工作正常,正如我所希望的那样。
有人能发现我哪里做错了,或者在以下设置中遗漏了什么吗?
以下是为 ftp 文件夹设置的目录。路径为 /var/ftp/(请注意,此处的本地用户没有 shell 或特定的主目录,因此将其移动到通用 ftp 文件夹):
dr-xr-xr-x 2 ftp ftp-users 4.0K Apr 17 13:19 anon
drwxr-xr-x 2 localuser ftp-users 4.0K Apr 17 15:08 localuser
匿名用户没有对其主目录的写权限,但本地用户有。有一个 ftp-users 组,所有 ftp 用户都是该组的成员。
下面是上述两个用户的 /etc/passwd 文件的摘录:
ftp:x:109:115:ftp daemon,,,:/var/ftp/anon:/bin/false
localuser:x:1002:1002::/var/ftp/localuser:/bin/false
以下是我正在使用的 vsftpd.config 文件(为简洁起见删除了所有注释):
listen=NO
listen_ipv6=YES
anonymous_enable=YES
ftp_username=ftp
no_anon_password=YES
anon_root=/var/ftp/anon
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
anon_max_rate=52000
local_enable=YES
userlist_deny=NO
userlist_enable=YES
userlist_file=/etc/vsftpd.allowed_users
write_enable=YES
allow_writeable_chroot=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=ftp
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
所有可以登录的用户都列在 userlist_file 中(包括 ftp)。
答案1
我玩了一下之后终于回答了自己的问题。我将详细说明答案以供参考。
是的,可以有特权的“指定”用户和无特权的匿名用户。上面的配置文件摘录允许此设置。
在配置文件中有 userlist_enable=YES 和 userlist_file=... 来控制可以使用 FTP 的用户名称。这可以防止默认创建的用户(例如 Raspbian 上的 pi)使用默认密码登录,假设该密码尚未更改。(当然,默认密码应该更改。)
要使用上述指令并允许匿名登录,需要在文件中将用户“匿名”与批准的指定用户一起命名。