Linux系统的FTP服务优化详解

FTP 服务器简介

FTP 是 File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于 Internet 上的控制文件的双向传输。同时,它也是一个应用程序(Application)。 基于不同的操作系统有不同的 FTP 应用程序,而所有这些应用程序都遵守同一种协议以传输文件。
在 FTP 的使用当中,用户经常遇到两个概念:“下载”(Download)和"上传"(Upload)。

什么是vsftpd

vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、HP-UNIX 等系统上面,是一个完全免费的、开放源代码的 ftp 服务器软件,支持很多其他的FTP 服务器所不支持的特征。

安装vsftpd

(1). 首先需要在服务端主机用yum命令安装 vsftpd :
Linux系统的FTP服务优化详解_第1张图片
如下安装成功:
Linux系统的FTP服务优化详解_第2张图片
(2). 开启vsftpd服务,并设置为开机自启
Linux系统的FTP服务优化详解_第3张图片
(3). 关闭firewalld防火墙服务,并设置为开机不启动
Linux系统的FTP服务优化详解_第4张图片
(4). 在客户端主机安装lftp服务
Linux系统的FTP服务优化详解_第5张图片
安装成功之后使用lftp命令连接服务端主机ip地址,如下:
Linux系统的FTP服务优化详解_第6张图片


vsftpd服务的配置参数

客户端访问时, 用户身份可以分为以下三种:
(1). 匿名用户:没有指定用户身份, 默认以ftp身份实现从服务器上传和下载文件;
(2). 本地用户: -u指定用户身份,用户是服务器端的用户
(3). 虚拟用户: -u指定用户身份,但是服务器端并不存在该用户(id username)

vsftpd服务有两个重要的目录,一个是默认发布目录:/var/ftp;另一个是配置目录:/etc/vsftpd
其中 /etc/vsftpd/vsftpd.conf 文件是 vsftp 的配置文件,修改相应的配置参数可以达到不同的目的。

下面我们就针对三种不同身份的用户进行相应的配置参数设定以及对应的效果测试。

1. 匿名用户相关参数设定

(1). 匿名用户登录限制参数

anonymous_enable=YES | NO

该参数默认设定为YES,当参数设定为NO时,将禁止匿名用户登录。进入到配置文件中:

vim /etc/vsftpd/vsftpd.conf

进入文件中后编辑以下内容:
在这里插入图片描述
然后wq保存退出,一定要记得重启vsftpd服务。

systemctl restart vsftpd

然后客户端连接测试:
Linux系统的FTP服务优化详解_第7张图片
(2). 匿名用户上传参数设定

通过设置以下参数可以让匿名用户在公共目录中上传文件:

write_enable=YES
anon_upload_enable=YES

配置文件参数默认如下:
Linux系统的FTP服务优化详解_第8张图片
在配置文件中修改以上参数如下:
Linux系统的FTP服务优化详解_第9张图片
另外根据提示还需要将SElinux的强制模式修改为宽容模式Permissive,具体的SElinux设定后面文章会详细介绍,修改如下:
在这里插入图片描述
然后需要我们在 /var/ftp/目录下创建一个可供上传的公共目录:
Linux系统的FTP服务优化详解_第10张图片
然后还需要给该目录修改权限,由于匿名用户登录是以ftp用户身份去登录的,在该目录权限中其它用户没有写的权限,给其它用户加上写权限又不太安全,因此需要改所属人或者所属组:可以将所属人直接改为ftp,这样匿名用户就有了写权限,就可以上传文件了;或者将所属组改为ftp,再给组加上写的权限,这样也可以实现上传的功能。
下面将上传目录 /var/ftp/upload/ 修改所属人为ftp用户:
在这里插入图片描述
然后在客户端连接测试并上传:
Linux系统的FTP服务优化详解_第11张图片
(3). 匿名用户家目录修改

anon_root=/direcotry

通过以上参数的修改可以指定匿名用户的家目录,默认是没有这一参数的,需要手动在配置文件中添加,如下:
Linux系统的FTP服务优化详解_第12张图片
然后创建 /public 这一目录,并在里面创建三个文件,如下:
在这里插入图片描述
然后在客户端连接测试:
Linux系统的FTP服务优化详解_第13张图片
(4). 匿名用户上传文件默认权限修改

anon_umask=xxx

这一参数默认也是没有的,需要手动进行添加,如下:
在这里插入图片描述
然后在客户端连接测试:
Linux系统的FTP服务优化详解_第14张图片
(5). 匿名用户建立目录参数

anon_mkdir_write_enable=YES | NO

当参数设定为YES 时为匿名用户可以创建目录,参数设定为NO 时为不可创建目录,文件默认如下:
在这里插入图片描述
然后修改为如下:
在这里插入图片描述
然后在客户端连接测试:
Linux系统的FTP服务优化详解_第15张图片
(6). 匿名用户下载参数

anon_world_readable_only=YES | NO

设定参数值为NO 表示匿名用户可以下载,该参数在配置文件中也是没有的,需要手动添加,添加如下:
在这里插入图片描述
然后在客户端连接测试:
Linux系统的FTP服务优化详解_第16张图片
(7). 匿名用户其它写权限

