zhangguanzhang's Blog

vsftpd虚拟用户简单部署

字数统计: 581阅读时长: 2 min
2017/03/20 Share

关闭防火墙和selinux

1
2
3
systemctl disable --now firewalld NetworkManager
setenforce 0
sed -ri '/^[^#]*SELINUX=/s#=.+$#=disabled#' /etc/selinux/config

安装vsftpd和db4

1
2
3
4
5
yum install -y epel-release && \
yum install -y \
vsftpd \
db4-utils \
db4

创建vsftpd使用的系统用户,主目录为/home/vsftpd,禁止ssh登录。创建之后所有虚拟用户使用这个系统用户访问文件

1
useradd vsftpd -d /home/vsftpd -s /bin/false

创建虚拟用户名和密码文件并增加一个用户和密码

1
2
3
4
cat>>/etc/vsftpd/loginusers.conf<<EOF
test
test1
EOF

根据这个文件创建数据库文件

1
2
db_load -T -t hash -f /etc/vsftpd/loginusers.conf /etc/vsftpd/loginusers.db
chmod 600 /etc/vsftpd/loginusers.db

设置pam文件,启用这个数据库文件

1
2
3
4
5
cp /etc/pam.d/vsftpd{,.bak}
cat>/etc/pam.d/vsftpd<<EOF
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/loginusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/loginusers
EOF

创建虚拟用户配置文件m目录,如果ftp的用户单独设置权限则在这个目录里写同名的文件

1
mkdir /etc/vsftpd/userconf

这里的文件名称必须与虚拟用户名一致

1
2
3
4
cat>/etc/vsftpd/userconf/test<<EOF
local_root=/home/vsftpd/test/
write_enable=YES
EOF

创建用户家目录

1
2
mkdir /home/vsftpd/test
chown vsftpd:vsftpd /home/vsftpd/test

最后备份+修改主配置文件

1
2
cp /etc/vsftpd/vsftpd.conf{,.bak}
vi /etc/vsftpd/vsftpd.conf

禁止匿名

1
anonymous_enable=NO

去掉注释

1
2
3
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_local_user=YES

增加

1
2
3
4
5
6
7
guest_enable=YES
guest_username=vsftpd
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/userconf
allow_writeable_chroot=YES
anon_world_readable_only=NO
reverse_lookup_enable=NO

配置介绍
anonymous_enable=NO 禁止匿名用户登录
chroot_local_user=YES 禁止用户访问除主目录以外的目录
ascii_upload_enable=YES ascii_download_enable=YES 设定支持ASCII模式的上传和下载功能
guest_enable=YES 启动虚拟用户
guest_username=vsftpd 虚拟用户使用的系统用户名
virtual_use_local_privs=YES 不然/home/vsftpd/$USER目录得设置成777才不会报错550 Permission denied
user_config_dir=/etc/vsftpd/userconf 虚拟用户使用的配置文件目录
allow_writeable_chroot=YES 最新版的vsftpd为了安全必须用户主目录(也就是/home/vsftpd/ftp1)没有写权限,才能登录,或者使用allow_writeable_chroot=YES
anon_world_readable_only=NO 解决报错Transfer done (but failed to open directory)
reverse_lookup_enable=NO 关闭DNS反向解析,解决登陆慢

启动服务并设置为开机自启

1
systemctl enable --now vsftpd

使用test登陆测试

最后配置文件如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@ftp-test vsftpd]# grep -Pv '^$|^#' /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_local_user=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=vsftpd
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/userconf
allow_writeable_chroot=YES
anon_world_readable_only=NO
reverse_lookup_enable=NO

CATALOG