ftp服务及配置

本文介绍了FTP服务的基础知识,包括FTP的架构、数据连接模式、用户认证方式。重点讲解了在Linux中配置vsftpd服务,包括匿名用户、系统用户和虚拟用户的设置,以及如何解决主动模式和被动模式下的数据连接问题。
部署运行你感兴趣的模型镜像

1.ftp简介

网络文件共享服务主流的主要有三种,分别是ftp、nfs、samba。

FTP是File Transfer Protocol(文件传输协议)的简称,用于internet上的控制文件的双向传输。

FTP也是一个应用程序,基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。

在FTP的使用当中,用户经常遇到两种概念:下载和上传

下载(Download)上传(Upload)
从远程主机拷贝文件至自己的计算机上将文件从自己的计算机上拷贝至远程主机上

2. ftp架构

FTP工作于应用层,监听于tcp的21号端口,是一种C/S架构的应用程序。

下面是常用版本:

客户端工具服务端软件
lftp 命令行 filezilla 图形化vsftpd(Very Secure)

3.ftp数据连接模式

ftp有2种数据连接模式:命令连接和数据连接

  • 命令连接:是指文件管理类命令,始终在线的持久性连接,直到用户退出登录为止
  • 数据连接:是指数据传输,按需创建及关闭的连接

其中数据连接需要关注的有2点,一是数据传输格式,二是数据传输模式

数据传输格式有以下两种:

  • 文件传输
  • 二进制传输

数据传输模式也有2种:

  • 主动模式:由服务器端创建数据连接
  • 被动模式:由客户端创建数据连接

两种数据传输模式的建立过程:

传输模式建立过程
主动模式命令连接: Client(1025)–> Server(21)
客户端以一个随机端口(大于1023)来连服务器端的21号端口
数据连接: Server(20/tcp) --> Client(1025+1)
服务器端以自己的20号端口去连客户端创建命令连接时使用的随机端口+1的端口号
被动模式命令连接: Client(1110) --> Server(21)
客户端以一个随机端口来连成服务器端的21号端口
数据连接:
Client(1110+1) --> Server(随机端口)
客户端以创建命令连接的端口
+1的端口号去连服务器端通过命令连接告知自己的一个随机端口号来创建数据连接

主动模式有个弊端,因为客户端的端口是随机的,客户端如果开了防火墙,
则服务器端去连客户端创建数据连接时可能会被拒绝

4. 用户认证

ftp的用户主要有三种:

  • 虚拟用户:仅用于访问某特定服务中的资源
  • 系统用户:可以登录系统的真实用户
  • 匿名用户

5.vsftpd配置

/etc/pam.d/vsftpd       //vsftpd用户认证配置文件
[root@linux131 vsftpd]# cat /etc/pam.d/vsftpd

