标准生产ftp建设

2021-01-04 17:56:30 浏览数 (1)

背景:

生产环境经常会有传输导数情况存在,应生产人员要求部署相关ftp服务。

需要访问FTP服务端提供的资源时,可以使用专门的FTP客户端/管理工具(FTP命令程序、Filezilla图形工具),也可以使用Web浏览器、下载工具(比如wget)等支持FTP协议的通用软件。

定位匿名访问FTP资源的地址形式如下:

ftp://服务器地址/,对应服务器上的 /var/ftp/ 目录

ftp://服务器地址/path/to/file,对应服务器上的 /var/ftp/path/to/file 文件

对于要求登录验证才能访问的FTP资源,可以在地址中指定用户名、密码信息:

ftp://user:pass@服务器地址/,对应服务器上的用户家目录 ~user/

ftp://user:pass@服务器地址/path/to/file,对应服务器上的 ~user/path/to/file 文件

环境:

两台物理机IP为192.168.1.3与192.168.1.5

步骤:

1、使用yum安装vsftpd软件包

代码语言:javascript复制
[root@bigdata1 ~]# yum -y install vsftpd

2、启用vsftpd服务,并设为开机自动运行

代码语言:javascript复制
[root@bigdata1 ~]# service vsftpd restart;chkconfig vsftpd on
Redirecting to /bin/systemctl restart  vsftpd.service
注意:正在将请求转发到“systemctl enable vsftpd.service”。
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
[root@bigdata1 ~]# netstat -anptu |grep vsftpd
tcp6       0      0 :::21                   :::*                    LISTEN      1288/vsftpd 

3、为ftp访问建立测试文件

在匿名FTP起始目录/var/ftp/下默认有一个pub/子目录(用来提供开放资源),在此目录下建立一个名为anon.txt的文件

代码语言:javascript复制
[root@bigdata1 ~]# cd  /var/ftp/pub/
[root@bigdata1 pub]# echo '1111111'>a.txt 
[root@bigdata1 pub]# cat a.txt 

1111111

4、新建用户list并设置好密码,此用户即可用做ftp用户使用,在list家目录下建立一个名为list.txt的文件,内容随意。

代码语言:javascript复制
[root@bigdata1 pub]# useradd list
[root@bigdata1 pub]# echo 123456 |passwd --stdin list

更改用户 list 的密码 。

passwd:所有的身份验证令牌已经成功更新。

代码语言:javascript复制
[root@bigdata1 pub]# su - list
[list@bigdata1 ~]$ touch b.txt
[list@bigdata1 ~]$ echo '123456' >b.txt 
[list@bigdata1 ~]$ 登出

5、测试匿名用户登陆

代码语言:javascript复制
[root@bigdata3 yum.repos.d]# ftp 192.168.1.3
Connected to 192.168.1.3 (192.168.1.3).
220 (vsFTPd 3.0.2)
Name (192.168.1.3:root): ftp        匿名用户ftp
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,1,3,240,202).
150 Here comes the directory listing.
drwxr-xr-x    2 0        0              18 Sep 02 13:44 pub
226 Directory send OK.
ftp> 

6、用户list测试

代码语言:javascript复制
[root@bigdata3 yum.repos.d]# ftp 192.168.1.3
Connected to 192.168.1.3 (192.168.1.3).
220 (vsFTPd 3.0.2)
Name (192.168.1.3:root): list
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,1,3,70,152).
150 Here comes the directory listing.
-rw-rw-r--    1 1001     1001            0 Sep 02 13:59 b.txt
226 Directory send OK.

衍生问题解决

对于匿名用户ftp来说,默认已经启用禁锢(仅限于起始目录/var/ftp);而对FTP本地用户来说,默认并没有禁锢(不仅可以访 问宿主目录,还可以跳转到其他目录),存在一定安全隐患。若要禁锢本地用户,只需设置 chroot_local_user = YES即可。

vsftpd服务提供了两个用户列表文件,其中 /etc/vsftpd/ftpusers 作为默认的黑名单使用,列在此文件内的用户将无法登入FTP。

而另一个文件 /etc/vsftpd/user_list只是一个用户名列表,根据配置参数 userlist_enable 的值是YES(默认)还是NO来决定是否启用此列表。一旦启用此列表文件以后,如果配置参数 userlist_deny的值是YES(默认)则此列表为黑名单(拒绝指定的用户),如果是NO则此列表作为白名单使用。

不安全隐患点01:

用户list可登陆ftp机器下载和查看本机所有有权限文件

代码语言:javascript复制
 [root@bigdata3 yum.repos.d]# ftp 192.168.1.3
Connected to 192.168.1.3 (192.168.1.3).
220 (vsFTPd 3.0.2)
Name (192.168.1.3:root): list
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,1,3,93,167).
150 Here comes the directory listing.
-rw-rw-r--    1 1001     1001            0 Sep 02 13:59 b.txt
226 Directory send OK.
ftp> cd /               切换到ftp-server的机器/目录下
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (192,168,1,3,249,224).
150 Here comes the directory listing.
lrwxrwxrwx    1 0        0               7 Aug 16 14:46 bin -> usr/bin
dr-xr-xr-x    4 0        0            4096 Aug 16 14:50 boot
drwxr-xr-x   20 0        0            3160 Sep 02 09:54 dev
drwxr-xr-x   77 0        0            8192 Sep 02 13:52 etc
drwxr-xr-x    4 0        0              30 Sep 02 13:52 home
lrwxrwxrwx    1 0        0               7 Aug 16 14:46 lib -> usr/lib
lrwxrwxrwx    1 0        0               9 Aug 16 14:46 lib64 -> usr/lib64
drwxr-xr-x    2 0        0               6 Aug 12  2015 media
drwxr-xr-x    2 0        0               6 Aug 12  2015 mnt
drwxr-xr-x    3 0        0              25 Aug 16 18:30 opt
dr-xr-xr-x  355 0        0               0 Sep 02 09:54 proc
dr-xr-x---    4 0        0            4096 Aug 16 18:31 root
drwxr-xr-x   21 0        0             600 Sep 02 10:02 run
lrwxrwxrwx    1 0        0               8 Aug 16 14:46 sbin -> usr/sbin
drwxr-xr-x    2 0        0               6 Aug 12  2015 srv
dr-xr-xr-x   13 0        0               0 Sep 02 09:54 sys
drwxrwxrwt    7 0        0            4096 Sep 02 10:35 tmp
drwxr-xr-x   13 0        0            4096 Aug 16 14:46 usr
drwxr-xr-x   20 0        0            4096 Sep 02 10:02 var
dr-xr-xr-x    8 0        0            2048 Dec 09  2015 yum
226 Directory send OK.

修改vsftpd.conf配置文件,启用禁锢本地用户的设置,建议在配置文件末尾修改,不去修改配置文件中注释。

代码语言:javascript复制
chroot_local_user=YES
allow_writeable_chroot=YES

测试

代码语言:javascript复制
[root@bigdata3 ~]# ftp 192.168.1.3     连接ftp
Connected to 192.168.1.3 (192.168.1.3).
220 (vsFTPd 3.0.2)
Name (192.168.1.3:root): list     用户list
331 Please specify the password.
Password:            密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls         查看当前目录文件,为list家目录
227 Entering Passive Mode (192,168,1,3,121,213).
150 Here comes the directory listing.
-rw-rw-r--    1 1001     1001            0 Sep 02 13:59 b.txt
226 Directory send OK.
ftp> cd /            变换目录
250 Directory successfully changed.
ftp> ls              查看目录仍然为用户家目录,禁锢生效
227 Entering Passive Mode (192,168,1,3,32,249).
150 Here comes the directory listing.
-rw-rw-r--    1 1001     1001            0 Sep 02 13:59 b.txt
226 Directory send OK.

使用FTP黑白名单:

1、测试FTP黑名单文件/etc/vsftpd/ftpusers

添加一个用户mike,并设好密码,并将mike加入到FTP黑名单

代码语言:javascript复制
[root@bigdata1 pub]# vi /etc/vsftpd/ftpusers

测试mike登陆失败

代码语言:javascript复制
[root@bigdata3 ~]# ftp 192.168.1.3
Connected to 192.168.1.3 (192.168.1.3).
220 (vsFTPd 3.0.2)
Name (192.168.1.3:root): mike
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.

2、测试FTP白名单文件/etc/vsftpd/user_list

修改vsftpd服务配置,确认userlist_enable=YES,并在其下方添加一行新的配置语句userlist_deny=NO,然后重载服务

测试:

新增hadoop用户放置在白名单中进行测试,只有加入白名单的hadoop可以登陆。

代码语言:javascript复制
[root@bigdata3 ~]# ftp 192.168.1.3
Connected to 192.168.1.3 (192.168.1.3).
220 (vsFTPd 3.0.2)
Name (192.168.1.3:root): hadoop
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,1,3,62,50).
150 Here comes the directory listing.
226 Directory send OK.
ftp> 221 Goodbye.
[root@bigdata3 ~]# ftp 192.168.1.3
Connected to 192.168.1.3 (192.168.1.3).
220 (vsFTPd 3.0.2)
Name (192.168.1.3:root): list
530 Permission denied.
Login failed.
ftp> 221 Goodbye.
[root@bigdata3 ~]# ftp 192.168.1.3
Connected to 192.168.1.3 (192.168.1.3).
220 (vsFTPd 3.0.2)
Name (192.168.1.3:root): mike
530 Permission denied.
Login failed.

当用户即在白名单又在黑名单中用户虽然被接受,但在输入密码后仍然被拒绝。

FTP并发以及带宽限制

关于vsftpd服务器的并发及带宽限制,主要用到以下配置参数

max_clients:限制并发的客户端个数

max_per_ip:限制每个客户机IP的并发连接数

anon_max_rate:匿名最大速度(字节/秒)

local_max_rate:验证用户最大速率(字节/秒)

限制并发连接数

修改vsftpd服务配置,在末尾添加并发限制并重载服务

代码语言:javascript复制
[root@bigdata3 ~] vim /etc/vsftpd/vsftpd.conf
max_clients=100
max_per_ip=2

访问vsftpd服务器时,只要客户端不主动断开连接,且闲置不超过300秒(默认),vsftpd服务器都会保留此连接。因此可以开多个命令终端同时登入此FTP服务器,以测试并发限制效果。

匿名登入FTP服务器且不退出,前两次连接都是成功的,当第三次(超过2)连接时,会出现“There are too many connections .. ..”的报错提示,连接失败

代码语言:javascript复制
[root@bigdata3 ~]# ftp 192.168.1.3
Connected to 192.168.1.3 (192.168.1.3).
421 There are too many connections from your internet address.      //连接数超限
ftp> pwd
Not connected.                                  //未连接成功
ftp> quit

限制FTP传输速度

修改vsftpd服务配置,在末尾添加速度限制,并重载服务

代码语言:javascript复制
[root@svr5 ~]# vim /etc/vsftpd/vsftpd.conf
.. ..
anon_max_rate=50000
local_max_rate=500000
[root@svr5 ~]# service vsftpd reload
关闭 vsftpd:                                              [确定]
为 vsftpd 启动 vsftpd:                                    [确定]

匿名登陆问题

vi /etc/vsftpd/vsftpd.conf

修改其中参数

anonymous_enable=YES 将其改成NO

0 人点赞