• 配置过程是:先安装vsftpd服务,再修改配置文件,设置防火墙,使用客户端进行测试等。配置过程如下:
[root@localhost ~]# rpm -qa | grep vsftpd	#查询系统中是否已有vsftpd服务
[root@localhost ~]# yum install vsftpd		#安装vsftpd服务
[root@localhost ~]# cd /etc/vsftpd/			#切换到vsftpd服务配置目录
[root@localhost vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
[root@localhost vsftpd]# cp vsftpd.conf vsftpd.bak	#备份配置文件
[root@localhost vsftpd]# grep -v "#" vsftpd.bak > vsftpd.conf	#过滤以井号开头的行
[root@localhost vsftpd]# vim vsftpd.conf	#编辑配置文件,修改后的内容如下:
anonymous_enable=YES
anon_umask=022					#新增内容:匿名用户创建文件的掩码
anon_upload_enable=YES			#新增内容:是否允许匿名用户上传文件
anon_mkdir_write_enable=YES		#新增内容:是否允许匿名用户创建目录
anon_other_write_enable=YES		#新增内容:是否允许匿名用户创建文件
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

[root@localhost vsftpd]# systemctl restart vsftpd	#重启vsftpd服务
[root@localhost vsftpd]# getsebool -a | grep ftp	#查看关于vsftpd的SELinux域限制
......
ftpd_full_access --> off		#要开启这个权限,允许用户访问
[root@localhost vsftpd]# setsebool -P ftpd_full_access=on
#用户登录ftp服务器,默认进入的是 /var/ftp,这个目录下面还有pub目录,用户可在pub目录内创建文件操作,因此要修改这个目录的权限
[root@localhost vsftpd]# chmod -Rf o+w /var/ftp/pub
[root@localhost vsftpd]# iptables -I INPUT -p tcp --dport 20 -j ACCEPT
[root@localhost vsftpd]# iptables -I INPUT -p tcp --dport 21 -j ACCEPT

#下面使用windows客户端进行测试
C:\Users\xx>ftp 192.168.0.40
连接到 192.168.0.40。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(192.168.0.40:(none)): anonymous		#输入用户名
331 Please specify the password.
密码:			#直接回车
230 Login successful.
ftp> ls		#查看目录
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
pub
226 Directory send OK.
ftp: 收到 8 字节,用时 0.00秒 8000.00千字节/秒。
ftp> mkdir mm		#不能在/var/ftp目录下创建目录
550 Create directory operation failed.
ftp> cd pub			#切换目录
250 Directory successfully changed.
ftp> mkdir mm		#创建目录
257 "/pub/mm" created
ftp> rename mm xx	#重命名
350 Ready for RNTO.
250 Rename successful.
ftp> rmdir xx		#删除目录
250 Remove directory operation successful.
  • 上面配置文件中,默认开启了本地用户登录的设置,但是root用户除外。因为root用户在ftpusers 和 user_list 这两个黑名单文件中,从这两个黑名单文件中删除root,就可以使用root用户登录。
  • 匿名用户登录ftp后对应的目录是 /var/ftp,本地用户登录ftp后对应的是用户的家目录。虚拟用户登录ftp后映射用户的家目录。
  • 虚拟用户登录ftp服务器是最安全的模式,同时虚拟用户也不能使用ssh命令。配置虚拟用户登录需要使用到可挺拔式认证模块PAM。配置过程如下:
[root@localhost vsftpd]# pwd
/etc/vsftpd
[root@localhost vsftpd]# vim my_user_list	#文件名称任意,奇数行用户名,偶数行是密码
libai
abcd1234
dufu
abcd1234
[root@localhost vsftpd]# db_load -T -t hash -f my_user_list my_user_list.db	#加密
[root@localhost vsftpd]# chmod 600 my_user_list.db		#将权限设置小一些
[root@localhost vsftpd]# file my_user_list.db		#查看加密后的文件类型
my_user_list.db: Berkeley DB (Hash, version 9, native byte-order)
[root@localhost vsftpd]# file my_user_list
my_user_list: ASCII text
[root@localhost vsftpd]# rm -f my_user_list		#删除未加密的文件

#为虚拟用户登录创建出一个映射用户
[root@localhost vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual
[root@localhost vsftpd]# id virtual
uid=1001(virtual) gid=1001(virtual) groups=1001(virtual)
[root@localhost vsftpd]# chmod -Rf 755 /var/ftproot	#将虚拟用户目录权限设置大一些

[root@localhost vsftpd]# vim /etc/pam.d/vsftp.vu	#在/etc/pam.d目录中建一个PAM模块
auth required pam_userdb.so db=/etc/vsftpd/my_user_list		#文件名称后面不加后缀
account required pam_userdb.so db=/etc/vsftpd/my_user_list

[root@localhost vsftpd]# vim vsftpd.conf	#修改配置文件
anonymous_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_enable=YES
guest_enable=YES				#允许虚拟用户登录
guest_username=virtual			#虚拟用户名
allow_writeable_chroot=YES		#chroot一种牢笼机制,限制登录用户不能使用超出范围的命令
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES

user_config_dir=/etc/vsftpd/vusers_dir	#用户配置文件目录,在这里做对每个用户的权限设定
pam_service_name=vsftp.vu		#修改为前面创建的文件
userlist_enable=YES
tcp_wrappers=YES

[root@localhost vsftpd]# mkdir vuser_dir	#创建用户配置文件
[root@localhost vsftpd]# cd vuser_dir/
[root@localhost vuser_dir]# touch libai		#创建用户配置文件
[root@localhost vuser_dir]# touch dufu
[root@localhost vuser_dir]# vim libai	#编辑用户配置文件
anon_upload_enable=YES			#是否可上传
anon_mkdir_write_enable=YES		#是否可创建目录写入文件
anon_other_write_enable=YES
#这里暂时不编辑dufu用户的配置文件
[root@localhost vuser_dir]# systemctl restart vsftpd	#重启服务

#下面使用libai用户登录ftp服务器测试
C:\Users\xx>ftp 192.168.0.40
连接到 192.168.0.40。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(192.168.0.40:(none)): libai		#输入libai用户名
331 Please specify the password.
密码:		#输入libai用户对应的密码abcd1234
230 Login successful.
ftp> pwd
257 "/"
ftp> cd /etc	#下面的各种操作正常
550 Failed to change directory.
ftp> mkdir abc
257 "/abc" created
ftp> rename abc cba
350 Ready for RNTO.
250 Rename successful.
ftp> rmdir cba
250 Remove directory operation successful.
ftp> quit
221 Goodbye.

#省略使用dufu用户进行登录测试