vsftpd 配置项说明
目录
- 一:vsftpd 配置文件说明
- 二:vsftpd 服务和连接设置
- 三:vsftpd 用户根目录管理
- 四:vsftpd 匿名用户模式管理
- 五:vsftpd 本地用户模式管理
- 六: vsftpd 虚拟用户模式管理
一:vsftpd 配置文件说明
vsftpd 官方配置参考手册:https://security.appspot.com/vsftpd/vsftpd_conf.html
配置文件的路径:
vsftpd 进程启动后,默认查找的配置文件是/etc/vsftpd.conf,如果配置文件是自定义的路径,则需要在启动vsftpd进程的的时指定配置文件路径,所以可以通过查看vsftpd进程的启动参数来查找配置文件路径。
例如:如果 vsftpd 是通过 systemd 管理的服务,你还可以查看 vsftpd 服务的启动参数来找出配置文件的位置。
配置文件的格式:
- 在 配置文件中,如果以
#
号开头表示注释。 - 配置文件中的指令和值之间的
=
号两边不能存在任何空格。
指定子配置文件:
- 通过 user_config_dir 选项可以指定vsftpd的子配置文件路径,一般配置虚拟用户模式的时候会用到。
二:vsftpd 服务和连接设置
服务端模式设置:
listen=yes/no
:控制vsftpd
是否作为独立服务运行,需要启用这个配置项。
服务端时间设置:
use_localtime=yes/no
:FTP服务端的时间格式是否和服务器一致,如果不启用,默认使用的是格林威治时间。
服务端口设置:
listen_port=num
:指定vsftpd
监听的端口号。默认是 21,。pasv_min_port
和pasv_max_port
:设置被动模式下允许的数据通道端口范围。默认范围是1024-65535
。ftp_data_port=num
:主动模式下ftp服务端的数据通道端口。默认是 20,需要禁用connect_from_port_20
才会生效。
工作模式设置:
pasv_enable=yes/no
:是否将FTP服务端切换为被动模式,默认就是被动模式下运行。active_enable=yes/no
:是否将FTP服务端切换为主动模式,默认就是被动模式下运行。
服务端日志设置:
xferlog_file=/path
:指定日志文件路径,不指定默认是/var/log/vsftpd.log
xferlog_enable=yes/no
:启用后会记录上传和下载的日志信息,如果要看详细日志信息,就需要开启。xferlog_std_format=yes/no
:禁用后会显示日志的更多详细信息,一般禁用,方便排查问题。log_ftp_protocol=yes/no
:启用后会记录每个FTP会话的详细对话。一般启用,可以查看更多日志信息。
三:vsftpd 用户根目录管理
用户目录配置:
local_root=/path
:指定非匿名用户的根目录。anon_root=/path
:指定匿名用户的根目录
禁锢用户访问(Chroot):
chroot_local_user=YES/NO
:启用或禁用非匿名用户被禁锢在其登录目录。allow_writeable_chroot=YES/NO
:允许在禁锢模式下对根目录进行写操作(适用于非匿名用户)。
四:vsftpd 匿名用户模式管理
匿名用户指的就是FTP客户端通过ftp
或anonymous
这两个用户名登录FTP服务器。所以要使用匿名用户模式,需要确保服务器上存在 ftp
和 nobody
这两个系统用户。
匿名用户模式配置:
anonymous_enable=yes/no
:是否启用匿名模式,如果启用,则允许匿名用户通过ftp
或anonymous
登录。no_anon_password=yes/no
:是否允许匿名用户无需密码即可登录。启用后匿名用户不输入密码直接登录。
匿名用户权限控制:
-
anon_upload_enable=yes/no
:是否允许匿名用户执行上传文件的FTP命令,如果允许则允许匿名用户上传文件到FTP服务端。 -
anon_other_write_enable=yes/no
:是否允许匿名用户执行除了上传和创建目录之外的FTP命令,这类FTP命令会改变服务端的文件系统。 -
anon_mkdir_write_enable=yes/no
:允许或禁止匿名用户创建目录。若允许则匿名用户将能够创建目录。 -
anon_world_readable_only=yes/no
:是否只允许匿名用户下载具有全局读取权限的文件。若启用,则只有ftp或nobody具有读权限的文件才能下载。
说明:匿名用户如果要修改服务端的文件系统,需要启用write_enable配置,让用户有权限执行这些会改变文件系统权限的FTP命令。并且还需要保证ftp或nobody用户具有在操作系统层面上具备相应的文件权限。例如,必须对文件拥有写权限,才能执行删除、修改等操作。
五:vsftpd 本地用户模式管理
本地用户模式指的是FTP客户端使用操作系统中已存在的用户账户进行登录。此模式下,FTP用户与操作系统用户是绑定的。
本地用户模式配置:
local_enable=yes/no
:是否允许使用操作系统本地用户登录 FTP 服务端。若允许则允许操作系统中已存在的用户使用自己的账户进行登录。
本地用户权限控制:
write_enable=yes/no
:是否允许FTP客户端用户执行可以改变文件系统(例如上传、修改、删除)的FTP命令。
说明:
- 本地用户模式下,只需要允许本地用户执行可以改变文件启动的FTP命令(启用write_enable),然后确保该用户具有对应的文件系统权限去更改这个文件就行了。
- 本地用户必须有一个有效的登录 shell(如 /bin/bash),否则会拒绝该用户的 FTP 登录请求。
六: vsftpd 虚拟用户模式管理
虚拟用户指的是只在FTP服务中有效,在操作系统中不存在的用户。因为虚拟用户不具有操作系统层面的文件权限,因此需要将虚拟用户与系统用户进行绑定。
虚拟用户配置:
guest_enable=yes/no
:是否启用匿名模式,如果启用了匿名模式,,所有连接到FTP服务端的用户都会被视为虚拟用户进行验证。guest_username=username
:指定将虚拟用户映射为某个实际存在的操作系统用户。如果不指定默认就是ftp这个系统用户。virtual_use_local_privs=yes/no
:是否让虚拟用户拥有guest_username指定的系统用户的文件系统权限,如果不指定的话,默认是匿名用户的权限。、
说明:启用虚拟用户模式,还需要启用local_enable
选项才能正常使用。因为当虚拟用户被映射到一个本地用户时,会使用本地用户来处理权限和文件访问。vsftpd 会通过 local_enable
的设置来决定是否允许该本地用户的操作
虚拟用户权限控制:
指定了 guest_username 和 virtual_use_local_privs
:虚拟用户会映射到指定的 本地系统用户,并使用该本地用户的权限。这时,权限控制将遵循 本地用户模式 的相关配置(如 local_enable、write_enable 等),即通过本地用户的权限控制来管理虚拟用户的操作权限。没有指定 guest_username 和 virtual_use_local_privs
:虚拟用户默认映射到一个ftp这个匿名用户,并使用匿名用户模式的相关配置。这时,权限控制则需要通过 匿名用户模式 的配置项(如 anon_upload_enable、anon_world_readable_only 等)来管理虚拟用户的权限。
说明:
- 启用虚拟用户模式后,FTP登录FTP服务端使用的所有用户都会被认为是虚拟用户。
虚拟用户模式配置流程:
1、需要先检查当前的vsftpd是否加载了PAM相关库文件,如果没加载则pam验证不会生效。
ldd vsftpd | grep pam
2、创建一个系统本地用户,这个用户不要求拥有有效的登录 shell(如 /bin/bash)
useradd -r -m -d /ftp_data -s /sbin/nologin vsftpd
3、创建一个文本文件。文本文件里面存放用户名和密码
# 奇数行是用户名,偶数行是密码
sudo mkdir /etc/vsftpd/
sudo vim /etc/vsftpd/vusers
tom
Abc123
bob
123456
alice
redhat
4、生成Berkeley DB 数据库文件
sudo db_load -T -t hash -f ~/vusers /etc/vsftpd/vusers.db
5、编写PAM验证规则
sudo vim /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
auth required pam_userdb.so db=/etc/vsftpd/vusers
: 这个配置主要负责验证用户提供的密码是否正确。会根据用户输入的用户名去指定的数据库(如/etc/vsftpd/vusers)中查找对应的记录,并核对密码是否匹配account required pam_userdb.so db=/etc/vsftpd/vusers
: 作用主要就是验证提供的账号是否存在于数据库中。会根据用户输入的用户名去指定的数据库(如/etc/vsftpd/vusers)中查找对应的记录
6、需改vsftpd的配置文件
# 虚拟用户配置
# 启用虚拟用户模式
guest_enable=YES
local_enable=YES
# 指定映射的用户
guest_username=vsftpd
# 让虚拟用户拥有和系统用户同样的权限
virtual_use_local_privs=YES
# 指定用于验证的PAM规则文件,不用加全路径,会默认到/etc/pam.d下找
pam_service_name=vsftpd
# 权限配置
# 允许用户指定更改文件系统的FTP命令
write_enable=YES
# 指定用户创建文件的默认权限
local_umask=022
# 指定用户的默认根目录
local_root=/ftp_data
# 将用户禁锢到根目录下,从而使它不能进入更上层目录
chroot_local_user=YES
# 禁锢模式下,如果该用户对根目录有写权限,需要开启该选项
allow_writeable_chroot=YES
虚拟用户配置时子配置文件方式:
步骤和上面的一致,就是修改vsftpd.conf配置文件的时候加上user_config_dir来指定子配置文件的位置。
虚拟用户的子配置文件需要以该用户的用户名命名,且不能带后后缀,然后在子配置文件里面加入相关的权限配置选项就行了。
例如:tom用户的配置
主配置文件:
$ sudo vim /etc/vsftpd.conf
# 虚拟用户配置
# 启用虚拟用户模式
guest_enable=YES
local_enable=YES
# 指定子配置文件路径
user_config_dir=/etc/vsftpd
子配置文件:
$ sudo vim /etc/vsftpd/tom
guest_username=vsftpd
virtual_use_local_privs=YES
pam_service_name=vsftpd
write_enable=YES
local_umask=022
local_root=/ftp_data
chroot_local_user=YES
allow_writeable_chroot=YES