anon_other_write_enable=YES | NO

匿名用户是否有其它写的权限,设定为YES时为匿名用户可以进行其它写的操作,该项也需要手动在配置文件中添加,如下:
在这里插入图片描述
然后在客户端连接测试:
删除文件:
Linux系统的FTP服务优化详解_第17张图片
文件或目录重命名:
Linux系统的FTP服务优化详解_第18张图片
(8). 匿名用户使用的用户身份修改

chown_uploads=YES
chown_username=student

匿名用户默认是以ftp身份登录的,通过修改上面的参数,可以修改匿名用户的登录的参数,配置文件默认如下:
在这里插入图片描述
修改参数如下:
在这里插入图片描述
然后在客户端连接测试:
Linux系统的FTP服务优化详解_第19张图片
(9). 最大上传和下载速率设定

anon_max_rate=xxxx

该参数在配置文件中也没有,需要手动添加,参数可以设定一个值,作为上传和下载的最大值。在配置文件中设定如下:
在这里插入图片描述
在测试之前需要在共享文件中放一个比较大的文件进行传输测试,如下:
在这里插入图片描述
然后在客户端连接测试:
Linux系统的FTP服务优化详解_第20张图片
(10). 最大链接数设定

max_clients=2

通过此参数的设定,可以闲置用户链接的最大数量,在此设定为2进行测试,在配置文件中编辑如下:
在这里插入图片描述
然后在客户端连接测试:
Linux系统的FTP服务优化详解_第21张图片

2. 本地用户相关参数设定

配置文件中有两个参数是限定本地用户的:
local_enable=YES | NO
该参数作用是本地用户登录限制,默认设定为YES,代表本地用户可以登录。

write_enable=YES | NO
该参数作用是本地用户写权限限制,默认设定为YES,代表本地用户有写的权限。

下面看几个关于本地用户的其它参数设置:

(1). 本地用户家目录修改

local_root=/directory

通过该参数的设定可以修改本地用户登录后的家目录,在配置文件中,编辑如下内容:
在这里插入图片描述
然后在客户端以student用户身份进行连接测试:
Linux系统的FTP服务优化详解_第22张图片
(2). 本地用户上传文件权限

local_umask=xxx

该参数和匿名用户上传文件权限参数是一样的,通过修改umask值,可以改变上传文件的默认权限,在此就不多介绍了。

(3). 限制本地用户浏览根目录

如果任意的本地用户链接之后可以进入到根目录,这样将非常的不安全,因此需要修改某些参数来限制本地用户浏览根目录,达到安全的目的。

chroot_local_user=YES

该参数设定为YES效果是所有用户将被锁定到自己的家目录中,在配置文件中编辑如下:
Linux系统的FTP服务优化详解_第23张图片
然后还需要给本地用户去掉写权限,这样才跟安全,命令如下:

