Vsftp 文件传输协议
1 介绍
1.1 文件传输协议ftp(file transfer protocol),提供文件存储和访问的协议
1.2 默认情况使用两个端口20(数据端口)用于传输数据 21 (命令端口)用于接收客户端发出的命令和参数
1.3 有两种工作模式,都是相对主机来说的,主动模式,服务器主动向客户端发起连接请求;被动模式,服务器等待客户端发起连接请求,默认也是被动模式,主动模式更安全,看场景
1.4 vsftpd (very secure ftp daemon)直译就是非常安全的ftp守护进程。在linux上使用开源免费,支持虚拟用户验证等优点
2 安装:
2.1 yum install vsftpd -y
2.2 防火墙看下端口firewall-cmd --list-ports 默认是没有开启他的端口的,我们来进行放行
3.3 看下配置文件
cat /etc/vsftpd/vsftpd.conf |grep -v '#'
local_enable=YES # 本地是否可以使用ftp
local_umask=022 # 本地上传文件的umask值 umask决定目录和文件被创建时得到的初始权限,umask = 022时 新建的目录 权限是755 其实也就是被屏蔽的权限值,相当于777-022=755
write_enable=YES # 是否可以写入
listen=NO # 监听服务是否独立运行
listen_address=ip地址 # 设置要监听的ip地址
listen_port=21 # fpt服务的监听端口
download_enable=[YES|NO] # 是否可以下载文件
user_list_enable=[YES|NO] # 用户列表的用户是否允许操作
user_list_deny=[YES|NO] # 用户列表的用户是否禁止操作
max_clients=0 # 最大客户端连接数0不限制
max_per_ip=0 # 同一个ip地址的最大连接数,0 为不限制
anonymous_enable=NO # 是否允许匿名用户访问 [əˈnɒnɪməs]
anon_upload_enable=[YES|NO] 是否允许匿名用户上传文件
anon_umask=022 匿名用户上传文件的 umask 值
anon_root=/var/ftp 匿名用户的 FTP 根目录
anon_mkdir_write_enable=[YES|NO] 是否允许匿名用户创建目录
anon_other_write_enable=[YES|NO]
是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限)
anon_max_rate=0 匿名用户的最大传输速率(字节/秒), 0 为不限制
4 三种认证模式,匿名开放模式,就是只要输入地址就可以直接登录,本地用户模式:通过linux系统本地的用户进行认证登录。虚拟用户模式:最安全的一种模式,需要为ftp单独建立用户数据库文件,仅供ftp认证使用,yum install -y ftp 这个包用来在linux中以命令行模式管理vsftpd的工具
4.1 匿名开放模式:
这种一般放在内网在防火墙内供大家做一些日常性的事情,需要开启的参数包括
anonymous_enable=YES # 是否允许匿名用户访问 [əˈnɒnɪməs]
anon_upload_enable=YES 是否允许匿名用户上传文件
anon_umask=022 匿名用户上传文件的 umask 值
anon_root=/var/ftp 匿名用户的 FTP 根目录
anon_mkdir_write_enable=[YES|NO] 是否允许匿名用户创建目录
anon_other_write_enable=[YES|NO]
是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限)
anon_max_rate=100K 匿名用户的最大传输速率(字节/秒), 0 为不限制
效果:
我们来用工具登录这样可以在linux中做一些操作
ftp> mkdir dir_test
550 Create directory operation failed.
但是创建文件失败,首先看到刚才设置的目录是root的目录,所以不能写入,我们设置一个自己的目录,然后所有者给ftp用户,这个用户系统默认已经有了
mkdir /opt/ftproot && chown ftp:ftp /opt/ftproot
修改配置文件
anon_root=/opt/ftproot
重启服务重新ftp登录,已经可以看到重新加载了目录,但是还是操作失败,我们来看下selinux
[[email protected] opt]# getsebool -a |grep ftp
ftpd_anon_write --> off
应该是这个属性没有开导致的,我们来测试下,setsebool -P ftpd_anon_write=on开启之后果然不是,看下这个完全访问 ftpd_full_access --> off 这次设置开启之后,不用重新登录,直接操作正常 ftp> mkdir aaa
257 "/aaa" created 然后exit退出
这个时候当我去浏览器访问的时候,需要输入自己的用户密码了,输入当前系统用户名,直接可以访问自己的家目录了
4.2 本地用户模式,也是默认模式
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
user_list_enable=YES # 禁止名单功能使用user_list列表中的用户
userlist_deny=YES # 禁止名单功能开启
其他的功能不用说了,最后这两个功能开启后(默认开启)user_list和ftpusers两个文件中存储的用户名称都不可以登录,其中包含root 如果确实需要,可以删除后即可访问,登录后访问的是登录用户的家目录,当然如果需要操作比如修改什么的,还是需要到sebool中去开启对应功能,由于上面开启了ftpd_full_access 这里就不在开启了
4.3 虚拟用户模式
第一步,创建出需要的用户列表文件,奇数行用户名,偶数行密码,随便创建两个
[[email protected] vsftpd]# vim /etc/vsftpd/vuser.list
ftpuser1
ftp
ftpuser2
ftp
[[email protected] vsftpd]# db_load -T -t hash -f vuser.list vuser.db # 使用db_load进行转换
[[email protected] vsftpd]# chmod 600 vuser.db # 降低数据库被其他人操作
[[email protected] vsftpd]# rm vuser.list # 删除原始文件
第二步,准备一个ftp虚拟用户登录后的默认位置,我们继续使用这个位置,当然正常情况,这些容易变化的文件应该放在/var下,如果需要自己可以随便设置
/opt/
└── ftproot
└── aaa
为了使系统可以管理这些虚拟用户创建出来的文件,还需要设置虚拟用户和实际系统用户的对应绑定,这样访问家目录就是实际的映射用户家目录,虚拟用户创建的文件归映射用户所有,我们正好将它绑定在ftp这个用户上,当然也可以自己新建
第三步 这个是个新东西。创建支持虚拟用户的pam文件,后缀是vu
全名是,可插拔认证模块是一种认证机制。详细了解还需要去查资料,这里不再说了。简单来说就是pam采取了分层机制,将应用服务和认证分割开来,系统管理员调整认证方式不再需要调整应用的任何东西
[[email protected] vsftpd]# vim /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
只有一个值需要对应具体的 db后面的值就是用户密码的数据库文件路径,不写后缀
第四步 准备工作做好之后,修改配置文件,在匿名用户关闭,本地用户开启的情况下增加如下配置
guest_enable=YES # 开启虚拟用户认证
guest_username=ftp # 虚拟账户对应的系统用户名称
pam_service_name=vsftpd.vu # pan认证的文件,这一行原本就存在,只需要修改值
allow_writeable_chroot=YES # 允许对ftp的根目录进行写入操作,这个看自己情况吧,我觉得禁止也可以
第五步:当我们想让用户1和用户2的权限不同的时候,新建一个用户目录,在目录内每个用户创建一个文件,写上对应的权限设置即可,可能作者比较懒吧,直接使用的是匿名用户的参数,有点不太搭配
[[email protected] vsftpd]# mkdir vusers_dir
[[email protected] vsftpd]# touch ftpuser1
[[email protected] vsftpd]# vim ftpuser2
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=NO
文件准备好了之后,在配置文件中增加user_config_dir=/etc/vsftpd/vusers_dir
由于sebool 之前已经开启,所以这里不再开启,否则还需要开启selinux 这个时候再去访问测试权限
5 简单文件传输协议
特点: 1 不需要校验,直接就可以用
2 使用了udp协议(默认69),可靠性差,但是速度相对快一些
安装:yum install tftp-server tftp 两个包 这东西平时使用极少,所以不在描述,使用的时候在去研究