时间:2022-12-10来源:www.pcxitongcheng.com作者:电脑系统城
FTP的工作原理:
FTP:File Transfer Protocol ,文件传输协议。属于NAS存储的一种协议,基于CS结构。
ftp采用的是双端口模式,分为命令端口和数据端口,命令端口对应命令通道,数据端口对应数据通道。
命令端口:FTP服务器的命令端口默认是tcp/21
数据端口:随机
两种工作模式:主动模式和被动模式
主动模式:FTP服务器主动连接客户端,这个时候FTP服务器的数据端口使用的是20端口。
被动模式:客户端主动连接FTP服务器,这时候FTP服务器的数据端口是随机的。
FTP的工作过程:
1.服务端开启对21端口的监听。
2.客户端发起对服务端的连接请求,通过服务器的21端口连接到服务器。此时建立起了命令通道,命令通道用于传输和通信相关的一些指令。
3.建立数据通道
如果是主动模式:服务端会使用20端口主动连客户端的一个随机端口。
如果是被动模式:客户端使用一个随机端口连接服务端的一个随机端口
4.使用数据通道进行数据的传输。
探测端口是否打开的方法:
telnet工具:
例如:查看22端口是否开启
1 2 3 4 5 6 7 8 |
#格式:telnet host port #如果能响应则端口就是打开的 #如果telnet能响应则端口就是打开的 [root@CentOS8 ~] # telnet 10.0.0.12 22 Trying 10.0.0.12... Connected to 10.0.0.12. Escape character is '^]' . SSH-2.0-OpenSSH_8.0 |
nmap工具:
1 2 3 4 5 6 7 8 9 10 |
[root@HAproxy ~] # nmap 10.0.0.66 -p 21 Starting Nmap 7.70 ( https: //nmap .org ) at 2022-12-08 13:37 CST Nmap scan report for 10.0.0.66 Host is up (0.00033s latency). PORT STATE SERVICE 21 /tcp open ftp MAC Address: 00:0C:29:29:03:AF (VMware) Nmap done : 1 IP address (1 host up) scanned in 0.53 seconds |
实现FTP的相关软件:
windows中的相关软件:Filezilla、IIS
Filezilla官网: https://filezilla-project.org/index.php
linux中的相关软件:
服务端:vsftpd、Wu-ftpd等
vsftpd官网: https://security.appspot.com/vsftpd.html
客户端:ftp、wget、curl等
性能好、下载速度快、单机可支持15k并发量
VSFTP的安装和配置:
ubuntu安装vsftpd:
1 2 3 4 5 |
[root@HAproxy vsftpd] # apt install vsftpd -y # 说明:vsftpd搭建的ftp服务器默认只允许匿名用户连接 匿名用户包括:ftp、anonmous。 # ubuntu1804 默认不允许匿名 |
访问ftp服务器的三种方式:
1. 匿名账号访问:ftp或anonymous
2. FTP服务器的本地账号访问:例如linux里面的root等用户账号
3. 虚拟账号访问:
虚拟账号:操作系统中不存在的账号,专用于对应服务的账号。
例如登录mysql使用的账号也是虚拟账号
FTP服务器的基础配置:
配置文件格式:option=value # 注意:= 前后不要有空格
端口修改:
局域网内使用,端口一般不用修改
FTP服务器默认端口修改:
1 2 |
# 默认客户端发起对服务端的连接请求,通过服务器的21端口连接到服务器 listen_port=2121 # 指定ftp服务器的端口是2121 |
FTP服务器主动模式数据通道端口修改:
1 2 3 |
# 更改数据通道主动模式服务端的端口:一般不用修改 connect_from_port_20=YES ftp_data_port=20 (默认) # 指定主动模式的端口 |
FTP服务器被动模式的端口范围:
1 2 3 4 |
# 设置服务端被动模式的端口范围: 被动模式:客户端主动连服务端 服务器端的数据通道端口随机 # 服务端被动模式的端口范围一般不用修改 pasv_min_port=6000 # 0为随机分配,端口范围会影响客户端的并发数 pasv_max_port=6010 # 表示被动模式端口范围是6000-6010 一共11个端口可用 |
注意:
1 2 3 |
# 使用linux的客户端工具连接ftp服务端时:客户端默认使用被动模式 例如:ftp # 使用windows的客户端工具连接ftp服务端时:客户端默认使用主动模式 例如:Filezilla |
FTP服务器的时间设置:
1 2 3 |
# 设置ftp服务器的时间为本地时间:(一般不用修改。有些客户端能自动校准时间) use_localtime=YES # 使用当地时间(默认为NO,使用GMT) |
FTP服务器匿名用户的相关设置
FTP服务器默认只允许匿名用户登录,匿名用户包括ftp或anonymous。
匿名用户:在客户机上不存在的用户叫做匿名用户,匿名用户是单独为特定服务效力的用户。例如FTP服务器的ftp用户,mysql的root用户等都是匿名用户。
1 2 3 4 5 |
# 设置允许匿名用户登录 centos7默认就允许匿名用户登录 anonymous_enable=YES # 支持匿名用户,默认不允许匿名 # 设置允许匿名用户使用空密码登录。 no_anon_password=YES # 匿名用户略过口令检查 , 默认NO,表示不输入匿名用户的密码进行登录 |
匿名用户权限设置
1 2 3 4 5 |
# 设置匿名用户能上传文件到FTP服务器 anon_upload_enable=YES # 允许匿名上传,注意:文件系统权限 # 设置匿名用户能在FTP服务器上创建目录文件 anon_mkdir_write_enable=YES #允许匿名创建文件夹 |
说明:
1 2 3 4 5 |
# 跨网络传输数据需要注意的问题: # (1)服务自身:服务本身是否允许 # (2)文件系统的权限:是否具备文件系统的写权限 例如:虽然开启了允许匿名用户上传文件,但是文件对这个用户没有写权限,照样上传不上去 |
说明:设置文件权限的时候,不能给用户的根目录写权限,只能给子目录写权限,否则连接的时候报如下错误
1 2 3 |
500 OOPS: vsftpd: refusing to run with writable root inside chroot() Login failed. 421 Service not available, remote server has closed connection |
匿名用户上传的文件属性设置
1 2 3 4 5 6 |
# 设置匿名用户的上传文件的默认的所有者和权限 chown_uploads=YES # 默认NO YES表示允许修改上传文件的权限和所有者 chown_username=wang # 指定匿名用户上传文件的文件所有者(如果不指定,文件的属主就是这个匿名用户) chown_upload_mode=0644 # 指定上传文件的文件权限 |
例如:不设置匿名用户上传的文件属性
1 2 3 4 5 6 |
#文件的属主就是这个匿名用户 root@ubuntu1804: /srv/ftp/tmp # ll -rw------- 1 ftp ftp 1659 Dec 7 21:37 anaconda-ks.cfg -rw------- 1 ftp ftp 258449 Dec 7 21:20 '' $ '\265\347\327' 'Ӻ' $ '\317' 'ͬ.pdf' -rw------- 1 ftp ftp 77703 Dec 7 21:20 ZKZ_4224961_20201023210611127.pdf -rw------- 1 ftp ftp 247706 Dec 7 21:30 xxxxxx.pdf' |
下载
默认下载FTP服务器上的文件,只有所有人都具有读权限的文件才能下载。
1 2 3 4 5 |
# 方法一: anon_world_readable_only=NO # 只能下载全部读的文件, 默认YES,表示只有所有人都具有读权限的文件才能下载 # 方法二:设置上传文件的默认权限 anon_umask=0333 # 指定匿名上传文件的umask,默认077,注意:0333中的0不能省略 (777-333=444) |
删除和修改
1 2 |
# 默认情况是传上去了就不能删除了 anon_other_write_enable=YES # 可删除和修改上传的文件,默认NO ,改为yes |
使用FTP服务器的系统用户登录FTP服务器相关设置
使用FTP服务器上面的系统用户进行登录。
1 2 3 4 5 6 |
# 设置允许系统用户登录ftp服务器并上传文件: local_enable=YES # 是否允许本地用户登录,YES表示允许 write_enable=YES # 是否允许本地用户上传文件,YES表示允许 local_umask=022 # 指定系统用户上传文件的默认权限对应umask |
系统用户的相关权限设置
1 2 3 4 5 |
local_enable=YES # 是否允许本地用户登录,YES表示允许 write_enable=YES # 是否允许本地用户上传文件,YES表示允许 local_umask=022 # 指定系统用户上传文件的默认权限对应umask |
FTP服务器的虚拟用户设置
使用系统用户登录FTP服务器的时候,统一将所有系统用户都映射成某一个guest用户。
可以映射为任何一个用户,但这个用户必须要在FTP服务器上面存在才行。不一定是ftp这个用户,可以映射成任何一个系统账号。
1 2 3 4 5 6 7 8 |
guest_enable=YES # 所有系统用户都映射成某一个guest用户 guest_username= ftp # 配合上面选项才生效,指定guest用户 local_root= /ftproot # 指定guest账号登录进来映射的目录 所有的操作系统用户登录进来都是这个目录(如果不指定就在guest_username这个用户的家目录里面) #设置每个用户都拥有独立的配置 user_config_dir= /etc/vsftpd/conf .d/ # 每个用户独立的配置文件目录 这里可以针对不同的用户放不同的配置 |
禁锢设置
禁锢所有系统用户在家目录中,不能cd到其它目录。因为使用系统用户登录以后,默认能随便切换到其它目录里面去。
1 2 3 |
#不允许用户随便切换目录,只能在家目录中 chroot_local_user=YES #禁锢系统用户,默认NO,即不禁锢 # 此时ftp会把对应用户的家目录作为根目录,如果这个家目录存在写权限则登录的时候会提示错误相关错误信息。 |
其它设置
设置ftp服务器的日志:
1 2 3 4 5 6 7 8 |
# vsftpd默认使用的就是wu-ftp的日志格式,vsftpd日志:默认不启用。可以手动启用 # wu-ftp 日志:默认启用 xferlog_enable=YES # 启用记录上传下载日志,此为默认值 xferlog_std_format=YES # 使用wu-ftp日志格式,此为默认值 xferlog_file= /var/log/xferlog #可自动生成, 此为默认值 # vsftpd日志:默认不启用 dual_log_enable=YES # 使用vsftpd日志格式,默认不启用 vsftpd_log_file= /var/log/vsftpd .log # 可自动生成, 此为默认值 |
设置用户使用客户端连接ftp服务器后的提示信息:
1 2 3 4 |
# 方法一: ftpd_banner= "welcome to mage ftp server" # 方法二:将提示信息存放到一个文件中 banner_file= /etc/vsftpd/ftpbanner .txt |
范例:ubuntu1804 配置匿名用户访问FTP服务器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
#1. 创建对应的目录 root@ubuntu1804:~ # mkdir /data root@ubuntu1804:~ # mkdir /data/data root@ubuntu1804:~ # chmod 777 /data/data #简单粗暴的方法 # root@ubuntu1804:~# setfacl -m u:ftp:rwx /data/data # 给ftp用户权限 #2. 修改配置文件 root@ubuntu1804:~ # vim /etc/vsftpd.conf anonymous_enable=YES no_anon_password=YES anon_upload_enable= yes anon_mkdir_write_enable= yes anon_other_write_enable= yes anon_world_readable_only=NO write_enable= yes # allow_writeable_chroot=YES #对根目录的写权限,匿名用户不生效 chroot_local_user=YES anon_root= /data #指定匿名用户登录进来后的根目录,如果不加就在该用户的家目录 #3. 重启服务 root@ubuntu1804:~ # systemctl status vsftpd.service #4. 测试 [root@HAproxy ~] # ftp 10.0.0.66 #连接到FTP服务器 Connected to 10.0.0.66 (10.0.0.66). 220 (vsFTPd 3.0.3) Name (10.0.0.66:root): ftp 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp > pwd 257 "/" is the current directory ftp > ls 227 Entering Passive Mode (10,0,0,66,235,199). 150 Here comes the directory listing. -rw-r--r-- 1 0 0 0 Dec 08 10:33 12345 drwxr-xr-x 2 111 115 4096 Dec 08 10:38 data 226 Directory send OK. ftp > cd data #进入数据目录 250 Directory successfully changed. ftp > ! ls 12345 abc anaconda-ks.cfg ftp > put 12345 #上传文件 local : 12345 remote: 12345 227 Entering Passive Mode (10,0,0,66,158,145). 150 Ok to send data. 226 Transfer complete. ftp > ls 227 Entering Passive Mode (10,0,0,66,157,235). 150 Here comes the directory listing. -rw------- 1 111 115 4 Dec 08 10:37 123 -rw------- 1 111 115 0 Dec 08 10:42 12345 226 Directory send OK. ftp > get 123 #下载文件 local : 123 remote: 123 227 Entering Passive Mode (10,0,0,66,67,112). 150 Opening BINARY mode data connection for 123 (4 bytes). 226 Transfer complete. 4 bytes received in 2.1e-05 secs (190.48 Kbytes /sec ) ftp > |
范例:设置允许FTP服务器的系统用户来登录ftp服务器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# 创建测试目录 root@ubuntu1804:~ # mkdir /ftproot root@ubuntu1804:~ # chmod 777 /ftproot root@ubuntu1804:~ # setfacl -m u:ftp:rwx /ftproot #更改配置文件 local_enable=YES write_enable=YES local_umask=022 local_root= /ftproot allow_writeable_chroot=YES #允许对 chroot_local_user=YES #测试 [root@HAproxy ~] # ftp 10.0.0.66 Connected to 10.0.0.66 (10.0.0.66). 220 (vsFTPd 3.0.3) Name (10.0.0.66:root): tom #如果这个用户在FTP服务器上不存在,需要使用useradd -m xx创建 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp > ls 227 Entering Passive Mode (10,0,0,66,60,121). 150 Here comes the directory listing. -rw-r--r-- 1 0 0 0 Dec 08 10:56 12345 -rw-r--r-- 1 1000 1000 1659 Dec 08 10:59 anaconda-ks.cfg drwxrwxrwx 2 0 0 4096 Dec 08 10:58 data -rw-r--r-- 1 1000 1000 1198 Dec 08 10:59 notepad++.exe - ¿쾝·½ʽ.lnk 226 Directory send OK. ftp > ! ls 123 12345 abc anaconda-ks.cfg ftp > put 123 #上传文件 local : 123 remote: 123 227 Entering Passive Mode (10,0,0,66,57,52). 150 Ok to send data. 226 Transfer complete. 4 bytes sent in 7.4e-05 secs (54.05 Kbytes /sec ) ftp > get anaconda-ks.cfg #下载文件 local : anaconda-ks.cfg remote: anaconda-ks.cfg 227 Entering Passive Mode (10,0,0,66,28,156). 150 Opening BINARY mode data connection for anaconda-ks.cfg (1659 bytes). 226 Transfer complete. 1659 bytes received in 9.1e-05 secs (18230.77 Kbytes /sec ) ftp > |
范例:设置系统用户登录FTP服务器后统一映射为一个虚拟用户
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
#1. 创建目录文件 root@ubuntu1804:~ # mkdir /ftproot root@ubuntu1804:~ # chmod 777 /ftproot #2. 修改配置文件 root@ubuntu1804:~ # vim /etc/vsftpd.conf local_enable=YES write_enable= yes guest_enable=YES guest_username= ftp chroot_local_user=YES #禁锢 local_root= /ftproot #因为映射为了虚拟用户 所以要配置虚拟用户的相关权限 anon_upload_enable= yes anon_mkdir_write_enable= yes anon_other_write_enable= yes anon_world_readable_only=NO allow_writeable_chroot=YES #允许对根目录有写权限 # 3.重启服务 root@ubuntu1804:~ # systemctl restart vsftpd.service # 4. 测试 [root@HAproxy ~] # ftp 10.0.0.66 #连接FTP服务器 Connected to 10.0.0.66 (10.0.0.66). 220 (vsFTPd 3.0.3) Name (10.0.0.66:root): tom #FTP服务器的系统用户登录 331 Please specify the password. Password: #输入密码 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp > ! ls 123 12345 abc anaconda-ks.cfg ftp > put abc #上传文件 local : abc remote: abc 227 Entering Passive Mode (10,0,0,66,143,226). 150 Ok to send data. 226 Transfer complete. 4 bytes sent in 6.6e-05 secs (60.61 Kbytes /sec ) ftp > get desktop.ini #下载文件 local : desktop.ini remote: desktop.ini 227 Entering Passive Mode (10,0,0,66,45,217). 150 Opening BINARY mode data connection for desktop.ini (474 bytes). 226 Transfer complete. 474 bytes received in 0.000216 secs (2194.44 Kbytes /sec ) ftp > ! ls #查看下载的文件 123 12345 abc anaconda-ks.cfg desktop.ini |
范例:将系统用户映射为一个指定的系统用户
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
#1. 创建目录 root@ubuntu1804:~ # mkdir /ftproot root@ubuntu1804:~ # chmod 777 /ftproot #2. 修改配置文件 和上面的配置文件一样 local_enable=YES #允许本地用户登录 write_enable=YES #允许本地用户上传文件 local_umask=022 #允许本地用户上传文件的权限 local_root= /ftproot #指定用户的目录 allow_writeable_chroot=YES #允许对根目录有写权限 chroot_local_user=YES #禁锢用户 guest_enable=YES #允许映射为指定用户 guest_username=bob #系统用户bob anon_other_write_enable= yes anon_upload_enable= yes # anon_mkdir_write_enable= yes anon_world_readable_only=NO #3. 重启服务 root@ubuntu1804:~ # systemctl restart vsftpd.service #4. 测试 [root@HAproxy ~] # ftp 10.0.0.66 Connected to 10.0.0.66 (10.0.0.66). 220 (vsFTPd 3.0.3) Name (10.0.0.66:root): tom 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp > ls 227 Entering Passive Mode (10,0,0,66,194,152). 150 Here comes the directory listing. drwx------ 2 1001 1001 4096 Dec 08 11:47 157 drwxrwxrwx 2 0 0 4096 Dec 08 11:33 data 226 Directory send OK. ftp > ! ls 123 12345 abc anaconda-ks.cfg desktop.ini ftp > put 123 #上传 local : 123 remote: 123 227 Entering Passive Mode (10,0,0,66,150,72). 150 Ok to send data. 226 Transfer complete. 4 bytes sent in 5.5e-05 secs (72.73 Kbytes /sec ) ftp > get 123 #下载 local : 123 remote: 123 227 Entering Passive Mode (10,0,0,66,171,38). 150 Opening BINARY mode data connection for 123 (4 bytes). 226 Transfer complete. 4 bytes received in 9.5e-05 secs (42.11 Kbytes /sec ) |
注意事项
将登录的目录作为了当前用户的根目录,但是FTP服务器的根站点要求这个登录的用户对他没有写权限。
例如使用wang用户进行登录,对用户进行了禁锢的操作,使用wang登录的时候,就把/homt/wang作为了根,但是wang对这个目录有写权限,所以登录就会报错。
解决方法:
1 2 3 4 5 |
# 方法一: chomod 555 /home/wang #取消写权限 #方法二: allow_writeable_chroot=YES #允许对家目录的写权限 |
黑名单、白名单
1 2 3 |
chroot_list_enable=YES #默认是NO YES表示要启用chroot_list_file 开启名单 chroot_list_file= /etc/vsftpd/chroot_list #里面存放用户名 |
白名单:默认都不能访问,只有名单里面的才能访问。
1 2 3 |
chroot_local_user=YES #禁锢所有系统用户在家目录中 chroot_list_enable=YES chroot_list_file= /etc/vsftpd/chroot_list #表示的是白名单 |
黑名单:默认都能访问,名单里面的不能访问
1 2 3 |
chroot_local_user=NO #不禁锢所有系统用户在家目录中 chroot_list_enable=YES #设置允许或者拒绝的用户列表,YES标识启用这个列表 chroot_list_file= /etc/vsftpd/chroot_list #表示的是黑名单 |
root身份不能连接FTP服务器的原因就是使用pam来限制的,因为ftp是明文传输用户密码的。为了安全不允许root登录ftp服务器。
vsftpd利用pam来控制用户的访问。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# vsftpd中的默认配置: pam_service_name=vsftpd #vsftpd指的就是/etc/pam.d/vsftpd这个文件 ------------------------------------------------------------------------------------------------------------ root@ubuntu1804: /etc/pam .d # vim vsftpd # Standard behaviour for ftpd(8). #放入这个文件的用户是被拒绝登录FTP服务器的 auth required pam_listfile.so item=user sense=deny file = /etc/ftpusers onerr=succeed # Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so. # Standard pam includes @include common-account @include common-session @include common-auth auth required pam_shells.so ------------------------------------------------------------------------------------------------------------ root@ubuntu1804: /etc/pam .d # vim /etc/ftpusers #这个文件里面的用户都是禁止登陆的 # /etc/ftpusers: list of users disallowed FTP access. See ftpusers(5). root daemon bin sys sync games man lp mail news uucp nobody |
并发连接数设置
1 2 3 4 5 |
# 同一时间允许多少个用户连接 max_clients=1000 #默认值是不受限制的 #每个IP同时发起的最大连接数 max_per_ip=0 #默认不受限制 |
速率控制
1 2 3 4 5 |
# 匿名用户的最大传输速率,以字节为单位,比如:1024000表示1MB/s anon_max_rate=0 #默认不受限制 # 本地用户的最大传输速率 local_max_rate=0 #默认不受限制 |
到此这篇关于ubuntu1804搭建FTP服务器的方法的文章就介绍到这了
2024-07-07
myeclipse怎么导入tomcat教程2024-07-07
myeclipse如何启动tomcat2024-07-07
myeclipse如何绑定tomcat上线了一个小的预约程序,配置通过Nginx进行访问入口,默认的日志是没有请求时间的,因此需要配置一下,将每一次的请求的访问响应时间记录出来,备查与优化使用....
2023-03-17