chmod u-w /home/*

在这里插入图片描述

然后在客户端以student用户身份进行连接测试:
Linux系统的FTP服务优化详解_第24张图片
(4). 限制本地用户登陆

在vsftpd服务的配置目录中有两个黑名单文件是专门存放限制本地用户登录的名单,如下:
vim /etc/vsftpd/ftpusers   用户黑名单
vim /etc/vsftpd/user_list   用户临时黑名单

然后再通过配置文件中下面的参数,可以实现黑白名单转换:

userlist_deny=NO

当参数设定为NO时,user_list名单为白名单,当设定为YES时,user_list名单为黑名单。
再配置文件中编辑如下:
在这里插入图片描述
然后在/etc/vsftpd/user_lis文件中加入 student用户:
Linux系统的FTP服务优化详解_第25张图片然后在客户端以student用户身份进行连接测试:
Linux系统的FTP服务优化详解_第26张图片

3. ftp虚拟用户相关参数设定

在看虚拟用户参数设定之前需要先进行虚拟用户的创建,下面是创建虚拟用户的具体步骤:

Step1 创建虚拟帐号身份的文件

在 /etc/vsftpd/ 目录下任意创建一个文件用于存放虚拟帐号的身份以及密码,创建如下文件,文件名可以随意:

vim /etc/vsftpd/loginusers

在文件中编辑如下内容:
Linux系统的FTP服务优化详解_第27张图片
Step2 对用户帐号和密码进行加密
加密命令如下:

db_load -T -t hash -f /etc/vsftpd/loginusers loginusers.db

这里的-T参数允许应用程序能够将文本文件转译载入进数据库中,如果指定了参数-T,那么一定要追跟子参数-t,-t参数是用来指定转译载入的数据库类型,在这里设定为hash哈希加密;-f 参数后面接包含用户名和密码的文本文件,后面那个文件是转换之后将输出到哪个文件中去。
执行该命令之后,为了安全起见,需要将存放密码的文件和转换之后的文件缩减权限,如下:

chmod 600 /etc/vsftpd/loginusers*

Step3 编辑帐号和密码处理的库文件

在/etc/pam.d下的文件存放的各个命令的pam模块的配置,在该目录下创建一个文件,文件名可以随意,如下:

vim /etc/pam.d/ckvsftpd

在文件中编辑如下内容:
在这里插入图片描述
Step4 编辑vsftpd配置文件开启虚拟用户登录

需要编辑的参数如下:

  • pam_service_name=ckvsftpd   虚拟用户信息认证文件名称
  • guest_enable=YES   虚拟用户开启

在配置文件中编辑如下:
在这里插入图片描述

虚拟用户创建好了之后,下面就看一下关于虚拟用户的相关参数设定:

(1). 虚拟用户身份指定

在创建了多个虚拟用户之后,它们并不是实际存在的,从上面的创建过程可以看到,虚拟账户只是在文件中的文字而已。因此还需要创建一个实际的账户,并在配置文件中指定虚拟用户登录时使用该身份进行登录。
首先在服务端创建一个这样的账户,如下:
Linux系统的FTP服务优化详解_第28张图片
另外还需要给 /home/ftpuser/目录的所属人减去写的权限,这样会更安全,如下:
在这里插入图片描述
配置文件中指定虚拟用户登录身份的参数是:

guest_username=ftpuser

在该参数后面写一个用户,则虚拟用户在登录时就以该用户身份登录,在配置文件中编辑如下:
在这里插入图片描述
然后在客户端以创建好的任意一个虚拟用户身份进行连接测试:
Linux系统的FTP服务优化详解_第29张图片
(2). 虚拟用户家目录独立设定

指定虚拟用户家目录之前首先需要创建目录用于虚拟用户的家目录,并适当修改权限,如下:

mkdir /ftpuserhome
chgrp ftpuser /ftpuserhome
chmod g+s /ftpuserhome
mkdir /ftpuserhome/ftpuser{1..3}

Linux系统的FTP服务优化详解_第30张图片
另外需要分别在每一个指定家目录中创建一个文件用于标识测试时是否进入家目录:
在这里插入图片描述
在配置文件中需要添加的指定虚拟用户家目录的参数如下:

  • local_root=/ftpuserhome/ $USER   定义各个用户的本地家目录

  • user_sub_token=$USER   在本地家目录中插入用户名

其中的$USER 是当不同的虚拟用户登录时会产生对应不同的用户名。在配置文件中添加如下:
Linux系统的FTP服务优化详解_第31张图片
然后在客户端以创建好的任意一个虚拟用户身份进行连接测试:
Linux系统的FTP服务优化详解_第32张图片
分别成功进入到各自的家目录中。

(3). 虚拟用户的独立配置

如果有需求是需要给不同虚拟用户分别设置不同的要求,让它们有各自独立的配置,从而达到各自的需求。这时需要用到以下参数:

user_config_dir=/etc/vsftpd/conf.d

在该参数中设置的目录/etc/vsftpd/conf.d 是专门存放不同虚拟用户的独立配置的,时需要自己手动创建的。
在配置文件中添加下面参数:
在这里插入图片描述
另外需要创建该目录:

mkdir -p /etc/vsftpd/conf.d

先假设针对不同虚拟用户有如下不同需求:
1). ftpuser1用户上传和下载文件限速;
2). ftpuser2用户上传和下载文件不限速, 并且可以上传文件;

针对以上需求,我们需要先在/etc/vsftpd/conf.d目录中分别创建两个文件作为虚拟用户独立的配置文件,文件名要和虚拟用户名一样,并且在此文件中可以设定配置文件中的所有参数,此文件的优先级高。如下:

vim /etc/vsftpd/conf.d/ftpuser1
vim /etc/vsftpd/conf.d/ftpuser2

根据需求在/etc/vsftpd/conf.d/ftpuser1中编辑如下内容:
在这里插入图片描述
根据需求在/etc/vsftpd/conf.d/ftpuser2中编辑如下内容:
在这里插入图片描述
另外还需要给ftpuser2用户的家目录中创建一个可供上传文件的目录:

mkdir /ftpuserhome/ftpuser2/upload/
chown ftpuser  /ftpuserhome/ftpuser2/upload/

在这里插入图片描述
最后重启vsftpd服务进行测试。

测试:

(1). 测试ftpuser1 的限速
为了方便测试限速,需要在服务端的虚拟用户的各自家目录中创建一个比较大的文件,我们用 dd 命令拷贝100M的文件 ,如下:

dd if=/dev/zero of=/ftpuserhome/ftpuser1/hellouser1 bs=1M count=100
dd if=/dev/zero of=/ftpuserhome/ftpuser2/hellouser2 bs=1M count=100

Linux系统的FTP服务优化详解_第33张图片
然后在客户端以ftpuser1用户登录并下载文件测试限速:
Linux系统的FTP服务优化详解_第34张图片然后在客户端以ftpuser2用户登录并下载文件测试速度:
Linux系统的FTP服务优化详解_第35张图片
(2). 对于ftpuser2用户的文件上传测试:
Linux系统的FTP服务优化详解_第36张图片

你可能感兴趣的:(Linux)