搭建ftp服务器并配置虚拟用户登录

vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。
本次搭建ftp服务器,采用虚拟用户登录;所谓虚拟用户就是没有使用真实的系统用户,只是通过映射到真实的账户和设置权限的目的。虚拟用户不能登录操作系统。

系统环境

CentOS 6.9
SELinux disabled

软件安装

1
yum -y install db4 db4-utils vsftpd

创建虚拟用户的宿主用户

1
useradd -u 600 -d /data/ftproot -s /sbin/nologin slvftp

创建用户名密码文件

1
2
3
4
5
vim account.txt
slftp1
xxxxxx
slftp2
yyyyyy

生成虚拟用户认证文件

1
2
3
4
db_load -T -t hash -f ./account.txt /etc/vsftpd/account.db
#安全原因,修改认证文件权限
chmod 600 /etc/vsftpd/account.db
#执行完此操作,建议删除account.txt

配置认证文件

1
2
3
4
vim /etc/pam.d/vsftpd.sl
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/account
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/account
#我这里是64位的操作系统,写的是/lib64,如果是32位的操作系统,写成/lib即可

修改配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
vim /etc/vsftpd/vsftpd.conf
#虚拟用户权限与匿名用户权限相同,虚拟用户权限单独设定
virtual_use_local_privs=NO
#服务器独立运行
listen=YES
#设定不允许匿名访问
anonymous_enable=NO
#设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问
local_enable=YES
#使用户不能离开主目录
chroot_list_enable=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
#设定支持ASCII模式的上传和下载功能
ascii_upload_enable=YES
ascii_download_enable=YES
#PAM认证文件名。PAM将根据/etc/pam.d/vsftpd.sl进行认证
pam_service_name=vsftpd.sl
#设定启用虚拟用户功能
guest_enable=YES
#指定虚拟用户的宿主用户,CentOS中已经有内置的ftp用户了
guest_username=slvftp
#设定虚拟用户个人vsftp的CentOS FTP服务文件存放路径。存放虚拟用户个性的CentOS FTP服务文件(配置文件名=虚拟用户名)
user_config_dir=/etc/vsftpd/user_config/
#配置vsftpd日志(可选)
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/xferlog
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
#开启被动(PASV)模式
pasv_enable=yes
pasv_min_port=10240
pasv_max_port=10250

新建chroot_list空文件

1
touch /etc/vsftpd/chroot_list

创建虚拟用户的配置目录文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
mkdir /etc/vsftpd/user_config/
#虚拟用户配置文件名必须与用户名一致
vim /etc/vsftpd/user_config/slftp1
guest_username=slvftp #虚拟用户的宿主用户
local_root=/data/ftproot/slftp1 #虚拟用户根目录
local_enable=YES
write_enable=YES #写权限
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES #上传权限
anon_mkdir_write_enable=YES #创建文件夹权限
anon_other_write_enable=YES #其他权限
##############
vim /etc/vsftpd/user_config/slftp2
guest_username=slvftp
local_root=/data/ftproot/slftp2
local_enable=YES
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

创建ftp根目录

1
2
3
mkdir -pv /data/ftproot/slftp{1,2}
chmod 700 -R /data/ftproot
chown slvftp.slvftp -R /data/ftproot

重启vsftp服务

1
/etc/init.d/vsftpd restart

防火墙开放端口

1
2
3
4
5
6
7
8
9
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
#主要是下边这两条
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 10240:10250 -j ACCEPT
#所有允许规则应该在这条之前
iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited

测试

1
2
yum -y install lftp
lftp user:passwd@127.0.0.1

ftp
参考文档:https://dumplings.cc/bu-shu-vsftpyu-pei-zhi-xu-ni-yong-hu-deng-lu/

独学无友,孤陋寡闻;学习记录,欢迎拍砖!