linux下vsftpd相关知识

在linux系统中,安装ftp通常用的是vsftp,下面讲解vsftp的相关知识。

1、两种模式

vsftp服务端有两种模式,分别是主动模式和被动模式:(默认情况下是被动模式)

  • 主动模式:

PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:"我打开了X端口,你过来连接我"。于是服务器从20端口向客户端的X端口发送连接请求,建立 一条数据链路来传送数据。

即 :

命令连接:客户端 >1024 端口 → 服务器 21 端口

数据连接:客户端 >1024 端口 ← 服务器 20 端口

  • 被动模式

PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时, 服务器在命令链路上用PASV命令告诉客户端:"我打开了X端口,你过来连接我"。于是客户端向服务器的X端口发送连接请求,建立一条数据链路来传送数据。

即:

命令连接:客户端 >1024 端口 → 服务器 21 端口

数据连接:客户端 >1024 端口 ← 服务器 >1024 端口

2、连接模式选择

被动模式下如果服务器存在防火墙,需要开的端口除了命令连接端口21之外,还要开客户端连接服务器的端口,这个端口可以人为指定一个区间。

被动模式如果存在NAT,客户端连接服务器的端口也需要做端口映射。

所以ftp需要通过NAT的情况下访问,一般采取被动模式。

如果是主动模式,传输数据是服务器通过20端口发起的数据传输,所以服务器只需要开21端口,但是客户端此时就是一个随机端口来连接,

客户端需要关闭防火墙或者放开端口,此时客户端的连接端口一般不能人为指定。

3、修改被动模式下服务器连接端口

修改vsftpd.conf文件,添加如下配置:

shell 复制代码
pasv_min_port=2000
pasv_max_port=2021

然后重启vsftp,命令如下:

shell 复制代码
systemctl restart vsftpd

以上配置表示客户端发起的数据传输,连接到服务器的端口为2000到2021之间的随机一个端口。

4、使用ftp命令连接

在linux系统中,使用ftp命令连接ftp服务器(该命令需要单独安装),客户端也要分主动模式和被动模式。如果不加-p参数,默认就是以主动模式连接。

shell 复制代码
#客户端以被动模式连接ftp
ftp -p [ftp_server]

5、用户锁定家目录

当匿名用户登录到ftp服务器,本身是不能切换根目录的,所以这里主要是对系统用户做限制。

不加限制以前:

shell 复制代码
lckd@lckd:~$ ftp 192.168.210.29
Connected to 192.168.210.29.
220 (vsFTPd 3.0.5)
Name (192.168.210.29:lckd): vftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
Remote directory: /home/vftp
ftp> cd /
250 Directory successfully changed.
ftp> ls
229 Entering Extended Passive Mode (|||2000|)
150 Here comes the directory listing.
dr-xr-xr-x    2 0        0               6 May 16  2022 afs
lrwxrwxrwx    1 0        0               7 May 16  2022 bin -> usr/bin
dr-xr-xr-x    5 0        0            4096 Oct 31 01:28 boot
drwxr-xr-x   20 0        0            3480 Oct 31 01:28 dev
drwxr-xr-x  142 0        0            8192 Oct 31  2024 etc
drwxr-xr-x    7 0        0              70 Oct 30 11:41 home
lrwxrwxrwx    1 0        0               7 May 16  2022 lib -> usr/lib
lrwxrwxrwx    1 0        0               9 May 16  2022 lib64 -> usr/lib64
drwxr-xr-x    2 0        0               6 May 16  2022 media
drwxr-xr-x    2 0        0               6 May 16  2022 mnt
drwxr-xr-x    3 0        0              22 Sep 04 09:51 opt
dr-xr-xr-x  521 0        0               0 Oct 31 01:28 proc
dr-xr-x---   15 0        0            4096 Oct 31 07:12 root
drwxr-xr-x   50 0        0            1320 Oct 31 06:55 run
lrwxrwxrwx    1 0        0               8 May 16  2022 sbin -> usr/sbin
drwxr-xr-x    2 0        0               6 May 16  2022 srv
dr-xr-xr-x   13 0        0               0 Oct 31 01:28 sys
drwxrwxrwt   29 0        0            4096 Oct 31 07:13 tmp
drwxr-xr-x   12 0        0             144 Aug 05 06:04 usr
drwxr-xr-x   20 0        0            4096 Aug 05 06:17 var
226 Directory send OK.

