目录
文章目录
一、部署的环境准备
1.1 机器准备
一台虚拟机:
hostname: myhost
ip地址: 192.168.2.122
1.2 系统环境关闭selinux
[root@myhost ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[root@myhost ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.122 netmask 255.255.255.0 broadcast 10.199.41.255
inet6 fe80::215:5dff:fe89:cd43 prefixlen 64 scopeid 0x20<link>
ether 00:15:5d:89:cd:43 txqueuelen 1000 (Ethernet)
RX packets 1365008 bytes 289565779 (276.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 213902 bytes 207232091 (197.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 0 (Local Loopback)
RX packets 7772 bytes 435190 (424.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7772 bytes 435190 (424.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@myhost ~]# getenforce
Enforcing
[root@myhost ~]# setenforce 0
[root@myhost ~]# getenforce
Permissive
[root@myhost ~]# sed -i "s#enforcing#disabled#g" /etc/sysconfig/selinux
[root@myhost ~]# ping www.baidu.com
PING www.a.shifen.com (14.215.177.38) 56(84) bytes of data.
64 bytes from 14.215.177.38: icmp_seq=1 ttl=54 time=31.6 ms
64 bytes from 14.215.177.38: icmp_seq=2 ttl=54 time=32.0 ms
64 bytes from 14.215.177.38: icmp_seq=3 ttl=54 time=31.6 ms
64 bytes from 14.215.177.38: icmp_seq=4 ttl=54 time=31.0 ms
二、安装vsftpd服务
2.1 检查是否已经安装vsftpd服务
[root@myhost ~]# rpm -qa | grep vsftpd
[root@myhost ~]# rpm -ql vsftpd
未安装软件包 vsftpd
2.2 安装vsftpd服务
[root@myhost ~]# yum install -y vsftpd
[root@myhost ~]# rpm -ql vsftpd #可列出vsftpd中包含的文件
[root@myhost ~]# cd /etc/vsftpd && ll
总用量 20
-rw-------. 1 root root 125 4月 1 12:55 ftpusers #黑名单文件,此文件里的用户不允许访问 FTP 服务器。
-rw-------. 1 root root 361 4月 1 12:55 user_list #白名单文件,是允许访问 FTP 服务器的用户列表。
-rw-------. 1 root root 5116 4月 1 12:55 vsftpd.conf #核心配置文件。
-rwxr--r--. 1 root root 338 4月 1 12:55 vsftpd_conf_migrate.sh #vsftpd操作的一些变量和设置。
- /etc/vsftpd.ftpusers ---- 禁止使用vsftpd的用户列表文件;
- /etc/vsftpd.user_list ---- 禁止或允许使用vsftpd的用户列表文件 ;
- /etc/vsftpd/vsftpd.conf ---- 主配置文件 ;
- /etc/vsftpd/vsftpd_conf_migrate.sh ---- vsftpd操作的一些变量和设置;
- /etc/pam.d/vsftpd ---- PAM认证文件 ;
- /usr/sbin/vsftpd ---- vsftpd的主程序 ;
- /etc/rc.d/init.d/vsftpd ---- 启动脚本 ;
- /var/ftp ---- 匿名用户主目录 ;
- /var/ftp/pub ---- 匿名用户的下载目录 ;
2.3 设置vsftpd服务开机自启动
[root@myhost vsftpd]# systemctl enable vsftpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
2.4 启动vsftpd服务并查看启动状态
[root@myhost vsftpd]# systemctl start vsftpd.service
[root@myhost vsftpd]# systemctl status vsftpd.service
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)
Active: active (running) since 二 2020-09-08 13:54:31 CST; 8s ago
Process: 109943 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 109944 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─109944 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
9月 08 13:54:31 myhost systemd[1]: Starting Vsftpd ftp daemon...
9月 08 13:54:31 myhost systemd[1]: Started Vsftpd ftp daemon.
[root@myhost vsftpd]# netstat -lnutp | grep vsftpd
tcp6 0 0 :::21 :::* LISTEN 109944/vsftpd
2.4 防火墙开放vsftpd端口
[root@myhost vsftpd]# firewall-cmd --zone=public --permanent --add-port=21/tcp && firewall-cmd --reload && firewall-cmd --list-ports
2.5 开放ftp服务添加到防火墙外
[root@myhost vsftpd]# firewall-cmd --permanent --add-service=ftp && firewall-cmd --reload
2.6 重启防火墙
[root@myhost vsftpd]# systemctl restart firewalld.service
三、配置虚拟用户登录vsftpd服务器
3.1 添加虚拟用户口令文件
[root@myhost vsftpd]# vi /etc/vsftpd/vuser.txt
[root@myhost vsftpd]# cat /etc/vsftpd/vuser.txt #一行用户名,一行密码#
db
db123
fdfs
fdfs123
3.2 生成虚拟用户口令认证文件
[root@myhost vsftpd]# yum install -y db4-utils
[root@myhost vsftpd]# which db_load
/usr/bin/db_load
[root@myhost vsftpd]# db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db
[root@myhost vsftpd]# ll
total 36
-rw------- 1 root root 125 Oct 14 00:10 ftpusers
-rw------- 1 root root 361 Oct 14 00:10 user_list
-rw------- 1 root root 5116 Oct 14 00:10 vsftpd.conf
-rwxr--r-- 1 root root 338 Oct 14 00:10 vsftpd_conf_migrate.sh
-rw-r--r-- 1 root root 12288 Dec 23 13:11 vuser.db ####
-rw-r--r-- 1 root root 22 Dec 23 13:11 vuser.txt ####
3.3 编辑vsftpd的pam.d认证文件
[root@myhost vsftpd]# find / -name pam_userdb.so
/usr/lib64/security/pam_userdb.so
[root@myhost vsftpd]# vi /etc/pam.d/vsftpd
[root@myhost vsftpd]# cat /etc/pam.d/vsftpd
#%PAM-1.0
#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include password-auth
#account include password-auth
#session required pam_loginuid.so
#session include password-auth
#注释掉以上内容之后再添加以下内容:
auth required /usr/lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account required /usr/lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
3.4 建立本地映射用户并设置宿主目录的权限
3.4.1 建立本地映射用户
[root@myhost ~]# cd /home/
[root@myhost home]# ll
total 0
drwx------ 2 developer root 59 Dec 21 13:57 developer
drwx------ 2 dscqtest dscqtest 75 Dec 21 13:57 dscqtest
drwxr-xr-x 3 root root 40 Dec 21 14:05 logs
drwxr-xr-x 2 root root 54 Dec 21 14:01 script
drwxr-xr-x 2 root root 54 Dec 22 11:46 tools
drwx------ 2 xzds root 75 Dec 21 13:57 xzds
[root@myhost home]# useradd vuser -d /home/vuser -s /sbin/nologin
[root@myhost home]# ll
total 0
drwx------ 2 developer root 59 Dec 21 13:57 developer
drwx------ 2 dscqtest dscqtest 75 Dec 21 13:57 dscqtest
drwxr-xr-x 3 root root 40 Dec 21 14:05 logs
drwxr-xr-x 2 root root 54 Dec 21 14:01 script
drwxr-xr-x 2 root root 54 Dec 22 11:46 tools
drwx------ 2 vuser vuser 75 Dec 23 12:57 vuser ##本地映射用户宿主目录##
drwx------ 2 xzds root 75 Dec 21 13:57 xzds
[root@myhost home]# grep vuser /etc/passwd
vuser:x:1006:1006::/home/vuser:/sbin/nologin
3.4.2 修改建立本地映射用户宿主目录的权限为755
[root@myhost home]# chmod 755 /home/vuser/
[root@myhost home]# ll
total 0
drwx------ 2 developer root 59 Dec 21 13:57 developer
drwx------ 2 dscqtest dscqtest 75 Dec 21 13:57 dscqtest
drwxr-xr-x 3 root root 40 Dec 21 14:05 logs
drwxr-xr-x 2 root root 54 Dec 21 14:01 script
drwxr-xr-x 2 root root 54 Dec 22 11:46 tools
drwxr-xr-x 2 vuser vuser 75 Dec 23 12:57 vuser
drwx------ 2 xzds root 75 Dec 21 13:57 xzds
3.5 修改vsftpd的主配置文件/etc/vsftpd/vsftpd.conf
3.5.1 原始的/etc/vsftpd/vsftpd.conf文件
[root@myhost home]# cd /etc/vsftpd/
[root@myhost vsftpd]# ll
total 40
-rw------- 1 root root 125 Oct 14 00:10 ftpusers
-rw------- 1 root root 361 Oct 14 00:10 user_list
-rw------- 1 root root 248 Dec 23 13:34 vsftpd.conf
-rw------- 1 root root 5116 Dec 23 13:34 vsftpd.conf_bak_ori
-rwxr--r-- 1 root root 338 Oct 14 00:10 vsftpd_conf_migrate.sh
-rw-r--r-- 1 root root 12288 Dec 23 13:11 vuser.db
-rw-r--r-- 1 root root 22 Dec 23 13:11 vuser.txt
[root@myhost vsftpd]# cp vsftpd.conf vsftpd.conf_bak_ori
[root@myhost vsftpd]# egrep -v "^#|#$" vsftpd.conf_bak_ori >vsftpd.conf
[root@myhost vsftpd]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
anon_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
3.5.2 修改之后的/etc/vsftpd/vsftpd.conf文件
[root@myhost vsftpd]# vi /etc/vsftpd/vsftpd.conf
[root@myhost vsftpd]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
##这里表示调用/etc/pam.d/vsftpd.conf认证文件##
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
##开启虚拟用户访问模式##
guest_enable=YES
guest_username=vuser
allow_writeable_chroot=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
chroot_local_user=YES
##手动将所有虚拟用户根目录锁定在此目录,如果不指定,默认也是本地映射用户宿主目录##
local_root=/home/vuser/
3.5.3 重启vsftpd服务
[root@myhost vsftpd]# systemctl start vsftpd.service
[root@myhost vsftpd]# systemctl status vsftpd.service
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2020-12-23 13:42:47 CST; 6s ago
Process: 6258 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 6259 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─6259 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Dec 23 13:42:47 myhost systemd[1]: Starting Vsftpd ftp daemon...
Dec 23 13:42:47 myhost systemd[1]: Started Vsftpd ftp daemon.
3.6 验证
四、单独定义每个虚拟用户的根目录与权限
4.1 修改vsftpd的主配置文件/etc/vsftpd/vsftpd.conf
[root@myhost vsftpd]# vi /etc/vsftpd/vsftpd.conf
[root@myhost vsftpd]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
anon_umask=022
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
##这里表示调用/etc/pam.d/vsftpd.conf认证文件##
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
##开启虚拟用户访问模式##
guest_enable=YES
guest_username=vuser
allow_writeable_chroot=YES
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
#anon_other_write_enable=YES
#chroot_local_user=YES
##手动将所有虚拟用户根目录锁定在此目录,如果不指定,默认也是本地映射用户宿主目录##
#local_root=/home/vuser/
##开启虚拟用户各自权限配置,需要自行创建此目录##
user_config_dir=/etc/vsftpd/vusers_conf.d
4.2 创建目录/etc/vsftpd/vusers_conf.d
[root@myhost vsftpd]# mkdir -p /etc/vsftpd/vusers_conf.d
[root@myhost vsftpd]# ll
total 40
-rw------- 1 root root 125 Oct 14 00:10 ftpusers
-rw------- 1 root root 361 Oct 14 00:10 user_list
-rw------- 1 root root 769 Dec 23 13:45 vsftpd.conf
-rw------- 1 root root 5116 Dec 23 13:34 vsftpd.conf_bak_ori
-rwxr--r-- 1 root root 338 Oct 14 00:10 vsftpd_conf_migrate.sh
-rw-r--r-- 1 root root 12288 Dec 23 13:11 vuser.db
drwxr-xr-x 2 root root 6 Dec 23 13:46 vusers_conf.d ####
-rw-r--r-- 1 root root 22 Dec 23 13:11 vuser.txt
4.3 在目录/etc/vsftpd/vusers_conf.d中创建虚拟用户配置文件
注意:配置文件名必须和虚拟用户名保持一致
[root@myhost vusers_conf.d]# touch db
[root@myhost vusers_conf.d]# touch fdfs
[root@myhost vusers_conf.d]# ll
total 0
-rw-r--r-- 1 root root 0 Dec 23 13:50 db
-rw-r--r-- 1 root root 0 Dec 23 13:50 fdfs
[root@myhost vusers_conf.d]# vi db
[root@myhost vusers_conf.d]# cat db
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=022
chroot_local_user=YES
##手动将所有虚拟用户根目录锁定在此目录,如果不指定,默认也是本地映射用户宿主目录##
local_root=/home/backup
[root@myhost vusers_conf.d]# vi fdfs
[root@myhost vusers_conf.d]# cat fdfs
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=022
chroot_local_user=YES
##手动将所有虚拟用户根目录锁定在此目录,如果不指定,默认也是本地映射用户宿主目录##
local_root=/home/fastdfs
4.4 创建并修改/home/backup的所属主为本地映射用户vuser
[root@myhost vusers_conf.d]# cd /home/
[root@myhost home]# mkdir /home/backup
[root@myhost home]# chown -R vuser /home/backup
[root@myhost home]# ll -d /home/backup/
drwxr-xr-x 5 vuser root 66 Dec 22 11:43 /home/backup/
4.5 创建并修改/home/fastdfs 的所属主为本地映射用户vuser
[root@myhost home]# mkdir /home/fastdfs
[root@myhost home]# chown -R vuser /home/fastdfs
[root@myhost home]# ll -d /home/fastdfs
drwxr-xr-x 2 vuser root 6 Dec 23 14:00 /home/fastdfs
4.6 验证
五、打开vsftpd服务日志输出功能
注意:vsftpd 服务默认不打开日志输出,出错信息可以直接在系统日志/var/log/secure中查看。
当然,如果需要打开vsftpd 的日志信息,需要修改配置文件,操作如下:
5.1 修改主配置文件/etc/vsftpd/vsftpd.conf
[root@myhost vsftpd]# vi /etc/vsftpd/vsftpd.conf
[root@myhost vsftpd]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
#anon_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
##这里表示调用/etc/pam.d/vsftpd.conf认证文件##
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
##开启虚拟用户访问模式##
guest_enable=YES
guest_username=vuser
allow_writeable_chroot=YES
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
#anon_other_write_enable=YES
#chroot_local_user=YES
##手动将所有虚拟用户根目录锁定在此目录,如果不指定,默认也是本地映射用户宿主目录##
#local_root=/home/vuser/
##开启虚拟用户各自权限配置,需要自行创建此目录##
user_config_dir=/etc/vsftpd/vusers_conf.d
##开启日志##
use_localtime=NO
dual_log_enable=YES
5.2 重启vsftpd服务
[root@myhost vsftpd]# systemctl start vsftpd.service
[root@myhost vsftpd]# systemctl status vsftpd.service
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2020-12-23 13:42:47 CST; 6s ago
Process: 6258 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 6259 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─6259 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Dec 23 13:42:47 myhost systemd[1]: Starting Vsftpd ftp daemon...
Dec 23 13:42:47 myhost systemd[1]: Started Vsftpd ftp daemon.
5.3 查看vsftpd服务相关日志
[root@myhost vsftpd]# tail -f /var/log/vsftpd.log
[root@myhost vsftpd]# tail -f /var/log/secure
六、修改vsftpd服务ftp默认端口
常规情况下ftp默认21端口容易遭到别人的扫描、带来了一定程度的不安全。所以,最好的就是把21端口修改掉。这里修改成2121。
6.1 修改主配置文件/etc/vsftpd/vsftpd.conf
[root@myhost vsftpd]# vi /etc/vsftpd/vsftpd.conf
[root@myhost vsftpd]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
anon_umask=022
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
##这里表示调用/etc/pam.d/vsftpd.conf认证文件##
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
##开启虚拟用户访问模式##
guest_enable=YES
guest_username=vuser
allow_writeable_chroot=YES
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
#anon_other_write_enable=YES
#chroot_local_user=YES
##手动将所有虚拟用户根目录锁定在此目录,如果不指定,默认也是本地映射用户宿主目录##
#local_root=/home/vuser/
##开启虚拟用户各自权限配置,需要自行创建此目录##
user_config_dir=/etc/vsftpd/vusers_conf.d
##开启日志##
use_localtime=NO
dual_log_enable=YES
##修改默认端口号##
listen_port=2121
##开启被动访问模式##
pasv_enable=YES
pasv_min_port=2122
pasv_max_port=2123
pasv_promiscuous=yes
pasv_address=xx.xx.xx.xx
pasv_promiscuous=yes #此选项激活时,将关闭PASV模式的安全检查,默认为NO
pasv_address=xx.xx.xx.xx #在网络安全组开放设置源ip port和目标源端口
6.2 同时防火墙端口也要改一下
[root@myhost vsftpd]# firewall-cmd --zone=public --permanent --add-port=2121/tcp
[root@myhost vsftpd]# firewall-cmd --zone=public --permanent --add-port=2121/udp
[root@myhost vsftpd]# firewall-cmd --permanent --zone=public --add-port=2122-2123/tcp ##这一步非常重要,否者无法访问##
[root@myhost vsftpd]# firewall-cmd --reload && firewall-cmd --list-ports
6.3 再次重启vsftpd服务
[root@myhost vsftpd]# systemctl start vsftpd.service
[root@myhost vsftpd]# systemctl status vsftpd.service
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2020-12-23 13:42:47 CST; 6s ago
Process: 6258 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 6259 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─6259 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Dec 23 13:42:47 myhost systemd[1]: Starting Vsftpd ftp daemon...
Dec 23 13:42:47 myhost systemd[1]: Started Vsftpd ftp daemon.
七、umask拓展
7.1 vsftp上传文件权限
如果使用vsftp的是本地用户,则要修改配置文件中的 local_umask 的值;
如果使用vsftp的是虚拟用户,则要修改配置文件中的 anon_umask 的值;
umask = 022 时,新建的目录 权限是755,文件的权限是 644;
umask = 077 时,新建的目录 权限是700,文件的权限时 600;