一、FTP本质
ftp是一种文件传输协议:用来上传和下载,实现远程共享文件,和统一管理文件工作原理 : 用于互联网上的控制文件的双向传输 是一个应用程序。工作在TCP/IP协议簇的,其传输协议是TCP协议提高文件传输的共享性和可靠性,使用C/S模式的工作方式连接时同时处理服务器和客户端的连接命令和数据传输,FTp将命令和数据分开传输,提高传输效率
二、FTP两种传输模式
文本模式:ASCII模式美国信息交换信息标准码 这种模式传输文件使用ASCII标准字符序列,一般只用于传输文件文件的传输
二进制模式:又称为Binary这种模式不会转换文件中的字符序列,跟适合传输程序图片等非文本文件
三、FTP两种工作模式和开启方式
主动模式:客户端使用随即端口与服务器的21好端口建立控制连接,服务器端主动的使用20好端口向客户端的随机端口建立据连接,经过三次握手完成
被动模式:客户端使用随即端口向服务器的21号端口建立管理连接,服务器使用建立好的管理通道向客户端发送一个随机的端口号,然后客户端随机的向服务器端发过来的端口经过三次握手后建立好这个数据连接
使用两个端口:分别时控制端口和数据端口,控制端口使用21,数据端口主动模式先是20.被动模式下是一个随机的端口号
开启主动模式
connect_from_port_20=no 允许服务器主动模式(从20号端口连接)
pasv_enable=NO ###关闭被动模式
Linux客户机上关闭防火墙执行 passive命令
被动模式需要在主配置文件中打开 默认就是被动模式:
pasv_enable=YES ##开启被动模式,使用被动模式连接,pasv请求
Pasv_min_port=* ##设置被动模式下服务器随即端口的范围的最小值
Pasv_max_port=* ##设置被动模式下服务器随机端口的范围的最大值
四、FTP的三种登录方式
普通本地用户模式:
Local_enable=YES ###允许本地用户访问
Write_enable=YES ##本地用户的科协权限
Local_umask=022 ##本地用户上传文件的权限减去这个umask值
Userlist_deny=YES ##是否禁用user_list列表中的用户账号 若启用必须等于===NO
Userlist_enable=YES ##是否启用user_list列表中的用户账号
黑名单和白名单:ftpusers黑名单文件,存在该文件中的用户无法登陆
User_list 白名单文件,如果设置
userlist_deny=NO Userlist_enable=YES则只允许该列表中的用户登录
若一个用户同时存在两个文件中,黑名单生效,该用户不能登陆
虚拟用户模式:
使用虚拟用户可以将用户的登录名和密码不相同,提高服务器的安全性
第一步:创建文本格式的用户名和密码 奇数行为用户名,偶数行为密码
第二步:建立虚拟FTP用户的数据库文件
第三步:添加虚拟用户的映射账号
第三步:为虚拟用户建立PAM认证文件
第四步:修改配置文件添加虚拟用户的支持
Local_enable=YES #需要映射本地用户所以启用
Write_enable=YES ##启用上传写入权限
Guest_enable=YES ##开启虚拟用户
Anon_umask=022 ### 指定上次权限掩码
Guest_username=* ###指定映射的本地系统用户
Pam_serrivce_name=vsftpd.vu ##指定新的pam认证文件
User_config_dir=/*/*/*/ ###为不同的虚拟用户设置不同的权限
匿名用户模式:
anonymous_enabled=YES ##允许匿名访问模式。默认开的
Anonumask=022 ##匿名用户上传文件或目录权限,所上传的文件或目录的权限减去022文件默认权限是644 目录的755
Anon_upload_enable=YES ##允许匿名用户上传文件
Anon_mkdir_write_enable=YES ##允许匿名用户创建目录
Anon_other_ write_enable=YES ##允许匿名用户有其他的写入权限 (删除或者修改)
五、FTP服务实验配置
1、安装
[root@localhost ~]# systemctl stop firewalld //关闭防火墙
[root@localhost ~]# setenforce 0 //关闭内核
[root@localhost ~]# yum -y install vsftp //下载服务器端的ftp程序
[root@localhost ~]# systemctl start vsftpd //启动ftp服务
打开一个客户端,安装ftp客户端软件,并访问测试
[root@localhost ~]# yum -y install ftp
[root@localhost ~]# ftp 192.168.10.101
此时可以直接使用匿名帐户用客户端访问服务器端的ftp服务,匿名帐户名称默认为“ftp”没有密码。但是只有下载权,并没有上传的权力
2、查看vsftpd的配置文件
[root@localhost ~]# grep -v "#" /etc/vsftpd/vsftpd.conf
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
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
备注:
以下语句可以将#号开头的行删掉
[root@localhost ~]# sed -i '/^#/d' /etc/vsftpd/vsftpd.conf
3、匿名访问FTP服务
1:准备匿名FTP访问目录
[root@localhost ~]# touch /var/ftp/test //随便创建一个文件
[root@localhost ~]# chown ftp /var/ftp/pub //改变文件的属主
[root@localhost ~]# chmod 755 /var/ftp/pub //改变文件权限
2:开放匿名用户
添加如下红色内容:
anonymous_enable=YES
anon_umask=022
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
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
备注:
anonymous_enable=YES #是否启用匿名用户
no_anon_password=YES #匿名用户login时不询问口令
anon_upload_enable=(yes/no); #控制匿名用户对文件(非目录)上传权限
anon_world_readable_only=(yes/no); #控制匿名用户对文件的下载权限
anon_mkdir_write_enable=(yes/no); #控制匿名用户对文件夹的创建权限
anon_other_write_enable=(yes/no); #控制匿名用户对文件和文件夹的删除和重命名
[root@localhost ~]# systemctl restart vsftpd //重新启动“ftp”服务(每次修改配置文件都要重启服务以便及时更新修改内容)
3:测试匿名FTP服务器
(1)测试访问
[root@localhost ~]# ftp 192.168.10.101 //使用ftp+服务器IP
Connected to 192.168.10.101 (192.168.10.101).
220 (vsFTPd 3.0.2)
Name (192.168.10.101:root): ftp //匿名帐户,默认是ftp
331 Please specify the password.
Password: //无需输入密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir //查看文件信息
227 Entering Passive Mode (192,168,10,101,221,180).
150 Here comes the directory listing.
drwxr-xr-x 2 14 0 6 Nov 05 2016 pub
-rw-r--r-- 1 0 0 0 May 20 02:14 test
-rw-r--r-- 1 0 0 0 May 20 02:14 text
226 Directory send OK.
ftp> cd /opt //进入/opt
Local directory now /opt
ftp> get test //下载创建的文件
local: test remote: test
227 Entering Passive Mode (192,168,10,101,141,88).
150 Opening BINARY mode data connection for test (0 bytes).
226 Transfer complete.
ftp> lcd /root
Local directory now /root
ftp> cd pub
250 Directory successfully changed.
ftp> put initial-setup-ks.cfg //上传文件
local: initial-setup-ks.cfg remote: initial-setup-ks.cfg
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
1638 bytes sent in 0.00327 secs (501.22 Kbytes/sec)
ftp> quit //退出ftp
221 Goodbye.
4、用户验证的FTP服务
(1)本地用户验证配置
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_umask=022
#anon_upload_enable=yes
#anon_mkdir_write_enable=yes
#anon_other_write_enable=yes
local_enable=YES
write_enable=YES
local_umask=022
chroot_local_user=yes
allow_writeable_chroot=yes
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# useradd zhangsan //创建账户
[root@localhost ~]# passwd zhangsan //设置账户密码
(2)客户端测试
[root@localhost ~]# touch aaa
[root@localhost ~]# ftp 192.168.10.101
Connected to 192.168.10.101 (192.168.10.101).
220 (vsFTPd 3.0.2)
Name (192.168.10.101:root): zhangsan
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> put aaa
local: aaa remote: aaa
227 Entering Passive Mode (192,168,10,101,114,218).
150 Ok to send data.
226 Transfer complete.
ftp> quit
221 Goodbye.
(3)开启root访问权限
默认root等内置的账户不许访问FTP服务
[root@localhost ~]# vi /etc/vsftpd/user_list
在root账号前价格注释符
#root
[root@localhost ~]# vi /etc/vsftpd/ftpusers
在root账号前价格注释符
#root
客户端用root账号登录测试
(4)使用user_list用户列表
[root@localhost ~]# vi /etc/vsftpd/user_list
添加几个账号
zhangsan
lisi
wangwu
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_umask=022
#anon_upload_enable=yes
#anon_mkdir_write_enable=yes
#anon_other_write_enable=yes
local_enable=YES
write_enable=YES
local_umask=022
chroot_local_user=yes
allow_writeable_chroot=yes
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=no
tcp_wrappers=YES
[root@localhost ~]# systemctl restart vsftpd
在客户端用列表中的账号登录(登录成功)
用列表中不存在的账号登录(无法登录)
5、其他配置
(1)修改监听地址与端口
[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf
listen=YES
listen_address=192.168.10.101 \\添加监听地址
listen_port=2121 \\添加监听端口
listen_ipv6=no
[root@localhost ~]# systemctl restart vsftpd
(2)客户端测试
[root@localhost ~]# ftp 192.168.10.101 2121
(3)使用ftp的被动模式
pasv_enable=yes
pasv_min_port=24500
pasv_max_port=24600
[root@localhost ~]# systemctl restart vsftpd
注意:
ftp默认使用被动模式
如果用被动模式,是客户端向服务器发起数据连接,要保证服务器的防火墙是关闭的
如果用主动模式,是服务器向客户端发起数据连接,要保证客户端的防火墙是关闭的