《Linux就该这么学》第11章 使用vsftpd服务传输文件
vsftpd服务程序三种认证模式:匿名开放模式、本地用户模式、虚拟用户模式。
FTP协议默认使用了20、21号端口,其中端口20(数据端口)用于传输数据,端口21(命令端口)用于接受客户端发出的相关FTP命令与参数。
FTP协议有两种工作模式:
▶主动模式:FTP服务器主动向客户端发起连接请求。
▶被动模式:FTP服务器等待客户端发起连接请求(FTP的默认工作模式)。
# yum -y install vsftpd
# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
# grep -v "#" /etc/vsftpd/vsftpd.conf.bak > /etc/vsftpd/vsftpd.conf
# cat /etc/vsftpd/vsftpd.conf
anonymous_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
ftp 是 Linux 系统中以命令行界面的方式来管理 FTP 传输服务的客户端工具。
# yum -y install ftp
※匿名开放模式
vsftpd 服务程序默认开启了匿名开放模式,我们需要做的就是开放匿名用户的上传、下载文件的权限,以及让匿名用户创建、删除、更名文件的权限。
# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
# systemctl restart vsftpd
# systemctl enable vsftpd
在 vsftpd 服务程序的匿名开放认证模式下,其账户统一为 anonymous,密码为空。
另一台Linux主机登录测试:
# ftp 192.168.1.200
anonymous | cd pub | mkdir mydir1 =>550 Create directory operation failed.
因为默认/var/ftp/pub的权限为 # ls -ld /var/ftp/pub
drwxr-xr-x. 2 root root 6 8月 3 2017 /var/ftp/pub
# chown -Rf ftp /var/ftp/pub
# getsebool -a | grep ftp ==查看与FTP 相关的SELinux 域策略都有哪些
# setsebool -P ftpd_full_access=on ==-P 参数让修改过的策略永久生效
※本地用户模式
# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
# systemctl restart vsftpd
ftpusers 和 user_list文件中存在的用户是被禁掉的用户。
此时其他普通用户可以正常使用ftp功能,默认访问的是该用户的家目录。
※虚拟用户模式
第1步:创建用于进行 FTP 认证的用户数据库文件,其中奇数行为账户名,偶数行为密码。
# cd /etc/vsftpd/
# vim vuser.list
zhangsan
redhat
list
redhat
# db_load -T -t hash -f vuser.list vuser.db ==使用db_load 命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件
# chmod 600 vuser.db
# rm -rf vuser.list
第2步:创建 vsftpd 服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户。
# useradd -d /var/ftproot -s /sbin/nologin virtual
# chmod –Rf 755 /var/ftproot/
第3步:建立用于支持虚拟用户的 PAM(可插拔认证模块 )文件。
新建一个用于虚拟用户认证的PAM 文件vsftpd.vu,其中PAM 文件内的“db=”参数为使用db_load 命令生成的账户密码数据库文件的路径,但不用写数据库文件的后缀:
# vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
第4步:在vsftpd 服务程序的主配置文件中通过pam_service_name 参数将PAM 认证文件的名称修改为vsftpd.vu,PAM 作为应用程序层与鉴别模块层的连接纽带,可以让应用程序根据需求灵活地在自身插入所需的鉴别功能模块。当应用程序需要PAM 认证时,则需要在应用程序中定义负责认证的PAM 配置文件,实现所需的认证功能。
#vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=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.vu
userlist_enable=YES
tcp_wrappers=YES
第5步:为虚拟用户设置不同的权限。
# mkdir /etc/vsftpd/vusers_dir/
# cd /etc/vsftpd/vusers_dir/
# touch lisi
# vim zhangsan
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
# vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir ==在最后面添加此行内容
# systemctl restart vsftpd
第6步:设置 SELinux 域允许策略,然后使用虚拟用户模式登录 FTP 服务器。
# getsebool -a | grep ftp
ftpd_full_access --> on
# setsebool -P ftpd_full_access=on
…测试OK