FTP简介
- FTP端口号
FTP使用20和21端口,FTP服务器使用21端口来等待控制连接建立请求,并通过控制连接传送命令及命令的响应。控制连接与数据连接相互独立,首先建立控制连接,通过身份验证后才会建立数据连接。数据连接是传输文件时临时建立的,服务器使用20端口建立数据连接并传送数据。数据连接存在时,控制连接一定是存在的。 FTP传输模式
FTP基于C/S模式,服务端与客户端传输数据有两种模式:主动模式和被动模式,主被动模式都是在建立数据链接时相对于服务器而言的。主动模式:
FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,并进行账户密码验证。验证通过后开放N+1端口进行监听,并向服务器发送一个PORT N+1命令,告诉服务器服务器现在使用主动模式。服务器接收到命令后会有用其本地20端口连接客户端的N+1端口进行数据传输。主动模式数控制接与数据连接方向是相反的。
被动模式:FTP客户端随机开启一个大于1024的端口N向服务器的21端口发起连接,并进行账户密码验证。验证通过后开放N+1端口进行监听,并发送一个PASV命令,告诉服务器现在使用被动模式,服务器接到命令后会随机开放一个大于1024的端口P,并发送命令PORT P命令给客户端,客户端使用自己的N+1端口连接服务器的端口P。被动模式控制连接和数据连接方向是一致的。
应用场景:
主动模式的FTP通常用在客户端访问处于防火墙内部的FTP服务器的情况。
被动模式的FTP通常用在处于防火墙之后的FTP客户端访问外部的FTP服务器的情况。
因为防火墙默认会关闭所有端口,但是在进行数据连接建立时需要开放随机端口,所以在防火墙内部的主机或服务器会因为端口被防火墙关闭而造成建立连接失败。FTP三种用户
匿名用户:anonymous或ftp
本地用户:真实用户,帐号名称、密码等信息保存在passwd、shadow文件中
虚拟用户:使用独立的账号/密码数据文件
FTP安装配置
安装
yum install vsftpd* -y
systemctl start vsftp.service
出现问题:
原因:使用被动模式,服务端需要开启随机端口,而服务端端口又被防火墙关闭,所以导致连接失败。
解决:
打开控制面板->Internet选项->高级->FTP被动传输模式取消配置匿名用户
默认匿名用户不可以上传和下载文件,创建文件的,修改配置文件可对匿名用户权限进行修改。
1.修改配置:vim /etc/vsftpd/vsftpd.conf
设置如下选项:
anonymous_enable=YES :允许匿名登陆 anon_upload_enable=YES :允许匿名用户上传下载 anon_mkdir_write_enable=YES :允许匿名用户创建目录 anon_other_write_enable=YES :允许匿名用户写入其他权限
2.修改/var/ftp/pub目录权限
chown -R ftp /var/ftp/pub/ chmod 755 /var/ftp/pub/
3.再次使用匿名用户上传下载或创建文件
4.检查是否上传成功
5.修改匿名用户和本地用户根目录:local_root=/var/www/html chroot_local_user=YES 将用户活动范围限制在主目录 anon_root=/var/www/html
配置本地用户
1.本地创建用户:useradd ftpuser1 -s /sbin/nologin
echo 123456 | passwd –stdin ftpuser1修改配置文件:
local_enable=YES anonymous_enable=YES
2.重启服务:
systemctl restart vsftpd.service
3.验证:
ftp本地用户默认登陆后进入用户的家目录。ftp虚拟用户配置
虚拟用户在FTP服务器上并不真实存在,而是映射到某一个系统真实用户及设置相应的权限来实现访问验证。
1.安装虚拟用户认证所需模块及软件:
yum install db4 db4_utils2.创建虚拟用户文件
touch ftpuser.txt
3.在文件内添加虚拟用户
ftpuser1 123456 ftpuser2 123456
奇数行写账户,偶数行写密码
4.生成虚拟用户认证数据库文件db_load -T -t hash -f /etc/vsftpd/ftpuser.txt /etc/vsftpd/vsftpd_login.db chmod 600 /etc/vsftpd/vsftpd_login.db
5.配置PAM认证文件:
vim /etc/pam.d/vsftpd 把其他行注释掉添加如下配置 auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login account required pamuserdb.so db=/etc/vsftpd/vsftpd_login
6.修改配置文件:
pam_service_name=vsftpd guest_enable=YES guest_username=jiangpeisi user_config_dir=/etc/vsftpd/vsftpd_guestuser_conf virtual_use_local_privs=YES 匿名用户具有与本地用户相同的权限 chroot_local_user=YES chroot_list_enable=YES allow_writeable_chroot=YES 如果使用chroot,需要设置此项 chroot_list_file=/etc/vsftpd/chroot_list
7.创建虚拟用户配置文件
mkdir /etc/vsftpd/vsftpd_guestuser_conf/ touch /etc/vsftpd/vsftpd_guestuser_conf/ ftpguest{1,2}
此处文件名必须与虚拟用户同名
配置ftpguest1local_root=/home/jiangpeisi/ftpguest1 write_enable=YES anon_world_readable_only=YES anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES
ftpguest2与ftpguest2类似
8.创建虚拟用户家目录mkdir /home/jiangpeisi/ftpguest{1,2} chown -R jiangpeisi:jiangpeisi /home/jiangpeisi/
注:2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。