FTP服务器的搭建(Linux)
摘要:
FTP(File Transfer Protocol)即文件传输协议,是一种基于TCP的协议,采用客户/服务器模式。通过FTP协议,用户可以在FTP服务器中进行文件的上传或下载等操作。虽然现在通过HTTP协议下载的站点有很多,但是由于FTP协议可以很好地控制用户数量和宽带的分配,快速方便地上传、下载文件,因此FTP已成为网络中文件上传和下载的首选服务器。同时,它也是一个应用程序,用户可以通过它把自己的计算机与世界各地所有运行FTP协议的服务器相连,访问服务器上的大量程序和信息。FTP服务的功能是实现完整文件的异地传输。特点如下:
(一)FTP使用两个平行连接:控制连接和数据连接。控制连接在两主机间传送控制命令,如用户身份、口令、改变目录命令等。数据连接只用于传送数据。
(二)在一个会话期间,FTP服务器必须维持用户状态,也就是说,和某一个用户的控制连接不能断开。另外,当用户在目录树中活动时,服务器必须追踪用户的当前目录,这样,FTP就限制了并发用户数量。
(三)FTP支持文件沿任意方向传输。当用户与一远程计算机建立连接后,用户可以获得一个远程文件也可以将一本地文件传输至远程机器。
FTP服务器(File Transfer Protocol Server)是在互联网上提供文件 存储和访问服务的 计算机,它们依照 FTP协议提供服务。 FTP是File Transfer Protocol( 文件传输协议)。顾名思义,就是专门用来传输文件的协议。简单地说,支持FTP协议的服务器就是FTP服务器 。
一、FTP服务器的概述
1、FTP服务器的作用
FTP服务器是一种提供文件传输服务的服务器,它的作用主要包括以下几点:
(1)存储文件:FTP服务器可以存储需要传输的文件,用户可以通过FTP客户端连接到FTP服务器,并上传或下载需要的文件。
(2)管理文件:FTP服务器可以管理文件,例如创建、删除、重命名等操作。
(3)提供文件访问权限控制:FTP服务器可以对文件进行访问权限控制,例如限制用户的访问权限、控制用户的上传和下载权限等。
(4)提供匿名访问:FTP服务器可以提供匿名访问,允许用户通过FTP客户端进行匿名的文件传输。
(5)监控文件传输情况:FTP服务器可以记录和监控文件传输情况,例如记录文件传输的日志信息,以便进行后续的审计和管理。
(6)支持多用户同时传输:FTP服务器可以支持多个用户同时进行文件传输,以提高文件传输的效率。
(7)网络备份:FTP服务器可以作为网络备份的存储服务器,用于备份公司或组织的重要数据。
(8)虚拟主机:FTP服务器可以作为虚拟主机,提供Web服务器、邮件服务器等服务。
(9)软件分发:FTP服务器可以作为软件分发服务器,将软件发布到FTP服务器上供用户下载。
(10)文件归档:FTP服务器可以作为文件归档服务器,存储历史文件,方便用户进行查阅和调取。
(11)文件同步:FTP服务器可以作为文件同步服务器,用于在不同的地点或网络之间同步文件。
2、FTP的系统组成
FTP服务器系统由服务器软件、客户端软件和FTP通信协议组成。FTP服务器常见的软件:vsftpd、wu-ftpd、Proftpd、微软 IIS FTP、Serv-U等。
3、FTP服务器的工作过程
一个完整的FTP文件传输需要建立两种类型的连接,一种为文件传输下命令,称为控制连接,另一种实现真正的文件传输,称为数据连接。
(1)控制连接
客户端希望与FTP服务器建立上传下载的数据传输时,它首先向服务器的TCP21端口发起一个建立连接的请求,FTP服务器接受来自客户端的请求,完成连接的建立过程,这样的连接就称为FTP 控制连接
(2)数据连接
FTP 控制连接建立之后,即可开始传输文件,传输文件的连接称为FTP数据连接。FTP数据连接就是FTP传输数据的过程,它有两种传输模式:主动模式(PORT/standard)和被动模式
(PASV)。
主动模式:
被动模式:
二、FTP服务器的搭建
FTP服务器搭建前的准备:
FTP服务器的搭建与DNS服务器的搭建息息相关,如果未搭建DNS服务器见文章:
https://blog.csdn.net/weixin_63037066/article/details/129963557
其中DNS服务器的配置文件需要更改一点:
打开正向配置文件,做一些更改--
systemctl restart named //重启DNS服务
FTP客户端的网卡也许谨慎配置(DNS服务器为FTP客户端解析域名或IP地址)--
FTP客户端的网卡配置-
[root@Server ~]# cd /etc/sysconfig/network-scripts/
[root@Server network-scripts]#
[root@Server network-scripts]# vim ifcfg-ens33TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.1.10
GATEWAY=192.168.1.2
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=721bf751-0fac-4c74-9ade-9f591c0f5ebf
DEVICE=ens33
ONBOOT=yes
DNS1=192.168.1.10
1、安装FTP软件
服务端:yum install vsftpd
客户端: yum install ftp
2、启动ftp服务
systemctl start vsftpd //开启FTP服务
systemctl enable vsftpd //设置FTP开机自启动
systemctl status vsftpd //查看FTP服务的状态
3、防火墙设置
firewall-cmd --list-all //查看防火墙已经允许通过的服务
firewall-cmd --permanent --add-service=ftp //在防火墙中添加允许通过的FTP服务
firewall-cmd --reload //重新加载防火墙,使新添加的防火墙策略生效
4、配置本地用户
①不限制在自己根目录的用户(根目录--/home/用户名/)
FTP服务器端: adduser user1 //添加普通用户 passwd user //设置user1用户的密码 echo "user1_file" > /home/user1/user.txt //创建测试文件(用来下载),并写入内容 mkdir /var/ftp/public //创建测试目录 FTP客户端: echo "test_file" > test1.txt //创建测试文件(用来上传),并写入内容
客户端测试:
那么如何做到在除了家目录的其他目录上传文件呢?看如下操作:(以 /var/ftp/public 为例)
FTP服务器端: chmod o+w /var/ftp/public //给予其他用户对 /var/ftp/public 目录的写权限 chcon -t public_content_rw_t /var/ftp/public //如果你想让你设置的FTP目录可以上传文件的 话,SELINUX需要设置 setsebool -P ftpd_full_access on //修改布尔值状态,开放FTP访问 getsebool -a | grep ftp //过滤与FTP相关的布尔值信息 ” ftpd_anon_write --> off ftpd_connect_all_unreserved --> off ftpd_connect_db --> off ftpd_full_access --> on //开启即可 ftpd_use_cifs --> off ftpd_use_fusefs --> off ftpd_use_nfs --> off ftpd_use_passive_mode --> off httpd_can_connect_ftp --> off httpd_enable_ftp_server --> off tftp_anon_write --> off tftp_home_dir --> off ”
客户端测试:
①限制在自己根目录的用户(根目录---/home/用户名/)
adduser webadmin //添加普通用户 passwd webadmin //设置普通用户webadmin的密码 mkdir /webdata/ //创建目录(该目录将用来作为用户webadmin的根目录) chmod o+w /webdata/ //给予其他用户对 /var/ftp/public 目录的写权限 echo "webadmin_file" > /webdata/webadmin.txt //创建测试文件(用于上传),并写入内容 vim /etc/vsftpd/vsftpd.conf //配置FTP服务器的主配置文件,修改和添加的内容放在代码外部 vim /etc/vsftpd/chroot_list “ webadmin ” systemctl restart vsftpd //重启FTP服务 getsebool -a | grep ftp //过滤与FTP相关的布尔值信息 “ ftpd_anon_write --> off ftpd_connect_all_unreserved --> off ftpd_connect_db --> off ftpd_full_access --> on //开启即可,如果为off则多敲一条命令:setsebool -P ftpd_full_access on ftpd_use_cifs --> off ftpd_use_fusefs --> off ftpd_use_nfs --> off ftpd_use_passive_mode --> off httpd_can_connect_ftp --> off httpd_enable_ftp_server --> off tftp_anon_write --> off tftp_home_dir --> off “
vim /etc/vsftpd/vsftpd.conf //FTP服务器的主配置文件配置
客户端测试:
在此基础上,我们还可以拓展FTP服务器的功能:
①禁止上传后缀名为.doc .docx .xlsx 的文件;
②限制用户的下载最大速度为100kb/s;
③最大同一IP在线人数为2人;
④一个IP地址同时登陆的用户进程/人数不超过2人。
FTP服务器端: vim /etc/vsftpd/vsftpd.conf //配置FTP服务器主配置文件,在文件末尾添加内容 ” local_max_rate=100000 //限制用户的下载最大速度为100kb/s max_per_ip=2 //最大同一IP在线人数为2人 max_clients=2 //一个IP地址同时登陆的用户进程/人数不超过2人 deny_file={*.doc,*.docx,*.xlsx} //禁止上传后缀名为.doc .docx .xlsx 的文件 “ systemctl restart vsftpd //重启FTP服务
客户端测试:
touch doc_file.doc //创建后缀名为.doc的测试文件
为了保证客户端和服务器之间传输数据的保密性和完整性,可以使用SSL/TLS协议加固FTP服务器。
FTP服务器端: vim /etc/vsftpd/vsftpd.conf //编辑FTP服务器的主配置文件,在文件末尾添加内容 ” userlist_enable=YES tcp_wrappers=YES ssl_enable=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO rsa_private_key_file=/etc/ssl/serverkey1/vsftpd.pem rsa_cert_file=/etc/ssl/serverkey1/vsftpd.pem allow_anon_ssl=NO force_local_logins_ssl=YES force_local_data_ssl=YES “
客户端测试:
那么,如何安全地登陆到FTP服务器端 ?
yum install epel-release filezilla -y //在FTP客户端安装filezilla软件 细节提醒: 重复安装两次,因为第一次是初始化,第二次才是正常的安装。
安装完后会显示图标:
点击软件FileZilla,进入内部
①打开站点管理器
②先新建站点,写入站点信息,最后点击连接
这里是用IP地址登陆--
也可以用域名登陆--
③输入密码
连接成功:
这里依然可以进行文件的上传和下载:
至此,FTP服务器搭建完成!
做而论道_CS: 在两位十进制数运算中,舍弃进位,就是减去了一百。 所以,加 99,再减 100,当然就是 “-1” 了。 八位二进制数是:0000 0000 ~ 1111 1111。 也就是十进制数:0 ~ 255。 如果有进位,就是:256。 此时,加上 255 (1111 1111),再舍弃进位 256, 这不也就是-1 吗? 所以:+255 (1111 1111),就是-1; 同理:+254 (1111 1110),就是-2; +253 (1111 1101),就是-3; 。。。 +128 (1000 0000),就是-128。 这些正数,就是计算机专家 “发明” 的【补码】。 另外,加上 127 (0111 1111),是不会出现进位的。 那么,也就不用舍弃进位,也就不用减 256 了。 所以,加上 127,就不会出现 “减法的作用”。 因此,0 ~ 127,这些就是【正数】。 (正数就是正数,不应该称为 “补码”。) ------------------ 老外的算术能力很差,不懂什么是进位, 更弄不懂什么是舍弃进位。 所以,就编造了一套谎言: 机器数真值符号位原码反码补码正数三码相同 负数取反加一符号位不变符号位也参加运算模 我们的老师,数学底子也很差啊! 小学的算术,都看不透,就被老外忽悠瘸了! 天天喋喋不休的:原码反码取反加一。。。 也不知道有多少学生因此而挂科。
做而论道_CS: 哪有什么原码反码补码呀! 虽然,计算机使用的,是二进制数。 但是,二进制数,也是数,和十进制数,是雷同的。 二进制数,并不是什么原码反码补码。 符号位,也是根本就不存在的。 所谓的“补码”,不过是一道小学算术题而已。 所谓的“补码”,与什么进制,都没有关系。 所谓的“补码”,也不是计算机专家发明的。 另外,在码长八位时,各码的范围如下。 原码:-127 ~ +127; 反码:-127 ~ +127; 补码:-128 ~ +127。 看到了吧? -128 只有补码,没有原码和反码。 没有原码,你拿什么取反? 没有反码,你拿什么加一? 取反加一,不可用! -128 的补码,你是怎么得来的呢? 实际上,取反加一,根本就没有任何理论依据。 你还想跟着老外学算术? 你直接就掉坑里了! ------------------ 你看看十进制数吧,两位的:0~99。 最大值 99,就能当做“负一”来用。 如:27 + 99 = (一百) 26 27 - 1 = 26 只要你忽略进位,仍旧保持两位数,它们就是相等的。 由此可知,舍弃了进位: 正数,就能当做负数来用。 加法,也就能实现减法运算。 在计算机中,舍弃进位,会怎样: 可以省略减法器,简化硬件! 只需配置一个加法器,便可走遍天下。 如果你明白什么是 “舍弃进位”: 你就会懂得 “补码的来源与意义”。 老外,是不懂这些的。 所以,才编造了:符号位原码。。。
RanDomMS: 大致听明白了,我以为他可以更高级。。。可以判断当前的用户,根据一个【用户(或群)-跟路径】映射的配置文件切换到该用户(或所在群)对应的根目录
风里唤呼声: 主要意思是这样的:我们创建了一个根目录叫做/webdata/,本地用户登上去他们的根目录都是这个,是公共的配置。但是由于在主配置文件/etc/vsftpd/vsftpd.conf中配置了“chroot_list_enable=YES //开始锁定用户的chroot功能 chroot_list_enable=/etc/vsftpd/chroot_list //设置锁定用户的列表文件”,然后将被锁定用户webadmin加入文件“/etc/vsftpd/chroot_list”中。当你切换到webadmin用户时,他所在的目录只能是/webdata/,不能切换到其他目录,但是如果你切换的是其他用户,所在的目录还是/webdata/,但是可以自由的切换到其他目录。我所配置的是限制某一个用户限定在一个目录中,不是说换一个用户就换一个根目录,因为想你所说的 local_root是本地用户登录后所在的目录,因为我们改变了他的初始值,如果不管他的话,本地用户登录后所在的目录缺省为用户的家目录。
RanDomMS: 但是local_root不是个公共的配置吗?没有和webadmin用户映射上关系啊?软件如何能根据当前登录用户限制对应的根目录?