文件传输协议—-FTP

随笔2个月前发布 林鹿
37 0 0

合集 – Linux网络(7)
1.多网卡设置—-bond05-042.自动配置网络—-DHCP05-043.域名解析实际应用 —-DNS05-044.SSH协议实际应用05-045.建立yum仓库03-05
6.文件传输协议—-FTP05-057.PXE批量安装服务器05-06

收起

工作原理介绍

文件传输协议:File Transfer Protocol 早期的三个应用级协议之一,基于C/S结构

数据传输格式:二进制(默认)和文本

双通道协议:命令和数据连接 21 命令端口(权限,认证) 20数据端口(真实传数据)

可以登录用户
1匿名用户:anonymous 或者 ftp

2系统用户:在 /etc/passwd 中

3虚拟用户:只可以用来登录ftp

两种模式:从服务器角度

主动(PORT style):服务器主动连接客户端

命令(控制):客户端:随机端口号 —> 服务器:21/tcp

数据:客户端:随机随机端口号 <—服务器:20/tcp

[root@rule ftp]# ss -natp |grep vsftpd
LISTEN     0      32          :::21                      :::*                   users:(("vsftpd",pid=1070,fd=4))
ESTAB      0      3950144 ::ffff:172.16.87.40:20                 ::ffff:172.16.87.10:56395               users:(("vsftpd",pid=2425,fd=7))
ESTAB      0      0      ::ffff:172.16.87.40:21                 ::ffff:172.16.87.10:35866               users:(("vsftpd",pid=2425,fd=2),("vsftpd",pid=2425,fd=1),("vsftpd",pid=2425,fd=0),("vsftpd",pid=2423,fd=2),("vsftpd",pid=2423,fd=1),("vsftpd",pid=2423,fd=0))

被动(PASV style):服务器被动等待客户端连接

命令(控制):客户端:随机端口号 —> 服务器:21/tcp

数据:客户端:随机端口号 —> 服务器:随机端口号/tcp

#Linux默认被动模式
[root@rule ftp]# ss -natp |grep vsftpd
LISTEN     0      1      ::ffff:172.16.87.40:54639                   :::*                   users:(("vsftpd",pid=2465,fd=6))
LISTEN     0      32          :::21                      :::*                   users:(("vsftpd",pid=1070,fd=4))
ESTAB      0      1689368 ::ffff:172.16.87.40:54639              ::ffff:172.16.87.10:36630               users:(("vsftpd",pid=2467,fd=7))
ESTAB      0      0      ::ffff:172.16.87.40:21                 ::ffff:172.16.87.10:35870               users:(("vsftpd",pid=2467,fd=2),("vsftpd",pid=2467,fd=1),("vsftpd",pid=2467,fd=0),("vsftpd",pid=2465,fd=2),("vsftpd",pid=2465,fd=1),("vsftpd",pid=2465,fd=0))

基础操作

安装服务端

[root@rule ~]# yum install vsftpd -y ----安装ftp服务器
[root@rule ~]# systemctl start vsftpd ----开启服务

客户端连接服务端

[root@saber ~]# ftp 172.16.87.40
#            ftp客户端工具 服务端地址
Connected to 172.16.87.40 (172.16.87.40).
220 (vsFTPd 3.0.2)
Name (172.16.87.40:root): ftp ----此处填写用户名,默认使用ftp或者匿名用户
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

登录成功

#可以使用help  查看帮助
ftp> help   

#可以使用 ls  查看文件列表
ftp> ls
227 Entering Passive Mode (172,16,87,40,33,13). ----Passive消极被动默认使用被动模式
150 Here comes the directory listing.
drwxr-xr-x    2 0        0               6 Jun 09  2021 pub
226 Directory send OK.

#可以人为指定被动主动
ftp> passive
Passive mode off. ----关闭被动变成主动

#路径
ftp> pwd
257 "/" ----这个/为服务器的/var/ftp/

#下载
ftp> get bigfile
local: bigfile remote: bigfile
227 Entering Passive Mode (172,16,87,40,244,76).
150 Opening BINARY mode data connection for bigfile (1073741824 bytes).
226 Transfer complete.
1073741824 bytes received in 3.35 secs (320466.78 Kbytes/sec)

vsftpd服务常见配置

修改默认命令端口

listen_port=2121 默认值为21

例子:

服务端:修改 默认命令端口号

[root@rule pub]#vim /etc/vsftpd/vsftpd.conf
#随便一行插入
listen_port=9527
[root@rule pub]#systemctl restart vsftpd
#重启服务
[root@rule pub]#ss -natp |grep vsftpd
#查看端口

客户端:连接时需要指明 端口号

[root@rule ~]#ftp 172.16.87.40 9527
#不需要带-p无效

主动模式端口

connect_from_port_20=YES 主动模式端口为20
ftp_data_port=20 (默认) 指定主动模式的端口

