Administrator
Administrator
发布于 2024-08-28 / 12 阅读
0
0

ftp

ftp搭建与使用

ftp介绍

FTP(File Transfer Protocol,文件传输协议) 是典型的C/S结构的应用层协议,需要由服务器端软件、客 户端软件两个部分共同实现文件传输功能。

该协议是Internet文件传送的基础,它由一系列规格说明文档组成,目标是提高文件的共享性,提供非 直接使用远程计算机,使存储介质对用户透明 和可靠高效地传送数据。

简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为“下载 (download)”文件。若将 文件从自己计算机中拷贝至远程计算机上,则称之为“上载(upload)”文件。

无论是上传还是下载,客户端与服务器之间都会建立2个TCP连接会话,绿色是控制连接,红色的是数据连接

其中控制连接用于传输FTP命令,如:删除文件、重命名文件、下载文件、列取目录、获取文件信息等。真正的数据传输时通过数据连接来完成的。

默认情况下,服务器21端口作为命令端口20端口作为数据端口。但是被动模式下有所差别。

但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。

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服务器可以作为文件同步服务器,用于在不同的地点或网络之间同步文件。

ftp的登录类型

VSFTP提供了系统用户、匿名用户、和虚拟用户三种不同的登陆方式。所有的虚拟用户会映射成一个系统用户,访问时的文件目录是为此系统用户的家目录,匿名用户也是虚拟用户,映射的系统用户为ftp详细信息可以通过man vsftpd.conf(手册)查看

ftp主动与被动

主动模式

在主动模式下,客户端会开启N和N+1两个端口,N为客户端的命令端口,N+1为客户端的数据端口

第一步:客户端使用端口N连接FTP服务器的命令端口21,建立控制连接并告诉服务器我这边开启了数据端口N+1

第二步:在控制连接建立成功后,服务器会使用数据端口20,主动连接客户端的N+1d端口以建立数据连接。这就是FTP主动模式的连接过程。

我们可以看到,在这条红色的数据连接建立的过程中,服务器是主动的连接客户端的,所以称这种模式为主动模式

主动模式的利弊

主动模式对FTP服务器的管理有利,因为FTP服务器只需要开启21端口的“准入”和20端口的“准出”即可。

但这种模式对客户端的管理不利,因为FTP服务器20端口连接客户端的数据端口时,有可能被客户端的防火墙拦截掉

被动模式

第一步:客户端的命令端口N主动连接服务器命令端口21,并发送PASV命令,告诉服务器用“被动模式”,控制连接建立成功后,服务器开启一个数据端口P,通过PORT命令将P端口告诉客户端

第二步:客户端的数据端口N+1去连接服务器的数据端口P,建立数据连接

我们可以看到,在这条红色的数据连接建立的过程中,服务器是被动的等待客户端来连接的,所以称这种模式为被动模式。

被动模式的利弊

被动模式对FTP客户端的管理有利,因为客户端的命令端口和数据端口都是“准出”,windows防火墙对于“准出”一般是不拦截的,所以客户端不需要任何多余的配置就可以连接FTP服务器了。

但对服务器端的管理不利。因为客户端数据端口连到FTP服务器的数据端口P时,很有可能被服务器端的防火墙阻塞掉。

ftp安装部署

环境要求:

服务端centos7.9 软件vsftpd

客户端Windows或者centos 软件:xftp

安装

1.安装使用国内阿里epel源

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

2.安装以及解决相关依赖问题

yum -y install vsftpd*  pam* db4*
  1. vsftpd: ftpr软件

  2. pam:认证模块

  3. DB4: 支持文件数据库

vsftpd配置文件说明

配置文件

作用

/etc/vsftpd/vsftpd.conf

vsftpd的核心配置文件

/etc/vsftpd/ftpusers

用于指定哪些用户不能访问ftp服务器

/etc/vsftpd/user_list

指定允许使用vsftpd的用户列表文件

/etc/vsftpd/vsftpd_conf_migrate.sh

