在Centos7.2上使用vsftpd搭建FTP服务器(企业级)

目录

文章目录

一、部署的环境准备

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;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值