FTP (File Transfer Protocol),文件传输协议,应用层的文件共享服务
C/S 客户端/服务端
应用程序
客户端
服务端
端口
TCP21 命令
TCP20 数据
模式
主动模式/standard/port方式, 客户端连接服务器之后,告诉服务器自己打开一个端口等待连接,服务器用自己的20端口连接客户端的端口,来传输数据,也就是说,服务器主动的连接客户端。
被动模式/passive/pasv方式,客户端主动连接服务器端
传输方式:ASCII,二进制
安装vsftp服务
[root@localhost ~]# yum install -y vsftpd
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl restart vsftpd
vsftp的用户有三种类型:匿名用户、系统用户、虚拟用户
1)匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous。
2)本地用户登录:使用系统用户登录,在/etc/passwd中。
3)虚拟用户登录:这是FTP专有用户,有两种方式实现虚拟用户,本地数据文件和数据库服务器。
FTP虚拟用户是FTP服务器的专有用户,使用虚拟用户账号可以提供集中管理的FTP根目录,方便了管理员的管理,同时将用于FTP登录的用户名、密码与系统用户账号区别开,进一步增强了FTP服务器的安全性。某种意义上来说,匿名用户也是系统用户,只是系统用户的一个映射。公开的FTP都不会使用系统用户作为FTP帐号,而更多的采用了虚拟用户,这样能保证系统的安全性。使用虚拟用户登录FTP服务器,可以避免使用操作系统帐号作为FTP用户带来的一些安全问题,也便于通过数据库或其它程序来进行管理。虚拟用户的特点是只能访问服务器为其提供的FTP服务,而不能访问系统的其它资源。所以,如果想让用户对FTP服务器站内具有写权限,但又不允许访问系统其它资源,可以使用虚拟用户来提高系统的安全性。
在VSFTP中,认证这些虚拟用户使用的是单独的口令库文件(pam_userdb),由可插入认证模块(PAM)认证。使用这种方式更加安全,并且配置更加灵活。
基本流程:FTP用户访问->PAM配置文件(由vsftpd.conf中pam_service_name指定)->PAM论证->区别用户读取配置文件(由vsftpd.conf中user_config_dir指定配置文件路径,文件名即用户名)
有两种方式建立FTP的虚拟用户,分别是:本地数据文件方式、数据库服务器(MySQL)方式
匿名用户
上传文件到资源管理器
[root@ldap ftp]# vi /etc/vsftpd/vsftpd.conf
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
[root@localhost ftp]# chmod o+w pub/
在资源管理器删除文件
修改配置文件,添加如下选项
[root@ldap ftp]# vi /etc/vsftpd/vsftpd.conf
anon_other_write_enable=YES
[root@localhost ftp]# systemctl restart vsftpdS
再上传下载的前提下可以删除文件,以及替换文件
本地用户
修改主配置文件开启本地用户权限
[root@ldap ftp]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
[root@ldap ftp]# vi /etc/vsftpd/vsftpd.conf
allow_writeable_chroot=YES
chroot_local_user=YES 指定本地用户不能chroot
chroot_list_enable=YES 开启通过列表的方式来指定用户
指定用户列表文件
chroot_list_file=/etc/vsftpd/chroot_list
在当前目录创建用户列表文件
[root@localhost ~]# vim /etc/vsftpd/chroot_list
tom
如果chroot_local_user=YES开启,那么指定列表中的用户可以翻
如果没有开启chroot_local_user=YES,那么指定列表中的用户不可以翻
Tom登录如下,可以查看其他用户的目录
Redhat用户登录如下,只可以看见自己的目录
虚拟用户
创建系统用户,禁止该用户进行登陆
[root@localhost ftp]# useradd -s /sbin/nologin vhaha
[root@localhost ftp]# chmod 704 /home/vhaha/
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
guest_enable=YES 启用虚拟用户
guest_username=vhaha 将虚拟用户映射为本地vhaha用户(前提是local_enable=YES)
virtual_use_local_privs=YES 本地虚拟用户特权开启
[root@localhost vsftpd]# cat vuser
abc
redhat
lalala
redhat
maomao
redhat
将虚拟用户文件转换成用户数据库文件
[root@localhost vsftpd]# db_load -T -t hash -f vuser user.db
[root@localhost vsftpd]# chmod 600 user.db
[root@localhost vsftpd]# ll -Z user.db
-rw——-. root root unconfined_u:object_r:etc_t:s0 user.db
[root@localhost vsftpd]# vim /etc/pam.d/vsftpd
#%PAM-1.0
#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include password-auth
#account include password-auth
#session required pam_loginuid.so
#session include password-auth
auth required pam_userdb.so db=/etc/vsftpd/user
account required pam_userdb.so db=/etc/vsftpd/user~
[root@localhost vsftpd]# systemctl restart vsftpd
虚拟用户登录
本地用户