是vsftpd操作的一些变量和设置脚本

/var/ftp/

默认情况下匿名用户的根目录

vsftpd 配置详解

属性

属性值

含义

anonymous_enable

YES/NO

是否允许匿名用户(anonymous)登录FTP,如果该设置被注释,则默认允许。

local_enable

YES/NO

是否允许本地系统用户登录

write_enable

YES/NO

是否开启任何形式的FTP写入命令,上传文件

local_umask

xxx

本地用户的umask设置,如果注释该设置则默认为077,但一般都设置成022

anon_upload_enable

YES/NO

是否允许匿名用户上传文件,如果要设置为允许,则需要先开启write_enable,否则无效,此外对应目录还要具有写权限

anon_mkdir_write_enable

YES/NO

是否允许匿名用户创建新目录

dirmessage_enable

YES/NO

当进入某个目录时,发送信息提示给远程用户

xferlog_enable

YES/NO

是否开启上传/下载的日志记录

connect_from_port_20

YES/NO

是否使用20端口来连接FTP

chown_uploads

YES/NO

匿名上传的文件时是否由某一指定用户chown_username所有

chown_username

有效用户名

匿名上传的文件由该设定用户所有

xferlog_file

有效路径

设置日志文件的保存位置,默认为/var/log/xferlog

vsftpd修改之前的备份

为防止修改文件后的错误无法更改,所导致服务无法运行。

[root@anygts ~]# cd /etc/vsftpd/
[root@anygts vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
[root@anygts vsftpd]# cp vsftpd.conf vsftpd.conf.bak
[root@anygts vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd.conf.bak  vsftpd_conf_migrate.sh

vsftpd 配置匿名用户

3.1 编辑配置文件

vi vsftpd.conf

进入后会发现很多注释(带#的),需要修改如下内容,但是很麻烦,建议直接全部删除,直接输入如下内容。

write_enable=YES
anon_umask=022
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

拓展

如果使用vsftp的是本地用户,对应修改配置文件中的 local_umask 的值。 如果使用vsftp的是匿名用户,对应修改配置文件中的 anon_umask 的值。

3.2 常用的匿名FTP配置项

anonymous_enable=YES # 是否允许匿名用户访问 anon_umask=022 # 匿名用户所上传文件的权限掩码 anon_root=/var/ftp # 设置匿名用户的FTP根目录 anon_upload_enable=YES # 是否允许匿名用户上传文件 anon_mkdir_write_enable=YES # 是否允许匿名用户创建目录

anon_other_write_enable=YES # 是否允许匿名用户有其他写入权 (改名,删除,覆盖) anon_max_rate=0 # 限制最大传输速率(字节/秒) 0为无限制

3.3 启动vsftp服务

重新启动vsftpd服务

systemctl restart vsftpd

【如果此时报错一定是因为刚才配置文件内写错了,重新回去编辑。】

查看是否有vsftpd进程。

方法一:

ps aux | grep vsftpd

方法二:

先下载好net工具

yum -y install net-tools

查看

netstat -lnpt | grep vsftpd

3.4 登录验证

方法一:工具访问

使用Xftp工具登录。(需要提前下载)

进入Xftp后点击建立连接,主机输入IP地址,端口号改为21,点击连接。出现FTP用户身份验证窗口,点击匿名用户登录--确定。

出现pub文件夹,说明我们成功啦~

方法二:浏览器访问

首先先关闭好防火墙。

systemctl stop firewalld

在浏览器中输入ftp://+IP地址访问。【每个人IP不一样,不知道IP地址的使用ip a命令查看】

ftp://+IP地址

3.5 修改权限上传

3.5.1 修改权限

进入/var/ftp/中

cd /var/ftp/

ls命令查看下

查看pub文件夹的属主和属组

ll -d pub/

修改属主和属组

chown -R ftp.ftp pub/ 

修改完成后重新查看下,root变成ftp即表示修改成功。

修改完成后,一定不要忘记重新启动vsftpd服务(不重启服务不生效)

systemctl restart vsftpd

3.5.2 上传文件

方法一:Xftp工具

关闭刚才打开的连接窗口,重新登录。(因为修改了属主和属组)

还是使用匿名登录,登录成功后,进入到pub目录,右击桌面的“新建RTF文档”--传输,在pub目录下出现“新建RTF文档.rtf”文件,说明我们成功啦!

这时候也可以使用ls命令查看。

方法二:浏览器

先创建个文件abc.txt

touch /var/ftp/abc.txt

还是使用ftp://+IP地址访问浏览器。

出现abc.txt文件,说明我们成功啦

4 vsftp配置本地(系统)用户

4.1 创建测试用户

创建两个用户zhansan、lisi

useradd zhansan
useradd lisi

设置密码

passwd zhansan
passwd lisi

4.2 修改配置文件

vi /etc/vsftpd/vsftpd.conf

将原有内容删除,编辑如下内容:

local_enable=YES
local_umask=077
chroot_local_user=YES
allow_writeable_chroot=YES
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
tcp_wrappers=YES

编辑完成后保存退出。

重新启动vsftp服务

systemctl restart vsftpd

【如果遇到:Job for vsftpd.service failed because the control process exited with error code. See "systemctl status vsftpd.service" and "journalctl -xe" for details.情况,请查看另一篇文章解决:http://t.csdnimg.cn/TXZhw

在vsftpd.conf查看是否有空行

set list

4.3 常用的本地用户FTP配置项

local_enable=YES # 是否允许本地系统用户访问

local_umask=077 #本地用户所上传文件的权限掩码

local_root=/var/ftp # 设置本地用户的FTP根目录

chroot_list_enable=YES # 表示是否开启chroot的环境,默认没有开启

chroot_list_file=/etc/vsftpd/chroot_list # 表示写在/etc/vsftpd/chroot_list文件里面的用户 是不可以出chroot环境的,默认是可以的。 Chroot_local_user=YES # 表示所有写在/etc/vsftpd/chroot_list文件里面的用户是可以出chroot环境的,和上面的相反。

local_max_rate=0 # 限制最大传输建率(字节/秒) 0为无限制

4.4 添加用户到白名单

vi /etc/vsftpd/user_list

在文件中最后添加zhangsan和lisi

zhansan
lisi

添加完成后重新启动vsftp服务

systemctl restart vsftpd

4.5 登录测试

方法一:使用Xftp工具

再次使用匿名登录,发现登录不上去,显示“用户身份验证失败是否要重试”页面。

点击否。

在“FTP用户身份验证”页面用户名输入zhangsan或者lisi,输入密码登录。

cd /home/lisi/

创建zhangsan.txt文件

touch lisi.txt

重新启动vsftp服务

systemctl restart vsftpd

重新启动后在Xftp工具中再重新登录一下。

发现出现lisi.txt文件,成功!

方法二:使用Xshell工具

点击新建

出现如下界面,名称随便起一个,主机输入IP地址。然后点击连接。

在如下界面输入用户名lisi,并选择记住用户名。

输入密码。选择记住密码并点击确认。

进入后我们ls命令查看,发现没有文件。

我们跟方法一中一样在root用户下创建lisi.txt文件并重新启动vsftp服务,然后进行查看。

root用户终端

lisi用户终端

发现本来没有,现在出现lisi.txt文件,说明我们成功啦~

5 vsftp配置虚拟用户

5.1 建立虚拟FTP用户账号

useradd -s /sbin/nologin vu

5.2 创建虚拟用户文件

cd /etc/vsftpd/
vi user

添加如下内容:

zhao
12345
zhang
12345

奇数行代表用户名,偶数行代表密码。【切记,如下账号和密码不能写在同一行中】

5.3 创建数据文件

通过 db_load工具创建出 Berkeley DB 格式的数据库文件。

db_load -T -t hash -f user user.db

-f 指定数据原文件 -T 允许Berkeley DB的应用程序使用文本格式转换的DB数据文件 -t hash 读取文件的基本方法

ls命令查看。

出现user.db,证明我们成功啦

5.4 建立支持虚拟用户的PAM认证文件

vi /etc/pam.d/vsftpd.vu

编写配置文件,最后的路径不要写错!

auth   required   /lib64/security/pam_userdb.so db=/etc/vsftpd/user   
account   required   /lib64/security/pam_userdb.so db=/etc/vsftpd/user

【对应刚才生成user.db文件 】

5.5 修改配置文件

vi vsftpd.conf

编写如下内容。

write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
userlist_enable=YES
tcp_wrappers=YES
allow_writeable_chroot=YES
guest_enable=YES
guest_username=vu
pam_service_name=vsftpd.vu
local_enable=YES
local_umask=077
chroot_local_user=YES
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/user_dir

5.6 常用的全局配置项

listen=YES #是否以独立运行的方式监听服务

listen_address=192.168.10.112 #设置监听FTP服务的IP地址

listen_port=21 #设置监听FTP服务的端口号

write_enable=YES #是否启动写入权限(上传、删除文件)

download_enable=YES #是否允许下载文件

dirmessage_enable=YES #用户切换目录显示.message文件

xferlog_enable=YES # 启用日志文件,记录到/var/log/xferlog

xferlog_std_format=YES # 启用标准的xferlog日志格式,禁用此项将使用vsftpd自己的格式

connect_from port20=YES # 允许服务器主动模式 (从20端口建立数据连接)

pasv_enabTe=YES # 允许服务器被动模式 pasv_max_port=24600 # 设置被动模式服务器的最大端口号 pasv_min_port=24500 # 设置黄动模式服务的最小端口 pam_service_name=vsftpd # 用户认证的PAM文件位置

(/etc/pam.d/vsftpd.vu)

userlist_enable=YES # 是否启用user_list列表文件 userlist_deny=YES # 是否禁用user_list中的用户

max_cIients=0 #限制并发客户端连接数

max_per_ip=0 # 限制同一IP地址的井发连接数 tcp_wrappers=YES #是否启用tcp_wrappers主机访问控制

chown_username=root #表示匿名用户上传的文件的拥有人是root,默认关闭

ascii_upload_enable=YES # 表示是否允许用户可以上传一个二进制文件,默认不允许

ascii_download_enable=YES #代表是否允许用户下载个一个二进制文件,默认不允许 nopriv_user=vsftpd #设置支撑vsftpd服务的宿主用户为手动建立的vsftpd用户

async_abor_enable=YES # 设定支持异步传输功能 ftpd_banner=welcome to Awei FTP servers # 设定vsftpd的登录标语 guest_enable=YES # 设置启用虚拟用户功能

guest_username=ftpuser #指定虚拟用户的宿主用户

virtual_use_local_privs=YES # 设定虚拟用户的权限符合他们的宿主用户

user_config_dir=/etc/vsftpd/vconf # 设定虚拟用户个人vsftp的配置文件存放路径

5.7 为用户建立独立的配置目录及文件

mkdir /etc/vsftpd/user_dir

ls命令查看

进入刚创建的文件夹

cd /etc/vsftpd/user_dir

vi zhao用户

vi zhao

输入如下命令(虚拟用户数据的存放路径)

local_root=/etc/vsftpd/data

5.8 创建虚拟用户数据存放位置

cd ..返回上一目录

cd ..

创建data目录

mkdir data

授权

chmod 777 data/

5.9 重启vsftp服务

systemctl restart vsftpd

5.10 登录测试

使用Xftp工具,用户名zhao,密码12345,进行登录。

cd /etc/vsftpd/data

创建一个zhao.txt文件夹。

touch zhao.txt

重点:

本地用户和虚拟用户不能同时登录、因为认证方式只有一种

本地是 pam_service_name =vsftpd

虚拟是 pam_service_name =vsftpd.vu

Xftp工具中重新登录一下,发现有zhao.txt文件,即说明成功啦~

id zhao

查看是否有zhao用户,没有得啦,O(∩_∩)O哈哈~

一. lftp介绍

1. 客户端安装:
[root@gaosh-17 ~]# yum install -y lftp
1
2. lftp使用介绍

lftp 是一个功能强大的下载工具,它支持访问文件的协议: ftp, ftps, http, https, hftp, fish.(其中ftps和https需要在编译的时候包含openssl库)。lftp的界面非常想一个shell: 有命令补全,历史记录,允许多个后台任务执行等功能,使用起来非常方便。它还有书签、排队、镜像、断点续传、多进程下载等功能。

3. lftp常用命令
1)常见参数如下:

|命令|作用|

ls | 显示远端文件列表(!ls 显示本地文件列表)。 cd |切换远端目录(lcd 切换本地目录)。 get | 下载远端文件。 mget |下载远端文件(可以用通配符也就是 *)。 pget | 使用多个线程来下载远端文件, 预设为五个。 mirror| 下载/上传(mirror -R)/同步 整个目录。 put | 上传文件。 mput | 上传多个文件(支持通配符)。 mv | 移动远端文件(远端文件改名)。 rm | 删除远端文件。 mrm| 删除多个远端文件(支持通配符)。 mkdir | 建立远端目录。 rmdir | 删除远端目录。 pwd | 显示目前远端所在目录(lpwd 显示本地目录)。 du | 计算远端目录的大小 ! | 执行本地 shell的命令(由于lftp 没有 lls, 故可用 !ls 来替代) lcd |切换本地目录 lpwd | 显示本地目录 alias |定义别名 bookmark |设定书签。 exit | 退出ftp

2) 补充说明:
  1. ftp只能上传和下载文件,不能对文件夹进行操作,如果想上传/下载文件夹需要进行压缩/解压缩操作

  2. ftp服务器登录通常使用匿名登录方式(用户名:anonymous或者ftp,匿名用户只能在指定目录范围内登录)

  3. lftp第三方ftp客户端,可以进行目录操作

三. 使用举例
1. 使用普通用户登录

使用tom用户登录

[root@gaosh-17 ~]# lftp tom@192.168.1.17
口令: 
lftp tom@192.168.1.17:~> ls            
drwxr-xr-x    2 1001     1001            6 Jul 17 13:46 tom-test
lftp tom@192.168.1.17:~> 
12345
2. 下载和上传
1)下载测试: get,mget
[root@gaosh-64 ~]# mkdir pgtest
[root@gaosh-64 ~]# cd pgtest/
[root@gaosh-64 pgtest]# touch aaa