/etc/vsftpd/            //配置文件目录
[root@linux131 ~]# cd /etc/vsftpd/
[root@linux131 vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
                      主配置文件     迁移数据的脚本

//匿名用户(映射为ftp用户)的共享资源位置是/var/ftp
//系统用户通过ftp访问的资源位置为用户的家目录
//虚拟用户通过ftp访问的资源位置为给虚拟用户指定的映射成为的系统用户的家目录

vsftpd常见的配置参数:

参数作用
anonymous_enable=YES启用匿名用户登录
anon_upload_enable=YES允许匿名用户上传
anon_mkdir_write_enable=YES允许匿名用户创建目录,但是不能删除
anon_other_write_enable=YES允许匿名用户创建和删除目录
local_enable=YES启用本地用户登录
write_enable=YES允许本地用户有写权限
local_umask=022通过ftp上传文件的默认遮罩码
chroot_local_user=YES禁锢所有的ftp本地用户于其家目录中
chroot_list_enable=YES开启禁锢文件列表需要与chroot_list_file参数一起使用
chroot_list_file=/etc/vsftpd/chroot_list指定禁锢列表文件路径在此文件里面的用户将被禁锢在其家目录中
allow_writeable_chroot=YES允许被禁锢的用户家目录有写权限
xferlog_enable=YES是否启用传输日志,记录ftp传输过程
xferlog_std_format=YES传输日志是否使用标准格式
xferlog_file=/var/log/xferlog指定传输日志存储的位置
chown_uploads=YES是否启用改变上传文件属主的功能
chown_username=whoever指定要将上传的文件的属主改为哪个用户此用户必须在系统中存在
pam_service_name=vsftpd指定vsftpd使用/etc/pam.d下的哪个pam配置文件进行用户认证
userlist_enable=YES是否启用控制用户登录的列表文件:默认为/etc/vsftpd/user_list文件
userlist_deny=YES是否拒绝userlist指定的列表文件中存在的用户登录ftp
max_clients=#最大并发连接数
max_per_ip=#每个IP可同时发起的并发请求数
anon_max_rate匿名用户的最大传输速率,单位是“字节/秒”
local_max_rate本地用户的最大传输速率,单位是“字节/秒”
dirmessage_enable=YES启用某目录下的.message描述信息假定有一个目录为/upload,
在其下创建一个文件名为.message,在文件内写入一些描述信息,
则当用户切换至/upload目录下时会自动显示.message文件中的内容
message_file设置访问一个目录时获得的目录信息文件的文件名,默认是.message
idle_session_timeout=600设置默认的断开不活跃session的时间
data_connection_timeout=120设置数据传输超时时间
ftpd_banner=“Welcome to chenlf FTP service.”定制欢迎信息,登录ftp时自动显示
  • 修改配置
[root@linux131 ~]# vim /etc/vsftpd/vsftpd.conf
local_enable=NO            //本地无法登陆
write_enable=NO            //本地用户没有写权限
chown_username=tom         //指定要将上传的文件的属主改为哪个用户
pam_service_name=vsftpd    //指定vsftpd使用/etc/pam.d下的文件名必须一致
userlist_enable=YES       //黑名单,默认为/etc/vsftpd/user_list文件
userlist_deny=YES         //白名单
max_clients=#             //最大并发连接数,等于1就只能连接1个
max_per_ip=#              //每个IP可同时发起的并发请求数
[root@linux131 ~]# systemctl restart vsftpd  //重启服务

命令行工具ftp和lftp的使用

  • 下载安装
[root@linux131 ~]# yum -y install ftp lftp

新建一个tom用户
[root@linux131 ~]# useradd tom
[root@linux131 ~]# echo '123456' |passwd --stdin tom
  • ftp的使用:
[root@linux131 ~]# ftp 192.168.152.131
Connected to 192.168.152.131 (192.168.152.131).
220 (vsFTPd 3.0.3)
Name (192.168.152.131: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 (192,168,152,131,97,48).
150 Here comes the directory listing.
drwxr-xr-x    2 1005     1005            6 Oct 15 08:58 haha
drwxr-xr-x    2 1005     1005            6 Oct 15 08:58 xixi
226 Directory send OK.

ftp> ?     //查看它可以使用的命令
Commands may be abbreviated.  Commands are:
!             debug        mdir      sendport   site
$             dir查看       mget      put上传     size
account       disconnect   mkdir创建目录 pwd      status
append        exit退出      mls       quit       struct
ascii         form         mode      quote      system
bell          get下载      modtime    recv       sunique
binary        glob         mput      reget      tenex
bye           hash         newer     rstatus    tick
case          help         nmap      rhelp      trace
cd            idle         nlist     rename     type
cdup          image        ntrans    reset      user
chmod         lcd进入      open       restart    umask
close         ls           prompt    rmdir     verbose
cr            macdef       passive   runique    ?
delete删除     mdelete      proxy     send
  • lftp的使用:
[root@linux131 ~]# lftp -u tom,123456 192.168.152.131    //加-u直接登陆
lftp tom@192.168.152.131:~> ls
drwxr-xr-x    2 1005     1005            6 Oct 15 08:58 haha
-rw-rw-r--    1 1005     1005            0 Oct 15 09:20 xiaoli
drwxr-xr-x    2 1005     1005           61 Oct 15 09:04 xixi

删除文件
lftp tom@192.168.152.131:~> rm -f xiaoli
rm ok, `xiaoli' removed            
lftp tom@192.168.152.131:~> ls
drwxr-xr-x    2 1005     1005            6 Oct 15 08:58 haha
drwxr-xr-x    2 1005     1005           61 Oct 15 09:04 xixi
[tom@linux131 ~]$ ls
haha  xixi

创建目录
lftp tom@192.168.152.131:~> mkdir laowang
mkdir ok, `laowang' created
lftp tom@192.168.152.131:~> ls
drwxr-xr-x    2 1005     1005            6 Oct 15 08:58 haha
drwxr-xr-x    2 1005     1005            6 Oct 15 09:29 laowang
drwxr-xr-x    2 1005     1005           61 Oct 15 09:04 xixi

get下载xiaoli文件直接退出
[root@linux131 ~]# lftp -u tom,123456 -e "get xiaoli;exit" 192.168.152.131
[root@linux131 ~]# ls                
anaconda-ks.cfg  xiaoli

mirror -R上传目录,mirror下载目录
[root@linux131 ~]# ls
anaconda-ks.cfg  lili  xiaoli
lftp tom@192.168.152.131:~> mirror -R lili
lftp tom@192.168.152.131:~> ls          
drwxr-xr-x    2 1005     1005            6 Oct 15 08:58 haha
drwxr-xr-x    2 1005     1005            6 Oct 15 09:29 laowang
drwxr-xr-x    2 1005     1005            6 Oct 15 09:37 lili
drwxr-xr-x    2 1005     1005           61 Oct 15 09:04 xixi

lftp tom@192.168.152.131:~> mirror laowang
[root@linux131 ~]# ls
anaconda-ks.cfg  laowang  lili  xiaoli

下载目录并改名
lftp tom@192.168.152.131:~> mirror laowang haha
[root@linux131 ~]# ls
anaconda-ks.cfg  haha  laowang  lili  xiaoli

配置匿名用户ftp

  • 下载安装vsftpd
[root@linux131 ~]# yum -y install vsftpd
[root@linux131 vsftpd]# pwd
/etc/vsftpd
[root@linux131 vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
[root@linux131 vsftpd]# vim vsftpd.conf   //修改配置文件
anonymous_enable=YES    //找到这一行,最后的值改为YES

[root@linux131 pub]# pwd    //新建一个文件,确认位置
/var/ftp/pub
[root@linux131 pub]# touch wangyibo
  • 登录验证
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  • 这个共享目录只能下载文件,无法删除文件和上传文件
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 修改主配置文件

找到以下两行进行修改
[root@linux131 vsftpd]# vim vsftpd.conf
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES

去掉注释,再加上最后一行
anon_upload_enable=YES         //可以上传文件
anon_mkdir_write_enable=YES    //可以创建文件
anon_other_write_enable=YES    //可以删除文件

设置ftp的权限
[root@linux131 ~]# setfacl -m u:ftp:rwx /var/ftp/pub/
[root@linux131 ~]# getfacl /var/ftp/pub/
getfacl: Removing leading '/' from absolute path names
# file: var/ftp/pub/
# owner: root
# group: root
user::rwx
user:ftp:rwx        //可读可写可执行
group::r-x
mask::rwx
other::r-x

重启服务
[root@linux131 vsftpd]# systemctl restart vsftpd
  • 验证:可上传,可创建,可删除
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
查看上传的文件权限为600
[root@linux131 ~]# ll /var/ftp/pub/
total 0
drwx------ 2 ftp ftp 6 Oct 14 16:43 新文件夹
-rw------- 1 ftp ftp 0 Oct 14 16:43 肖战.txt

修改配置
[root@linux131 ~]# vim /etc/vsftpd/vsftpd.conf 
找到第一行,再下面加上一行
local_umask=022
anon umask=022     //添加匿名用户的遮罩码

[root@linux131 vsftpd]# systemctl restart vsftpd   //重启服务

再上传的文件权限就改为644
[root@linux131 ~]# ll /var/ftp/pub/
total 0
-rw-r--r-- 1 ftp ftp 0 Oct 14 16:59 wangyibo
drwx------ 2 ftp ftp 6 Oct 14 16:43 新文件夹
-rw------- 1 ftp ftp 0 Oct 14 16:43 肖战.txt

配置系统用户ftp

  • 创建新用户,设置密码
[root@linux131 vsftpd]# useradd xiaozhan
[root@linux131 vsftpd]# echo '123456'|passwd --stdin xiaozhan
Changing password for user xiaozhan.
passwd: all authentication tokens updated successfully.

[root@linux131 vsftpd]# systemctl restart vsftpd   //重启服务

新建的文件在用户的家目录
[root@linux131 vsftpd]# ls ~xiaozhan
新文件夹
  • 登录验证:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

配置虚拟用户ftp

//虚拟用户的配置:
    //所有的虚拟用户会被统一映射为一个指定的系统帐号,访问的共享位置即为此系统帐号的家目录
    //各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定

    //虚拟用户帐号的存储方式:
    1.文件:编辑文件,此文件需要被编码为hash格式。
        奇数行为用户名
        偶数行为密码
    2.关系型数据库的表中:
        通过即时查询数据库完成用户认证
        mysql库:pam要依赖于pam_mysql软件,可以通过epel源yum安装
创建文本格式的用户名、密码列表,例如若要添加两个用户tom、jerry
[root@linux131 ~]# cat /etc/vsftpd/lp.list
tom       
123456     //密码
jerry
000000     //密码
[root@linux131 ~]# ls /etc/vsftpd/
ftpusers  lp.list  user_list  vsftpd.conf  vsftpd_conf_migrate.sh

将刚创建的文本格式用户名、密码文件使用db4工具转换成数据库文件
[root@linux131 vsftpd]# db_load -T -t hash -f lp.list lp.db
[root@linux131 vsftpd]# ls
ftpusers  lp.db  lp.list  user_list  vsftpd.conf  vsftpd_conf_migrate.sh

为提高虚拟用户帐号文件的安全性,应将文件权限设置为600,以避免数据外泄
[root@linux131 vsftpd]# chmod 600 lp.*
[root@linux131 vsftpd]# ll
total 36
-rw------- 1 root root 12288 Oct 14 17:25 lp.db
-rw------- 1 root root    24 Oct 14 17:18 lp.list

添加虚拟用户的映射帐号、创建ftp根目录。例如要将使用的ftp根目录设置为/opt/ftp
//映射帐号的名称为vftp,可以执行以下操作
[root@linux131 vsftpd]# useradd -d /opt/ftp -s /sbin/nologin vftp
[root@linux131 vsftpd]# chmod 755 /opt/ftp     //更改权限
[root@linux131 vsftpd]# ll /opt/
total 0
drwxr-xr-x  2 vftp    vftp    62 Oct 14 17:31 ftp

[root@linux131 pam.d]# pwd
/etc/pam.d
[root@linux131 pam.d]# mv vsftpd{,-bak}  //移动文件备份

自己配置一个新的vsftpd
[root@linux131 pam.d]# vim vsftpd
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/lp    
account required pam_userdb.so db=/etc/vsftpd/lp

[root@linux131 pam.d]# ls
vsftpd-bak   //备份
vsftpd       //重新配置的文件

[root@linux131 vsftpd]# mkdir xing

修改vsftpd配置文件,添加虚拟用户支持,为不同的虚拟用户建立独立的配置文件
[root@linux131 ~]# vim /etc/vsftpd/vsftpd.conf   //最后加上这4行
guest_enable=YES                  //虚拟账户打开
guest_username=vftp               //虚拟账户映射的账户为vftp
user_config_dir=/etc/vsftpd/xing     //用户配置目录写入的路径
allow_writeable_chroot=YES        //允许写入

设置tom用户只有默认的下载权限,只需要创建一个名为tom的空文件即可
[root@linux131 xing]# pwd
/etc/vsftpd/xing
[root@linux131 xing]# touch tom

设置jerry用户可上传文件、创建目录、删除文件
[root@linux131 xing]# cat jerry
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

[root@linux131 xing]# ll
total 4
-rw-r--r-- 1 root root 82 Oct 14 18:09 jerry
-rw-r--r-- 1 root root  0 Oct 14 18:04 tom

[root@linux131 xing]# systemctl restart vsftpd   //重启服务

在/opt/ftp创建两个文件
[root@linux131 ftp]# touch abc
[root@linux131 ftp]# touch 123
[root@linux131 ftp]# ls
123  abc
  • 验证Tom:只能下载,不能上传,不能删除,不能新建
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 验证Jerry:能上传,能删除,能新建
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值