- 配置过程是:先安装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用户进行登录测试