修改配置文件,添加以下参数:

shell 复制代码
vim /etc/vsftpd/vsftpd.conf

chroot_local_user=YES
chroot_list_enable=NO
allow_writeable_chroot=YES

对以上三个参数做个解释:

asciidoc 复制代码
chroot_local_user=YES: 
将所有用户限制在主目录(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户都可以逃出主目录,切换到根目录。)

chroot_list_enable=NO:
不启动限制用户的名单。YES为启用,NO禁用

chroot_list_file=/etc/vsftpd/chroot_list:
当chroot_list_enable为YES才需要配置此文件,表示例外的用户。至于是限制名单还是排除名单,
需要参考chroot_local_user的值。

allow_writeable_chroot=YES:表示让家目录可写,具体的解释在下面。

结合起来使用:

asciidoc 复制代码
当chroot_local_user=YES时,
chroot_list_enable
=YES时,表示当全部用户被锁定主目录时,而list表中的用户不受限制。
=NO时,表示不启动list表功能,也就是全部限制。

当chroot_local_user=NO时,
chroot_list_enable
=YES时,表示当全部用户不被锁定主目录时,而list表中的用户受限制。
=NO时,表示不启动list表功能,也就是全部不限制。

参见如下表格:

chroot_local_user=YES chroot_local_user=NO
chroot_list_enable=YES 所有用户都要限制在它自己家目录。一旦存在于list表中用户,可以切换家目录,不受限制。 所有用户都可以自由切换家目录。一旦存在于list表中用户,不可以切换家目录,受限制。
chroot_list_enable=NO 所有用户都要限制在它自己家目录。直接不考虑list表。 所有用户都可以自由切换家目录。直接不考虑list表。

锁定到家目录后,可能出现如下故障:

通过系统用户登录到ftp服务器,执行ls,报错如下:

shell 复制代码
500 OOPS: vsftpd: refusing to run with writable root inside chroot ()

报错原因:

shell 复制代码
从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,
则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报以上错误了。

解决办法有两种:

asciidoc 复制代码
一:去掉用户家目录的写权限:chmod a-w /home/lutixia
这种方法不建议,如果这样操作,那么用户家目录就没法创建,上传文件了。
二:就是添加上面的参数:allow_writeable_chroot=YES

6、三种用户

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

最常用的是系统用户,新建的用户可以设置为可登录和不可登录,不可登录的用户就是专门用于ftp登录的。

shell 复制代码
#可以登录系统
useradd -d /data/lckd -s /bin/bash
#不可以登录系统
useradd -d /data/lckd -s /bin/nologin
相关推荐
Fcy64814 分钟前
Linux下 进程间关系与守护进程
linux·运维·服务器·守护进程
g105655913938 分钟前
公有云_云运维服务
java·运维·服务器
码农小韩44 分钟前
Linux驱动理论(二)——Linux字符设备驱动
linux·嵌入式软件开发·linux操作系统·linux应用开发·linux驱动理论
well06121 小时前
Linux粘滞位与Makefile机制深度解析
linux·运维·服务器
再写一行代码就下班1 小时前
linux sh脚本在windows修改导致无法使用解决方式
java·linux·centos
hzxpaipai1 小时前
杭州企业官网怎么建设?从策划到上线的5步建站方法
运维·服务器·前端·网络
哲霖软件1 小时前
非标机械设备公司怎么做信息化?破解通用ERP水土不服难题
大数据·运维
额额额对了1 小时前
SPI通信
linux·c语言·汇编·单片机·嵌入式硬件·arm
子木HAPPY阳VIP2 小时前
Ubuntu 关闭防火墙操作步骤
linux·运维·ubuntu
王振超wzc2 小时前
嵌入式开发环境搭建--WM软件安装,Ubuntu操作系统安装
linux·运维·ubuntu