FTP简介:
文件传输协议(File Transfer Protocol,FTP),基于该协议FTP客户端与服务端可以实现共享文件、上传文件、下载文件。 FTP 基于TCP协议生成一个虚拟的连接,主要用于控制FTP连接信息,同时再生成一个单独的TCP连接用于FTP数据传输。用户可以通过客户端向FTP服务器端上传、下载、删除文件,FTP服务器端可以同时提供给多人共享使用。
FTP服务是Client/Server(简称C/S)模式,基于FTP协议实现FTP文件对外共享及传输的软件称之为FTP服务器源端,客户端程序基于FTP协议,则称之为FTP客户端,FTP客户端可以向FTP服务器上传、下载文件。
传输模式:
FTP基于C/S模式,FTP客户端与服务器端有两种传输模式,分别是FTP主动模式、FTP被动模式,主被动模式均是以FTP服务器端为参照。主被动模式如图8-2(a)、8-2(b)所示,主被动模式详细区别如下:
FTP主动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N 1,并发送FTP命令“port N 1”到FTP服务器,FTP服务器以数据端口(20)连接到客户端指定的数据端口(N 1)。
FTP被动模式:客户端从一个任意的端口N(N>1024)连接到FTP服务器的port 21命令端口,客户端开始监听端口N 1,客户端提交 PASV命令,服务器会开启一个任意的端口(P >1024),并发送PORT P命令给客户端。客户端发起从本地端口N 1到服务器的端口P的连接用来传送数据。
vsftpd服务安装:
[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# setenforce 0 [root@localhost ~]# yum -y install vsftpd
匿名用户配置:
[root@localhost ~]# grep -Ev "^$|^#" /etc/vsftpd/vsftpd.conf
代码语言:javascript复制anonymous_enable=YES #开启匿名用户访问
anon_upload_enable=YES #允许匿名用户上传文件
anon_mkdir_write_enable=YES #允许匿名用户创建目录
anon_other_write_enable=YES #允许匿名用户其他写入权限
local_enable=YES #启用本地系统用户访问
write_enable=YES #本地系统用户写入权限
local_umask=022 #本地用户创建文件及目录默认权限掩码
dirmessage_enable=YES #打印目录显示信息,通常用于用户第一次访问目录时,信息提示
xferlog_enable=YES #启用上传/下载日志记录
connect_from_port_20=YES #使用20端口进行数据传输
xferlog_std_format=YES #日志文件将根据xferlog的标准格式写入
listen=NO #Vsftpd不以独立的服务启动,通过Xinetd服务管理
listen_ipv6=YES #启用IPV6监听
pam_service_name=vsftpd #登录FTP服务器,依据/etc/pam.d/vsftpd中内容进行认证
userlist_enable=YES #vsftpd.user_list和ftpusers配置文件里用户禁止访问FTP
tcp_wrappers=YES 设置vsftpd与tcp wrapper结合进行主机的访问控制,Vsftpd服务器检查/etc/hosts.allow 和/etc/hosts.deny中的设置,来决定请求连接的主机,是否允许访问该FTP服务器
[root@localhost ~]# chown -R ftp /var/ftp/pub/ [root@localhost ~]# chmod o w /var/ftp/pub/
重启vsftpd服务,访问测试上传、删除、创建等权限:
ftp默认被动模式,设置为主动模式使用端口方法:
代码语言:javascript复制pasv_enable=YES
pasv_min_port=60000
pasv_max_port=60100
vsftpd虚拟用户配置:
Vsftpd虚拟用户原理:虚拟用户就是没有实际的真实系统用户,而是通过映射到其中一个真实用户以及设置相应的权限来实现访问验证,虚拟用户不能登录Linux系统,从而让系统更加的安全可靠。
1)安装vsftpd虚拟用户需要用到的软件及认证模块:
[root@localhost ~]# yum -y install pam* db4
2)创建虚拟用户临时文件:
[root@localhost ~]# vim /etc/vsftpd/vuser.txt
代码语言:javascript复制ftp001
123456
ftp002
123456
3)生成vsftpd虚拟用户数据库认证文件:
[root@localhost ~]# db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vsftpd_login.db [root@localhost ~]# chmod 600 /etc/vsftpd/vsftpd_login.db
4)配置pam认证文件:
[root@localhost ~]# vim /etc/pam.d/vsftpd
代码语言:javascript复制auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd/vsftpd_login
5)创建系统用户,用于虚拟用户映射使用
[root@localhost ~]# useradd -s /sbin/nologin ftpuser
6)vsftpd.conf主配置文件:
代码语言:javascript复制#global config Vsftpd 2017
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
userlist_enable=YES
tcp_wrappers=YES
#config virtual user FTP
pam_service_name=vsftpd #虚拟用户启用pam认证
guest_enable=YES #启用虚拟用户
guest_username=ftpuser #映射虚拟用户至系统用户ftpuser
user_config_dir=/etc/vsftpd/vsftpd_user_conf #设置虚拟用户配置文件所在目录
virtual_use_local_privs=YES #虚拟用户使用与本地用户相同的权限
7)vsftpd虚拟用户配置文件:
[root@localhost ~]# mkdir -p /etc/vsftpd/vsftpd_user_conf [root@localhost ~]# vim /etc/vsftpd/vsftpd_user_conf/ftp001
代码语言:javascript复制local_root=/home/ftpuser/ftp001 #虚拟用户文件路径
write_enable=YES #允许登录用户写权限
anon_world_readable_only=YES #允许匿名用户下载
anon_upload_enable=YES #允许匿名用户上传权限,只有在write_enable=YES时该参数才生效
anon_mkdir_write_enable=YES #允许匿名用户创建目录,只有在write_enable=YES时该参数才生效
anon_other_write_enable=YES #允许匿名用户其他权限,例如删除、重命名等
9)创建虚拟用户的目录:
[root@localhost ~]# mkdir -p /home/ftpuser/{ftp001,ftp002} [root@localhost ~]# chown -R ftpuser:ftpuser /home/ftpuser
10)重启vsftpd,测试: