一、FTP工作原理
(1)FTP服务器运行FTPd守护进程,等待用户的FTP请求。
(2)用户运行FTP命令,请求FTP服务器为其服务。
(3)FTPd守护进程收到用户的FTP请求后,派生出子进程FTP与用户进程FTP交互,建立文件传输控制连接,使用TCP 端口21。
(4)用户输入FTP子命令,服务器接收子命令,如果命令正确,双方各派生一个数据传输进程FTP-DATA,建立数据连接,使用TCP端口20,进行数据传输。
(5)本次子命令的数据传输完,拆除数据连接,结束FTP-DATA进程。
(6)用户继续输入FTP子命令,重复(4)、(5)的过程,直至用户输入quit命令,双方拆除控制连接,结束文件传输,结束FTP进程。
二、安装vsftp服务
(1)yum install vsftpd -y #服务器端
(2)yum install lftp -y #客户端
三、vsftpd服务的启动与关闭
(1) systemctl start vdftpd #启动
(2) systemctl stop vdftpd #关闭
(3) systemctl restart vdftpd #重启
四、vsftpd配置文件
(1) /etc/vsftpd/vsftpd.conf 主配置文件
(2) /etc/pam.d/vsftpd
PAM认证文件(此文件中file=/etc/vsftpd/ftpusers字段,指明阻止访问的用户来自/etc/vsftpd/ftpusers文件中的用户)
(3) /etc/vsftpd/ftpusers
禁止使用vsftpd的用户列表文件。记录不允许访问FTP服务器的用户名单,管理员可以把一些对系统安全有威胁的用户账号记录在此文件中,以免用户从FTP登录后获得大于上传下载操作的权利,而对系统造成损坏。
(4) /etc/vsftpd/user_list
禁止或允许使用vsftpd的用户列表文件。这个文件中指定的用户缺省情况(即在/etc/vsftpd/vsftpd.conf中设置 userlist_deny=YES)下也不能访问FTP服务器,在设置了userlist_deny=NO时,仅允许user_list中指定的用户访问FTP服务器。
(5) /var/ftp
vsftpd提供服务的文件散集地,它包括一个pub子目录,默认情况下,所有目录都是只读的。
五、vsftpd配置文件详解
(1)用户登录控制
anonymous_enable=YES,允许匿名用户登录。
no_anon_password=YES,匿名用户登录时不需要输入密码。
local_enable=YES,允许本地用户登录。
(2)用户权限控制
write_enable=YES,开启全局上传权限。
local_umask=022,本地用户的上传文件的umask设为022(系统默认是077,一般都可以改为022)。
anon_upload_enable=YES,允许匿名用户具有上传权限,很明显,必须启用write_enable=YES,才可以使用此项。同时我们还必须建立一个允许ftp用户可以读写的目录(前面说过,ftp是匿名用户的映射用户账号)。
anon_mkdir_write_enable=YES,允许匿名用户有创建目录的权利。
六、创建虚拟用户
1、创建一临时文件并编辑文件
touch /etc/vsftpd/ftp_db_users
vim /etc/vsftpd/ftp_db_users (文件内容如下:创建了两个帐号)
ftpuser1 用户1
ftp 用户1密码
ftpuser2 用户2
ftp 用户2密码
2、用db_load命令生成pam_userdb认证所需的帐号文件
db_load -T -t hash -f /etc/vsftpd/ftp_db.users /etc/vsftpd/vsftpd.login.db
3、配置PAM信息
在/etc/pam.d/目录下新建文件夹,名字为vsftpd.pam,文件内容如下:
auth required pam_userdb.so db=/etc/vsftpd/vsftpd.login
account required pam_userdb.so db=/etc/vsftpd/vsftpd.login
4、配置vsftpd.conf(设置虚拟用户配置项)
vim /etc/vsftpd/vsftpd.conf ,内容如下:
guest_enable=YES #开启虚拟用户
guest_username=ftp #FTP虚拟用户对应的系统用户
pam_service_name=vsftpd.pam #PAM认证文件
5、创建虚拟用户目录
根据前面提示我们知道,ftpuser1和ftpuser2的家目录分别为:
/var/ftp/virtual/ftpuser1和/var/ftp/virtual/ftpuser2 在启动服务之前,我们先创建这两个目录
mkdir /var/ftp/virtual/ftpuser1 -p
mkdir /var/ftp/virtual/ftpuser2 -p
chown ftp.ftp /var/ftp/virtual/ftpuser1
chown ftp.ftp /var/ftp/virtual/ftpuser2
6、按照配置文件启动服务
systemctl restart vsftpd
7、用虚拟用户测试虚拟权限
ftp -u ftpuser1 192.168.1.114