参考文档:

https://blog.51cto.com/14156658/2472402

https://blog.51cto.com/andyxu/2168875

https://blog.csdn.net/wojiuwangla/article/details/112782715

关闭selinux

编辑 /etc/selinux/config,将SELinux属性设置为Disabled

运行以下命令安装vsftpd:

1[root@localhost vsftpd]# yum install -y vsftpd

运行以下命令设置FTP服务开机自启动:

1[root@localhost vsftpd]# systemctl enable vsftpd.service

运行以下命令启动FTP服务:

1[root@localhost vsftpd]# systemctl start vsftpd.service

查看运行状态:

1[root@localhost vsftpd]# systemctl status vsftpd.service

配置文件目录: /etc/vsftpd/

虚拟用户模式

1、创建用于FTP认证的用户数据库文件

注:第一行用户名,第二行密码,依此类推

1[root@localhost vsftpd]# vim /etc/vsftpd/vuser.txt
2master
3master123
4guest
5guest123

明文信息不安全,需要使用db_load命令用哈希(hash)算法将明文信息转换成数据文件。

1[root@localhost vsftpd]# db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db
2[root@localhost vsftpd]# chmod 600 /etc/vsftpd/vuser.db

将明文信息文件删除(可选操作)

1[root@localhost vsftpd]# rm -f /etc/vsftpd/vuser.txt

2、创建虚拟用户映射的系统本地用户和FTP根目录

1[root@localhost vsftpd]# mkdir /data
2[root@localhost vsftpd]# useradd -d /data/ftproot -s /sbin/nologin virtual
3[root@localhost vsftpd]# chmod -R 755 /data/ftproot/

3、建立用于支持虚拟用户的PAM文件

新建一个用于虚拟用户认证的PAM文件vsftpd.vu,其中PAM文件内的“db=”参数为使用db_load命令生成的账户密码数据文件的路径,但不用写数据文件的后缀。

1[root@localhost vsftpd]# vim /etc/pam.d/vsftpd.vu
2auth     required     pam_userdb.so  db=/etc/vsftpd/vuser
3account  required     pam_userdb.so  db=/etc/vsftpd/vuser

4、为两个虚拟用户设置不同的权限。

1[root@localhost vsftpd]# mkdir /etc/vsftpd/vusers_dir

master拥有所有权限

1[root@localhost vsftpd]# vim /etc/vsftpd/vusers_dir/master
2local_root=/data/ftproot/dir_master
3anon_upload_enable=YES
4anon_mkdir_write_enable=YES
5anon_other_write_enable=YES

guest只有读取权限

1[root@localhost vsftpd]# vim /etc/vsftpd/vusers_dir/guest
2local_root=/data/ftproot/dir_guest

5、备份之前的配置文件,创建新的配置文件,内容如下:

 1[root@localhost vsftpd]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.backup
 2[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
 3anonymous_enable=NO
 4local_enable=YES
 5write_enable=YES
 6local_umask=022
 7anon_mkdir_write_enable=YES
 8dirmessage_enable=YES
 9xferlog_enable=YES
10connect_from_port_20=YES
11chown_uploads=YES
12xferlog_std_format=YES
13async_abor_enable=YES
14ascii_upload_enable=YES
15ascii_download_enable=YES
16chroot_local_user=YES
17listen=NO
18listen_ipv6=YES
19 
20pam_service_name=vsftpd.vu
21userlist_enable=YES
22tcp_wrappers=YES
23 
24use_localtime=YES
25listen_port=21
26idle_session_timeout=300
27guest_enable=YES
28guest_username=virtual
29user_config_dir=/etc/vsftpd/vusers_dir
30data_connection_timeout=1
31virtual_use_local_privs=YES
32pasv_min_port=40000
33pasv_max_port=40010
34accept_timeout=5
35connect_timeout=1
36allow_writeable_chroot=YES

6、重启vsftpd服务

1[root@localhost vsftpd]# systemctl restart vsftpd

7、测试

 1[root@localhost ~]# yum install ftp
 2[root@localhost ~]# ftp localhost  
 3Trying ::1...
 4Connected to localhost (::1).
 5220 (vsFTPd 3.0.2)
 6Name (localhost:root): guest
 7331 Please specify the password.
 8Password:
 9230 Login successful.
10Remote system type is UNIX.
11Using binary mode to transfer files.
12ftp> ls
13229 Entering Extended Passive Mode (|||40009|).
14150 Here comes the directory listing.
15drwxrwxrwx    1 0        0               0 Feb 12 08:56 $RECYCLE.BIN
16drwxrwxrwx    1 0        0            4096 Feb 12 08:56 System Volume Information
17drwxrwxrwx    1 0        0               0 Feb 02 01:10 谷粒商城
18226 Directory send OK.
19ftp> cd 谷粒商城
20250 Directory successfully changed.
21ftp> ls
22229 Entering Extended Passive Mode (|||40005|).
23150 Here comes the directory listing.
24drwxrwxrwx    1 0        0            4096 Feb 02 01:36 works
25drwxrwxrwx    1 0        0           40960 Feb 02 00:36 分布式基础篇
26drwxrwxrwx    1 0        0           90112 Feb 02 01:05 分布式高级篇
27drwxrwxrwx    1 0        0           28672 Feb 02 01:10 高可用集群篇
28226 Directory send OK.
29ftp> exit
30221 Goodbye.