小阿轩yx-FTP文件传输服务
协议
- 用来上传和下载
- 实现远程共享文件
- 统一管理文件
原理
- 控制文件的双向传输,是一个应用程序
- 工作在TCP/IP协议簇的
- 提高文件传输的共享性和可靠性
- 使用C/S模式的工作方式连接同时处理服务器和客户端的连接命令和数据传输
- 将命令和数据分开传输,提高传输效率
端口:21
(注:端口号通常是21,主动模式下20,被动模式下随机端口)
连接方式两个阶段
- 管理连接
- 数据连接
管理连接:客户端使用随机端口(要>1024端口,高位端口)---> 连接服务器的21端口
数据连接
主动模式:服务器会使用(20端口)主动向客户端(随机端口,高位端口)发起连接(服务器连客户端)
被动模式:服务器(随机端口)等待客户端(随机端口)向自己发起连接(客户端连服务器)
区别
- 主动模式客户端的防火墙会拦截服务器发起的连接
- 被动模式服务器需要处理防火墙(要么关闭、要么添加策略)
两种传输模式
文本模式
ASCII模式美国信息交换信息标准码,传输文件使用 ASCII 标准字符序列,一般只用于传输文件的传输
二进制模式
又称为 Binary 这种模式不会转换文件中的字符序列,跟适合传输程序图片等非文本文件
Vsftpd可支持最大 15000 并发连接数
FTP两种模式
主动模式
客户端使用随机端口与服务器的21号端口建立控制连接,服务器端主动的使用20号端口向客户端的随机端口建立据连接,经过三次握手完成
被动模式
客户端使用随机端口向服务器的21号端口建立管理连接,服务器使用建立好的管理通道向客户端发送一个随机的端口号,然后客户端随机的向服务器端发过来的端口经过三次握手后建立好这个数据连接
使用两个端口
-
控制端口数据端口
-
FTP服务
首先关闭防火墙
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl stop firewalld
安装vsftpd
[root@localhost ~]# yum -y install vsftpd
[root@localhost ~]# systemctl start vsftpd
开启一个客户端,在客户端安装ftp软件并测试
[root@localhost ~]# yum -y install ftp
[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):ftp
331 Please specify the password.
Password: # 这里直接按Enter就行
230 Login successful. # 看到这个就是登录成功了
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> exit # 这里退出可以用exit、quit、bye
221 Goodbye.
开启主动模式并关闭被动模式
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
# 允许服务器主动模式,用20端口连接
connect_from_port_20=YES
# 关闭被动模式
pasv enable=NO
查看vsftpd的配置文件
[root@localhost ~]# vim /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=YESpam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
将#号开头的行删掉
[root@localhost ~]# sed -i '/^#/d' /etc/vsftpd/vsftpd.conf
三种用户登录方式
本地用户模式
- localhost_enable=YES //允许本地用户访问
- Write_enable=YES //本地用户的写入权限
- Local_umask=002 //本地用户上传文件的权限减去这个umask值
- Userlist_deny=YES //是否禁用user_list列表中的用户账号,若启用必须等于==NO
- Userlist_enable=YES //是否启用user_list列表中的用户无法登录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=/*/*/*/ ###为不同的虚拟用户设置不同的权限
匿名用户
匿名访问 FTP 服务
- FTP无需密码直接登录(有时账号也不需要)
- 妥善设置权限不要太高,一般仅允许下载
准备匿名 FTP 访问目录
[root@localhost ~]# touch /var/ftp/test
[root@localhost ~]# chown ftp /var/ftp/pub
[root@localhost ~]# chmod 755 /var/ftp/pub
[root@localhost ~]# cd/var/ftp/pub
开放匿名用户
添加以下内容
[root@localhost ftp]# vim /etc/vsftpd/vsftpd.conf
anon_umask=022
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_write_enable=yes
重启服务
[root@localhost ~]# systemctl restart vsftpd
找出运行在指定端口的进程
[root@localhost ~]# netstat -anpt | grep vsftpd
测试匿名 FTP 服务器
测试访问
[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): 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> lcd /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
221 Goodbye.
wget测试
[root@localhost ~]# wget ftp://192.168.10.101/pub/111
--2021-11-16 09:50:15-- ftp://192.168.10.101/pub/111=> “111”
正在连接 192.168.10.101:21... 已连接。
正在以 anonymous 登录 ... 登录成功!
==> SYST ... 完成。 ==> PWD ... 完成。
==> TYPE I ... 完成。 ==> CWD (1) /pub ... 完成。
==> SIZE 111 ... 完成。
==> PASV ... 完成。 ==> RETR 111 ... 完成。[ <=> ] 0 --.-K/s 用时 0s 2021-11-16 09:50:15 (0.00 B/s) - “111” 已保存 [0]
用户验证的 FTP 服务
本地用户验证配置
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
#anon_upload_enable=yes
#anon_mkdir_write_enable=yes
#anon_other_write_enable=yes
......省略部分内容
chroot_local_user=yes
allow_writeable_chroot=yes
listen=NO
listen_ipv6=YES
开启root访问权限
[root@localhost ~]# vim /etc/vsftpd/user_list
# 在root账号前价格注释符
#root
编辑配置文件
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_umask=022
#anon_upload_enable=yes
#anon_mkdir_write_enable=yes
#anon_other_write_enable=yes
重启服务
[root@localhost ~]# systemctl restart vsftpd
修改监听地址与端口
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
listen=YES
listen_address=192.168.10.101 # 添加监听地址
listen_port=2121 #添加监听端口
listen_ipv6=no
[root@localhost ~]# ftp 192.168.10.101 2121
# 使用ftp的被动模式
pasv_enable=yes
pasv_min_port=24500
pasv_max_port=24600
重启服务
[root@localhost ~]# systemctl restart vsftpd
客户端测试
[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.
扩展
修改匿名用户的目录
[root@localhost ~]# mkdir -p /opt/ftp/myftp
[root@localhost ~]# chown ftp /opt/ftp/myftp
修改配置文件
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
# 添加以下字段:
anon_root=/opt/ftp
修改系统用户的根目录
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
# 添加以下字段:
#anon_root=/opt/ftp
local_root=/opt/ftp
授权用户
- 识别账号并授权
- 比匿名用户高级
- 账号密码:密码直接敲回车,不用输入密码
ftp服务分为
- 服务器端(vsftpd)
- 客户端(ftp)
文件:666-022
目录:777-022
(注:022是反掩码)
xinetd超级服务:代替ftp类的服务,监听其对应的端口,如果有应用访问这个端口,立即唤醒ftp这个程序