文件传输协议(FTP,File Transfer Protocol)
即能够让用户在互联网中上传、下载文件的文件协议,而FTP服务器就是支持FTP传输协议的主机,要想完成文件传输则需要FTP服务端和FTP客户端的配合才行。
通常用户使用FTP客户端软件向FTP服务器发起连接并发送FTP指令,服务器收到用户指令后将执行结果返回客户端。
FTP协议占用两个端口号:
21端口:命令控制,用于接收客户端执行的FTP命令。
20端口:数据传输,用于上传、下载文件数据。
FTP数据传输的类型:
主动模式:FTP服务端主动向FTP客户端发起连接请求。
被动模式:FTP服务端等待FTP客户端的连接请求。
关于vsftpd的相关配置文件
用户禁止登陆列表 |
/etc/vsftpd/ftpusers |
主配置文件 |
/etc/vsftpd/vsftpd.conf |
vsftpd程序配置文件参数的作用:
listen=[YES|NO] |
是否以独立运行的方式监听服务。 |
listen_address=IP地址 |
设置要监听的IP地址。 |
listen_port=21 |
设置FTP服务的监听端口 21端口(ftp) 20端口(ftp-date) |
Vsftpd的验证方式
vsftpd程序提供的FTP服务可选认证方式,分别为匿名访问、本地用户和虚拟用户:
匿名访问:任何人无需验证口令即可登入FTP服务端。
本地用户:使用FTP服务器中的用户、密码信息。
虚拟用户:创建独立的FTP帐号资料。
顾名思义匿名访问就是所有人均可随意登入FTP服务,这样自然会产生安全问题,一般用于存放公开的数据。
而本地用户与虚拟用户则需要用户提供帐号及口令后才能登入FTP服务,更加的安全,而虚拟用户则是最安全的。
安装vsftpd服务程序
# yum install vsftpd -y
清空默认的防火墙默认规则:
# iptables -F
保存清空后的防火墙规则
# service iptables save
匿名访问模式
FTP匿名访问模式是比较不安全的服务模式,尤其在真实的工作环境中千万不要存放敏感的数据,以免泄露。
vsftpd程序默认已经允许匿名访问模式,我们要做的就是开启匿名用户的上传和写入权限,写入下面的参数:
# vim /etc/vsftpd/vsftpd.conf
参数 |
作用 |
anonymous_enable=YES |
允许匿名访问模式。 |
anon_umask=022 |
匿名用户上传文件的umask值。 |
anon_upload_enable=YES |
允许匿名用户上传文件 |
anon_mkdir_write_enable=YES |
允许匿名用户创建目录 |
anon_other_write_enable=YES |
允许匿名用户修改目录名或删除目录 |
确认填写正确后保存并退出vsftpd.conf文件,然后重启vsftpd服务程序并设置为开机自启动。
# systemctl restart vsftpd
# systemctl enable vsftpd
如果重启vsftpd服务程序时没有报错,此时便可以使用FTP客户机(192.168.27.200)尝试登入FTP服务了
客户机(192.168.27.200)系统中ftp命令默认没有安装,请执行”yum install ftp -y“即可安装完毕
上面操作中已经将防火墙规则清空,在vsftpd.conf文件中也已经允许匿名用户创建目录与写入权限,那怎么会被拒绝了呢?
回想前面的参数细节,匿名访问模式的FTP根目录为/var/ftp
原来匿名用户的FTP根目录所有者/组都是root,所以匿名用户没有写入权限,那我们将所有者修改为ftp试试
# chown ftp /var/ftp/pub
此时再用ftp命令尝试登入FTP服务并创建文件:
ftp> mkdir files
550 Create directory operation failed 还是错误
查看所有与ftp相关的SELinux规则:
# getsebool -a | grep ftp
ftp_home_dir --> off
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off
设置SELinux服务对ftp服务的访问规则策略为允许
# setsebool -P ftpd_full_access=on
此时再来创建文件或目录就没有问题了:
[root@guoxiaoyan-hbza ~]# ftp 192.168.27.100
Connected to 192.168.27.100 (192.168.27.100).
220 (vsFTPd 3.0.2)
Name (192.168.27.100:root): anonymous
331 Please specify the password.
Password:敲击回车
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>cd pub
250 Directory successfully changed.
ftp>mkdir files
257 "/pub/files" created
ftp>rename files database
350 Ready for RNTO.
250 Rename successful.
ftp>rmdir database
250 Remove directory operation successful.
ftp>exit
221 Goodbye.
注意:当完成本实验后请还原虚拟机快照再进行下一个实验,否则可能导致配置文件冲突而报错
本地用户模式
既然要使用本地用户模式,而本地用户模式确实要比匿名访问模式更加的安全,所以本实验中会关闭匿名访问模式。
vsftpd服务程序默认已经允许本地用户模式,我们要做的是添加设置本地用户模式权限的参数:
# vim /etc/vsftpd/vsftpd.conf
参数 |
作用 |
anonymous_enable=NO |
禁止匿名访问模式。 |
local_enable=YES |
允许本地用户模式。 |
write_enable=YES |
设置可写入权限。 |
local_umask=022 |
本地用户模式创建文件的umask值。 |
userlist_deny=YES |
参数值为YES即禁止名单中的用户,参数值为NO则代表仅允许名单中的用户。 |
userlist_enable=YES |
允许“禁止登陆名单”,名单文件为ftpusers与user_list。 |
确认填写正确后保存并退出vsftpd.conf文件,然后重启vsftpd服务程序并设置为开机自启动。
# systemctl restart vsftpd
# systemctl enable vsftpd
重启vsftpd服务程序时没有报错,此时便可以使用FTP客户机(192.168.27.200)尝试登入FTP服务了
我们先来看下ftpusers或user_list文件中禁止登陆用户名单:vim /etc/vsftpd/user_list
vsftpd服务为了让FTP服务更加的安全,默认禁止以root身份登入,那么创建个普通用户吧:
# useradd linuxprobe
为linuxprobe用户设置密码:
(我的没有问题 直接就出来了)如果再遇到了“操作被拒绝”,应该马上想到SELinux
查看所有与ftp相关的SELinux规则:
# getsebool -a | grep ftp
ftp_home_dir --> off
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off
设置SELinux对FTP服务的规则为允许:
# setsebool -P ftpd_full_access=on
此时再来创建文件或目录就没有问题了: