安装ftp主要是还为了传输文件,但是我有一台服务器或者计算机,直接登录进去获取文件不行吗?为啥还要多此一举用ftp呢?原因是用ftp的话,它的会话是持久的,只有一次认证过程,传输多个文件都是使用同一个连接。因为 ftp 就是为远程文件交互而设计的,更适;而且有些时候只是为了单纯让你做一个文件传输,运维未必会给你一台服务器,这个时候往往只是给你搭建ftp服务。
FTP(File Transfer Protocol,文件传输协议)
是 TCP/IP
协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。
ftp的安装一般用yum直接在线安装;
# 直接yum在线安装
[root@node1 ~]# yum install -y vsftpd
已加载插件:fastestmirror, langpacks
Determining fastest mirrors
* base: ftp.sjtu.edu.cn
* extras: ftp.sjtu.edu.cn
* updates: mirrors.ustc.edu.cn
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
updates/7/x86_64/primary_db | 14 MB 00:00:02
正在解决依赖关系
--> 正在检查事务
---> 软件包 vsftpd.x86_64.0.3.0.2-29.el7_9 将被 安装
--> 解决依赖关系完成
依赖关系解决
===============================================================================================================================================================================================================
Package 架构 版本 源 大小
===============================================================================================================================================================================================================
正在安装:
vsftpd x86_64 3.0.2-29.el7_9 updates 173 k
事务概要
===============================================================================================================================================================================================================
安装 1 软件包
总下载量:173 k
安装大小:353 k
Downloading packages:
警告:/var/cache/yum/x86_64/7/updates/packages/vsftpd-3.0.2-29.el7_9.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
vsftpd-3.0.2-29.el7_9.x86_64.rpm 的公钥尚未安装
vsftpd-3.0.2-29.el7_9.x86_64.rpm | 173 kB 00:00:00
从 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 检索密钥
导入 GPG key 0xF4A80EB5:
用户ID : "CentOS-7 Key (CentOS 7 Official Signing Key) "
指纹 : 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
软件包 : centos-release-7-9.2009.0.el7.centos.x86_64 (@anaconda)
来自 : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : vsftpd-3.0.2-29.el7_9.x86_64 1/1
验证中 : vsftpd-3.0.2-29.el7_9.x86_64 1/1
已安装:
vsftpd.x86_64 0:3.0.2-29.el7_9
完毕!
# 查看ftp状态
[root@node1 ~]# systemctl status vsftpd.service
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
# 启动ftp
[root@node1 ~]# systemctl start vsftpd.service
# 查看下ftp的默认端口21,发现能正常启动
[root@node1 etc]# ss -anp | grep 21
u_str LISTEN 0 5 /var/run/lsm/ipc/simc 20233 * 0 users:(("lsmd",pid=621,fd=4))
raw UNCONN 0 0 [::]:58 [::]:* users:(("NetworkManager",pid=733,fd=21))
tcp LISTEN 0 32 [::]:21 [::]:* users:(("vsftpd",pid=7543,fd=4))
# 因为还没配置好,先关闭ftp
[root@node1 ~]# systemctl start vsftpd.service
ftp安装好后,配置文件在/etc/vsftpd/vsftpd.conf
,利用vim
,修改配置文件。
#打开配置文件
vim /etc/vsftpd/vsftpd.conf
#显示行号
:set nu
#修改配置 12 行 不允许匿名访问(不登录默认访问某目录/var/ftp),要用户名和密码
anonymous_enable=NO
#修改配置83行 允许ascii文件上传
ascii_upload_enable=YES
#修改配置84行 允许ascii文件下载
ascii_download_enable=YES
#修改配置87行
ftpd_banner=Welcome to blah FTP service.
#修改配置101,102,104行 将用户限制在为其配置的主目录
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
#添加下列内容到vsftpd.conf末尾
use_localtime=YES
# 监听端口
listen_port=21
idle_session_timeout=300
# 设置启用虚拟用户功能
guest_enable=YES
# 制定宿主用户名(我们后续需要为我们的系统增加该用户)
guest_username=ftpuser
# 制定虚拟用户配置文件放置文件夹(需要我们自己建立)
user_config_dir=/etc/vsftpd/vuser_conf
# 允许写
allow_writeable_chroot=YES
data_connection_timeout=1
virtual_use_local_privs=YES
pasv_min_port=40000
pasv_max_port=40010
accept_timeout=5
connect_timeout=1
# wq!保存
# 新建一个ftpuser组
groupadd ftpuser
# 新建一个ftpuser账号,并且该账号不需要登录服务器,设定家目录在 /home/vsftpd
useradd -g ftpuser -M -d /home/vsftpd -s /sbin/nologin ftpuser
# 设置用户 ftpuser 的密码
passwd ftpuser
# 把 /home/vsftpd 的所有权给ftpuser.root
chown -R ftpuser:ftpuser /home/vsftpd
# 在家目录下先创建两个文件夹,作为后续ftp账号的默认目录
mkdir -p /home/vsftpd/ftp-user1 /home/vsftpd/ftp-user2
# 设置目录权限为755
chmod 755 -R /home/vsftpd
# 进入/etc/vsftpd/目录
cd /etc/vsftpd/
# 创建用户密码信息文件
vim vuser_passwd
#编辑如下内容,创建虚拟账户信息,奇数行为用户名,偶数行为密码
ftp-user1
123456
ftp-user2
123456
# wq!保存退出
# 生成虚拟用户数据文件
db_load -T -t hash -f /etc/vsftpd/vuser_passwd /etc/vsftpd/vuser_passwd.db
# 将该目录的权限改成600
chmod 600 /etc/vsftpd/vuser_passwd.db
# 查看系统位数
getconf LONG_BIT
# 备份pam认证文件
mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
# 新建pam认证文件
vim /etc/pam.d/vsftpd
# 根据自己的操作系统选2行,不要全部都填写哟
# 注:db=/etc/vsftpd/vuser_passwd 中的vuser_passwd 是你生成的虚拟用户的db文件,这里不要加扩展名。
# 系统为32位:
auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd account
required pam_userdb.so db=/etc/vsftpd/vuser_passwd
# 系统为64位:
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
# wq!保存内容
#创建上述配置文件中配置的虚拟用户文件夹,一定要对应章节3.2配置文件的user_config_dir=/etc/vsftpd/vuser_conf
mkdir -p /etc/vsftpd/vuser_conf
#切换进入 /etc/vsftpd/vuser_conf
cd /etc/vsftpd/vuser_conf
#创建虚拟用户配置文件,文件名称要与虚拟用户名称相同,这里我们配置两个虚拟用户就创建两个配置文件
touch ftp-user1 ftp-user2
#编辑ftp-user1
vim ftp-user1
#写入以下内容
local_root=/home/vsftpd/ftp-user1
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#wq! 保存退出
#编辑ftp-user2
vim ftp-user2
#写入以下内容
local_root=/home/vsftpd/ftp-use2
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
# wq! 保存退出
# 进入目录/etc/vsftpd
cd /etc/vsftpd
#创建使当前配置的虚拟用户允许访问的文件列表
vim chroot_list
#写入虚拟用户名
ftp-user1
ftp-user2
# wq! 保存退出
简单粗暴型,如果允许的话,直接关闭防火墙和SELinux,
#打开SELINUX配置文件
vim /etc/selinux/config
#修改配置参数
#注释
SELINUX=enforcing
#增加
SELINUX=disabled
#wq!保存完,需要重启!
systemctl stop firewalld.service
也可以针对性的关闭防火墙和SELinux对ftp的限制。
# SELINUX不对vsftp不做任何限制
setsebool -P ftpd_full_access on
# 防火墙设置 IPtables 的设置方式:
vi /etc/sysconfig/iptables
#编辑iptables文件,添加如下内容,开启21端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 40000:40010 -j ACCEPT
#firewall 的设置方式,以下指令
firewall-cmd --zone=public --add-service=ftp --permanent
firewall-cmd --zone=public --add-port=21/tcp --permanent
firewall-cmd --zone=public --add-port=40000-40010/tcp --permanent
#启动
systemctl start vsftpd.service
#重启
systemctl restart vsftpd.service
#停止
systemctl stop vsftpd.service
#查看状态
systemctl status vsftpd.service
#设置开机启动
systemctl enable vsftpd.service
重启ftp,查看下ftp的状态和端口是否正常启动;
# 查看ftp的状态,必须要是 active (running)
[root@node1 home]# systemctl status vsftpd.service
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: active (running) since 日 2022-03-27 22:26:43 CST; 1h 13min ago
Process: 10312 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 10313 (vsftpd)
Tasks: 3
CGroup: /system.slice/vsftpd.service
├─10313 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
├─10387 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
└─10389 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
# 查看ftp的进程和端口,发现正在以PID=10313的进程,port=21在运行着
[root@node1 home]# netstat -anp | grep ftp
tcp6 0 0 :::21 :::* LISTEN 10313/vsftpd
tcp6 0 0 192.168.78.130:21 192.168.78.1:62662 ESTABLISHED 10387/vsftpd
unix 2 [ ] DGRAM 111814 10313/vsftpd
unix 3 [ ] STREAM CONNECTED 111966 10389/vsftpd
unix 3 [ ] STREAM CONNECTED 111965 10387/vsftpd
先在windows的命令行telnet下端口,指令为telnet 192.168.78.130 21
,网络通的话会跳转返回220 Welcome to blah FTP service.
。
先在window命令行测试下是否能正常访问ftp,输入指令ftp 192.168.78.130
,然后输入章节3.4 ftp的登录用户和密码设置
中的用户名ftp-user1
和密码123456
,直到弹出230 Login successful
才算登录成功。
时至今日ftp技术已经非常普及了,这里博主推荐一些比较好用的ftp图形界面话连接工具,以开源免费为主
,由于ftp的连接工具使用都比较简单,基本都是新建会话,填入Ip,端口,用户名,密码,然后登录
,就可以开行的托拉拽实现文件的上传下载了,这里就不细讲了,只做软件的简单介绍。
FileZilla
(所有平台):FileZilla是一个免费开源
的适合Windows、Mac和Linux的FTP客户端软件,因为其实免费跨平台和易用性,因此它是很多FTP用户的最初选择,FileZilla下载速度非常快,功能齐全,如果你是Windows用户,你甚至还能利用它搭建一个家庭FTP服务器。
WinSCP
(Windows平台):WinSCP是一个免费开源
的FTP客户端,同时支持SFTP和SCP协议,WinSCP是快速轻量级的FTP客户端,还支持一些高级功能,例如远程文字编辑。当你打开一个FTP服务器上的纯文本文件,在保存文件的时候会透明的保存和上传到远程服务器。
Cyberduck (Mac OS X)
:Cyberduck是一个基于Mac OS X的免费开源
的FTP客户端工具,它支持快速查找、远程文本编辑等功能,Mac用户如果对FileZilla不满意,但又不想花钱的话,可以尝试一个这个。