被动模式端口

pasv_min_port=6000   0为随机分配,端口范围会影响客户端的并发数
pasv_max_port=6010

使用当地时间

use_localtime=YES 使用当地时间(默认为NO,使用GMT)

匿名用户登录

anonymous_enable=YES 支持匿名用户,CentOS8 默认不允许匿名
no_anon_password=YES 匿名用户略过口令检查 , 默认NO

匿名用户上传

anon_upload_enable=YES 匿名上传,注意:文件系统权限
anon_mkdir_write_enable=YES 匿名建目录

chmod   777   /var/ftp/pub
#需要开启文件系统访问的权限,不能给FTP根目录写权限,只能级子目录写权限

匿名用户 下载 删除文件

在 vsftpd 软件中 只可以 下载有 读权限的文件, 没有读权限的文件时不可以直接下载的需要修改下面的选项

anon_world_readable_only=NO  只能下载全部读的文件, 默认YES
anon_umask=0333              指定匿名上传文件的umask,默认077,注意:0333中的0不能省略
anon_other_write_enable=YES  可删除和修改上传的文件,默认NO

例子:可以下载上传上去的文件

[root@rule pub]#vim /etc/vsftpd/vsftpd.conf
anon_world_readable_only=NO
anon_umask=0333          

可以删除文件

[root@rule pub]#vim /etc/vsftpd/vsftpd.conf
anon_other_write_enable=YES

ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (172,16,87,40,22,162).
150 Here comes the directory listing.
-rwxr-xr-x    1 0        0               0 May 05 15:46 123.txt
226 Directory send OK.
ftp> delete 123.txt
250 Delete operation successful.
ftp> ls
227 Entering Passive Mode (172,16,87,40,120,81).
150 Here comes the directory listing.
226 Directory send OK.

指定匿名用户的上传文件的默认的所有者和权限

匿名用户上传文件默认的所有者是ftp 用户 是可以修改的

chown_uploads=YES        #默认NO
chown_username=saber
chown_upload_mode=0644

Linux系统用户

local_enable=YES 是否允许linux用户登录
write_enable=YES 允许linux用户上传文件
local_umask=022 指定系统用户上传文件的默认权限对应umask

例:系统用户登录:普通用户登录默认是在系统用户的家目录

[root@saber ~]# ftp 172.16.87.40
Connected to 172.16.87.40 (172.16.87.40).
220 (vsFTPd 3.0.2)
Name (172.16.87.40:root): rule
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/home/rule"


###默认是可以上传下载
注意目录


#####也可以 去别的目录下载####
权限控制不是很安全

将所有系统用户映射为指定的guest用户

guest_enable=YES 						所有系统用户都映射成guest用户
guest_username=ftp   					配合上面选项才生效,指定guest用户
local_root=/ftproot 					指定guest用户登录所在目录,但不影响匿名用户的登录目录
user_config_dir=/etc/vsftpd/conf.d/ 	每个用户独立的配置文件目录



guest_enable=YES 
guest_username=ftp  
local_root=/ftproot 
user_config_dir=/etc/vsftpd/conf.d/ 

例子:控制 系统用户等信息

[root@rule pub]#vim /etc/vsftpd/vsftpd.conf
#最后加入   复制注意空格
guest_enable=YES 
guest_username=ftp   
#local_root=/ftproot    可以注释此行,默认所有用户都在  ftp用户的家目录

[root@saber ~]# ftp 172.16.87.40
Connected to 172.16.87.40 (172.16.87.40).
220 (vsFTPd 3.0.2)
Name (172.16.87.40:root): rule
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"

例子: 让每个用户拥有独有配置

[root@rule pub]#vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/conf.d/ 
#可以自由指定

针对 saber acher 用户

[root@rule data]#mkdir -p /etc/vsftpd/conf.d
#先建立好配置文件夹

#编写子配置文件
[root@rule data]#vim    /etc/vsftpd/conf.d/saber
local_root=/data/saber
[root@rule data]#vim   /etc/vsftpd/conf.d/acher
local_root=/data/acher


[root@rule data]#mkdir -p /data/{saber,acher}
[root@rule data]#touch  /data/saber/saber.txt
[root@rule data]#touch  /data/acher/acher.txt
#建立两个文件测试使用
#再次登录就不能乱跑了

禁锢系统用户

禁锢所有系统用户在家目录中

chroot_local_user=YES #禁锢系统用户,默认NO,即不禁锢

禁锢用户开启白名单和黑名单

chroot_list_enable=YES     #默认是NO
chroot_list_file=/etc/vsftpd/chroot_list   #默认值
  
当chroot_local_user=YES和chroot_list_enable=YES时,则chroot_list中用户不禁锢,即白名单
当chroot_local_user=NO和chroot_list_enable=YES时, 则chroot_list中用户禁锢,即黑名单
© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...