[root@gaosh-64 pgtest]# lftp 192.168.1.17
lftp 192.168.1.17:~> cd pub/
lftp 192.168.1.17:/pub> ls
-rw-r--r--    1 14       50           2523 Jul 18 05:33 CentOS-Base.repo

lftp 192.168.1.17:/pub> mget -c CentOS-Base.repo 
2523 bytes transferred

123456789101112

2) 上传测试 put ,mput

匿名用户家目录/var/ftp权限是755,这个权限是不能改变的 为了能够写入,我们先在/var/ftp下创建一个文件,pgtest . 然后给予pgtest权限。

vsftpd服务器:

[root@gaosh-17 ~]# cd /var/ftp/
[root@gaosh-17 ftp]# mkdir pgtest
[root@gaosh-17 ftp]# chmod -R 777 pgtest/

1234

客户端上传测试:

[root@gaosh-64 pgtest]# lftp 192.168.1.17
​
lftp 192.168.1.17:~> ls
drwxrwxrwx    2 0        0               6 Jul 18 07:20 pgtest
dr-xr-xr-x    2 0        0              30 Jul 18 05:43 pub
lftp 192.168.1.17:/> cd pgtest/
lftp 192.168.1.17:/pgtest> put aaa
lftp 192.168.1.17:/pgtest> ls
-rw-------    1 14       50              0 Jul 18 07:21 aaa


评论