vsftpd 配置
2023年5月22日...大约 4 分钟
权限相关的参数介绍
用户登录权限
- ftpusers 文件:ftpusers 文件主要是用来控制不能登录的用户列表。如果一个用户名在 ftpusers 文件中,则它将无法登录到 FTP 服务器。默认情况下,root 用户和 daemon 用户是在 ftpusers 文件中列出的,这意味着它们不能登录到 FTP 服务器。不受任何配置影响,总是有效,优先级高于user_list
- user_list 文件:user_list 文件主要是用来控制用户访问权限的列表。如果一个用户名在 user_list 文件中,则它将被允许登录到 FTP 服务器。如果
userlist_deny
配置项设置为 YES,则在 user_list 文件中列出的用户将被禁止登录到 FTP 服务器
userlist_deny(YES) | userlist_deny(NO) | |
---|---|---|
userlist_enable(YES) | YY | YN |
userlist_enable(NO) | NY | NN |
- YY:黑名单,文件中的用户的才不能登录
- YN:白名单,文件中的用户的才可以登录,或 NOLOGIN(禁止登录并显示自定义信息
- NY:配置无效,允许登录
- NN:配置无效,允许登录
用户访问文件权限
首先是 chroot_*
,这几个参数主要是为了设置 ftp 登录之后可以访问的目录。还记得我们的需求里面有一个就是限制用户只能够访问自己的主目录吧,这几个参数就能满足我们的要求,具体配置的方法如下:
- chroot_local_user:是否将所有用户限制在主目录,YES 为启用 NO 禁用(该项默认值是 NO,即在安装 vsftpd 后不做配置的话,ftp 用户是可以向上切换到要目录之外的)。
- chroot_list_enable:是否启动限制用户的名单 YES 为启用 NO 禁用(包括注释掉也为禁用)。
- chroot_list_file=/etc/vsftpd/chroot_list:是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于 chroot_local_user 的值。
chroot_local_user=YES | chroot_local_user=NO | |
---|---|---|
chroot_list_enable=YES | YY | YN |
chroot_list_enable=NO | NY | NN |
- YY:所有用户都被限制在其主目录下,使用chroot_list_file指定的用户列表,这些用户作为“例外”,不受限制。
- YN:所有用户都不被限制其主目录下,使用chroot_list_file指定的用户列表,这些用户作为“例外”,受到限制。
- NY:所有用户都被限制在其主目录下,不使用chroot_list_file指定的用户列表,没有任何“例外”用户。
- NN:所有用户都不被限制其主目录下,不使用chroot_list_file指定的用户列表,没有任何“例外”用户。
本地用户
1、安装
yum install vsftpd -y
2、配置
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
use_localtime=YES
dirmessage_enable=YES
dual_log_enable=YES
log_die=YES
connect_from_port_20=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
hide_ids=YES
chroot_local_user=YES
allow_writeable_chroot=YES
pam_service_name=vsftpd
local_root=/ftp_data/
3、添加用户
nologin 用户
useradd -G ftp -s /sbin/nologin ftpadmin
echo '/sbin/nologin' >> /etc/shells # 一定要加,不然登录不了ftp
login 用户
useradd -G ftp -s /bin/bash ftpadmin
设置密码(通用)
passwd ftpadmin # 或
echo "12345" | passwd ftpadmin --stdin
4、配置允许登录ftp的用户
将用户添加到 user_list 文件即可。
vim /etc/vsftpd/user_list
5、数据目录并授权
mkdir /ftp_data
chgrp -R ftp /ftp_data
6、启动、停止服务
systemd方式
systemctl restart vsftpd
systemctl start vsftpd
systemctl status vsfptd
systemctl enable vsftpd
手动方式
vsftpd /etc/vsftpd/vsftpd.conf
虚拟用户:使用root执行
1、安装软件
yum install vsftpd -y
2、修改vsftpd配置
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
use_localtime=YES
dirmessage_enable=YES
#启用dual,xferlog和syslog则不用开启
dual_log_enable=YES
#xferlog_enable=YES
#xferlog_std_format=YES
#syslog_enable=YES
log_die=YES
connect_from_port_20=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
hide_ids=YES
chroot_local_user=YES
allow_writeable_chroot=YES
# Virtaul User Settings
user_config_dir=/etc/vsftpd/vsftpd_user_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=nobody
guest_username=vsftpd
#创建虚拟用户的目录,要求提前创建和用户同名的目录
user_sub_token=$USER
local_root=/ftp_data/$USER
3、添加虚拟用户的依赖系统账户
groupadd nogroup
useradd --home-dir /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd
注意
创建的用户必须匹配 vsftpd.conf 文件中的 guest_username=vsftpd 行
4、创建虚拟用户文件 vim vusers.txt
user_name_a
user_password_a
user_name_b
user_password_b
5、 生成包含虚拟用户信息的数据库文件
用这种方式生成的db 文件存储的是明文账号密码
db_load -T -t hash -f vusers.txt vsftpd-virtual-user.db
chmod 600 vsftpd-virtual-user.db
# 配置文件生成后,可以删除明文文件
rm -rf vusers.txt
# 查看数据库的内容
db_dump -p vsftpd-virtual-user.db
6、pam认证配置
备份配置:
如果是别的用户请自行修改
mkdir /root/backup_vsftpd_pam
cp /etc/pam.d/vsftpd /root/backup_vsftpd_pam/
修改 /etc/pam.d/vsftpd,删除原有配置,新增如下配置
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vsftpd-virtual-user
account required pam_userdb.so db=/etc/vsftpd/vsftpd-virtual-user
session required pam_loginuid.so
#如果要保留本地用户登录功能,则原来的配置不需要清除
7、创建虚拟用户独立的配置文件,用于指定更细一步的权限管理,非必须,如果不指定,则登录后默认的目录为配置中 guest_username用户的家目录
# 创建用户配置文件
mkdir /etc/vsftpd/vsftpd_user_conf
# 创建用户的 local_root 目录
mkdir /ftp_data/vuser
vi /etc/vsftpd/vsftpd_user_conf/user_name_a
local_root=/ftp_data/vuser/
贡献者
change