什么是FTP
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。
(转自百度百科)
如何配置FTP
可以看到FTP是由客户端和服务器两部分组成,所以我们先来配置服务器。
如果你想要连接到FTP的服务器,你就必须有一个账户,在FTP当中有三种账户。
ftpReal帐户(本地用户)
这类用户是指在FTP服务上拥有帐号。当这类用户登录FTP服务器的时候,其默认的主目录就是其帐号命名的目录。但是,其还可以变更到其他目录中去。如系统的主目录等等。
ftpGuest用户(虚拟用户)
在FTP服务器中,我们往往会给不同的部门或者某个特定的用户设置一个帐户。但是,这个账户有个特点,就是其只能够访问自己的主目录。服务器通过这种方式来保障FTP服务上其他文件的安全性。这类帐户,在Vsftpd软件中就叫做Guest用户。拥有这类用户的帐户,只能够访问其主目录下的目录,而不得访问主目录以外的文件。
ftpAnonymous(匿名)用户
这也是我们通常所说的匿名访问。这类用户是指在FTP服务器中没有指定帐户,但是其仍然可以进行匿名访问某些公开的资源。
第一步安装FTP服务端
yum install vsftpd -y
启动ftp服务端(关闭防火墙和selinux)
systemctl restart vsftpd
访问服务器,这里可以使用windows作为客户端,也可以使用linux作为客户端,但是后者需要装客户端的包(yum install ftp)
这个/pub是服务器根目录下的/var/ftp/pub
配置文件及相关参数:
文件的下载(匿名用户)
默认配置就可以实现
在默认文件下匿名用户就可以下载
文件的上传(匿名用户)
首先更改配置文件
vim /etc/vsftpd/vsftpd.conf
anon_umask=022 (追加写入)
29 anon_upload_enable=YES
33 anon_mkdir_write_enable=YES
然后修改匿名用户目录的权限
重启vsftpd服务,然后上传一下文件,发现可以
但是无法删除,如果需要删除我们需要再修改配置文件
vim /etc/vsftpd/vsftpd.conf
anon_other_write_enable=YES
然后重启服务就可以删除文件了。
文件的下载(本地用户)
首先需要修改配置文件
vim /etc/vsftpd/vsftpd.conf
anonyus_enable=NO
local_enable=YES
注释以下三行
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
修改后需要登录本地用户的用户名和密码,但是这样登陆上去的用户可以打开自己家目录下的所有文件,所以我们需要改变它的权限
getsebool -a | grep ftp_home_dir
ftp_home_dir --> off
setsebool -P ftp_home_dir on
上传还需要更改主配置文件
vim /etc/vsftpd/vsftpd.conf
write_enable=YES
遍历
首先需要开启chroot选项
vim /etc/vsftpd/vsftpd.conf
allow_writeable_chroot=YES
然后使用下面两个选项之一
第一:指定本地用户不能chroot
chroot_local_user=YES
第二:开启通过列表的方式来指定用户
chroot_list_enable=YES
#指定用户列表文件
chroot_list_file=/etc/vsftpd/chroot_list
#在当前目录创建用户列表文件
cat chroot_list
haha
如果chroot_local_user=YES开启,那么指定列表中的用户可以翻
如果没有开启chroot_local_user=YES,那么指定列表中的用户不可以翻
虚拟用户
首先创建系统用户,禁止该用户进行登陆
useradd -s /sbin/nologin tom
然后修改用户家目录权限
chmod 704 /home/tom/
然后修改主配置文件,增加以下三个选项
vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=tom #tom为系统用户
virtual_use_local_privs=YES
然后创建虚拟用户数据库文件
创建虚拟用户文件如下:
格式为一行用户名,一行密码,示例中tom为用户名,123为密码
vim /etc/vsftpd/vuser
tom
123
然后将虚拟用户文件转换成用户数据库文件
db_load -T -t hash -f vuser user.db
修改虚拟用户数据库文件权限
chmod 600 user.db
查看虚拟用户数据库文件的上下文权限
ll -Z user.db
-rw-------. root root unconfined_u:object_r:etc_t:s0 user.db
修改PAM认证方式
编辑认证配置文件
vim /etc/pam.d/vsftpd
注释掉所有行,并添加以下两行:
auth required pam_userdb.so db=/etc/vsftpd/user
account required pam_userdb.so db=/etc/vsftpd/user
注:数据库文件名的“.db”不用输入
最后重启服务进行测试
TCP_wrappers
什么是TCP_wrappers
TCP_Wrappers是一个工作在第四层(传输层)的安全工具,对有状态连接的特定服务进行安全检测并实现访问控制,凡是包含有libwrap.so库文件的程序就可以受TCP_Wrappers的安全控制。它的主要功能就是控制谁可以访问,常见的程序有rpcbind、vsftpd、sshd,telnet。
特点 :配置改变,立即生效
控制文件:
/etc/hosts.allow 定义允许的访问
/etc/hosts.deny 定义拒绝的访问
语法:
Daemon_list : client_lists
服务名称 目标名称
例如在/etc/hosts.deny 文件中写入 ssh:192.168.66.100 那么66.100主机就无法登录到当前主机上了。
关于主机的宏定义的表示方式:
LOCAL 主机中不含.的主机(通常是指自己)
KNOWN 所有在DNS中可以解析到的主机
UNKNOWN 所有在DNS不可以解析到的主机
PARANOID 所有在DNS中正向解析与反向解析不匹配的主机
ALL 代表匹配所有(这个主机和服务都可以定义)
EXCEPT 反向选择
列如:/etc/hosts.deny ssh:192.168.66.0 255.255.255.0 EXCEPT 192.168.66.120
在66网段,只有120可以SSH链接本主机