实战 ➾【Red Hat 搭建部署VSFTPd服务】
-
- [🔻 前言](#🔻 前言)
- [🔻 一、vsFTPd服务部署](#🔻 一、vsFTPd服务部署)
-
- [🚥 1.1 vsFTPd服务安装](#🚥 1.1 vsFTPd服务安装)
- [🚥 1.2 vsFTPd服务的启动与关闭](#🚥 1.2 vsFTPd服务的启动与关闭)
- [🔻 二、vsFTPd相关配置](#🔻 二、vsFTPd相关配置)
-
- [🚥 2.1 vsFTPd的相关配置文件](#🚥 2.1 vsFTPd的相关配置文件)
- [🚥 2.2 配置匿名用户登录环境](#🚥 2.2 配置匿名用户登录环境)
- [🚥 2.3 监听地址与控制端口](#🚥 2.3 监听地址与控制端口)
- [🚥 2.4 FTP模式与数据端口](#🚥 2.4 FTP模式与数据端口)
- [🚥 2.5 ASCII模式](#🚥 2.5 ASCII模式)
- [🚥 2.6 超时选项](#🚥 2.6 超时选项)
- [🚥 2.7 负载控制](#🚥 2.7 负载控制)
- [🚥 2.8 用户设置](#🚥 2.8 用户设置)
- [🚥 2.9 用户登录控制](#🚥 2.9 用户登录控制)
- [🚥 2.10 目录访问控制](#🚥 2.10 目录访问控制)
- [🚥 2.11 文件操作控制](#🚥 2.11 文件操作控制)
- [🚥 2.12 新增文件权限设置](#🚥 2.12 新增文件权限设置)
- [🚥 2.13 日志设置](#🚥 2.13 日志设置)
- [🔻 三、测试vsftpd服务](#🔻 三、测试vsftpd服务)
- [🔻 四、配置vsftpd服务禁止匿名访问、并控制用户切换目录](#🔻 四、配置vsftpd服务禁止匿名访问、并控制用户切换目录)
- [🔻 总结---温故知新](#🔻 总结—温故知新)
🔻 前言
在Red Hat Enterprise Linux 下,有Red Hat ContentAcceletatot和vsFTPd 两款内置的FTP 服务器软件。其中,Red Hat Content Acceletatot 提供了Web和FTP 两种服务,并具有高效的特点,但功能较弱。而 vsFTPd 在提供FTP 服务方面具有高效性外还具有很强的安全性和稳定性,因此这里将主要讲解vsFTPd服务的安装。
🔻 一、vsFTPd服务部署
🚥 1.1 vsFTPd服务安装
由于安装 VSFTPd 服务时,没有要依赖的软件包,因此安装起来极为方便,只要安装一个RPM 软件包即可。在安装前,首先需要确认该服务在系统中是否已经安装。
sql
[root@ftp-server ~]# rpm -q vsftpd
进行安装(前提----系统光盘镜像挂载
):
如果检测到系统中还没有安装该服务,则可通过yum实现安装。
sql
[root@ftp-server ~]# yum -y install vsftpd
执行命令后的结果如下所示,显示了"vsftpd-3.0.2-28.el7.x86_64"的字样表明该服务已经安装。
sql
[root@ftp-server -]# rpm -q vsfipd
vsftpd-3.0.2-28.el7.x86_64
🚥 1.2 vsFTPd服务的启动与关闭
启动VsFTPd服务
要启动VsFTPd服务,只需要执行以下命令。
sql
[root@ftp-server -]# systemctl start vsftpd
vsftpd 状态查看
执行命令查看vsftpd 状态结果如下所示,表明启动成功。
sql
[root@ftp-server -]# systemctl ststus vsftpd
重新启动vsFTPd服务
sql
[root@ftp-server -]# systemctl restart vsftpd
停止vsFTPd服务
sql
[root@ftp-server -]# systemctl stop vsftpd
设置自动启动vsFTPd服务
启动的VSFTPd服务只能保持到此次计算机关闭之前,下次重启计算机后,又需要手动启动VsFTPd 服务。
为了避免此种情况的发生,则可以设置VSFTPd 服务随系统启动而自动加载具体方法如下。
方式一(推荐):
sql
####设置服务开机启动
[root@ftp-server -]# systemctl enable vsftpd
#####关闭服务开机启动
[root@ftp-server -]# systemctl disable vsftpd
#####查询服务是否是自启动的
[root@ftp-server -]# systemctl is-enabled vsftpd
方式二GUI方式设置(不推荐):
首先安装ntsysv,再执行"ntsysv"命令启动自动服务配置程序,然后找到"vsftpd"服务选项,按Space键在其前面加上星号" * "---》空格键添加 * 号,最后按 Tab键,选择"确定"按钮即可,如图所示。
sql
[root@ftp-server ~]# yum -y install ntsysv
[root@ftp-server ~]# ntsysv
🔻 二、vsFTPd相关配置
🚥 2.1 vsFTPd的相关配置文件
VsFTPd 服务的配置都是通过相关配置文件实现的。该服务的配置文件有多个,包括其主配置文件/etc/vsftpd/vsftpd.conf
,以及加强VSFTPd 服务器用户认证的/etc/pamd/vsftpd
文件等。
/etc/pam.d/vsftpd
vsFTPd的The Pluggable Authentication Modules(PAM)配置文件。它主要用来加强VSFTPd服务器的用户认证。
/etc/vsftpd.ftpusers
所有位于此文件内的用户都不能访问 vsFTPd 服务。当然,为了安全起见,这个文件中默认已经包括了root、bin和daemon等系统账号。
/etc/vsftpd/user_list
这个文件中包括的用户有可能是被拒绝访问 vsFTPd 服务的,也可能是允许访问的,这主要决定于vsFTPd的主配置文件/etc/vsftpd/vsftpd.conf 中的"userlist_deny"参数设置的是"Yes(默认值)还是"No"。
/var/ftp
VsFTPd 提供服务的文件集散地,包括一个pub子目录。默认配置下,所有的目录都是只读的,不过只有root用户有写权限。
主配置文件/etc/vsftpd/vsftpd.conf
配置默认参数及含义:
sql
# 允许匿名访问
anonymous_enable=YES
# 允许本地用户访问
local_enable=YES
# 开放本地用户的写权限
write_enable=YES
# 出于安全考虑,设置本地用户文件生成掩码umask为022,默认值为077,若本地文件具有执行权限,则
# 上传到服务器后为777-022=755,若本地文件不具有执行权限,则上传后权限为644
local_umask=022
# 允许匿名用户上传,该条默认注释了,就是禁止,下同
#anon_upload_enable=YES
# 允许匿名用户创建目录及写入
#anon_mkdir_write_enable=YES
# 当切换目录时,显示该目录下的.message隐含文件内容
dirmessage_enable=YES
# 激活上传和下载日志
xferlog_enable=YES
# 启用FTP数据端口的连接请求
connect_from_port_20=YES
# 使用标准的ftpd_xferlog日志格式
xferlog_std_format=YES
# 设置PAM认证服务的配置文件名称
pam_service_name = vsftpd
# 激活vsftpd检查userlist_file指定的用户是否可以访问csftpd服务器
userlist_enable = YES
# 使vsftpd处于独立启动模式
listen = YES
# 使用tcp_wrappers作为主机访问控制方式
tcp_wrappers = YES
拓展参数详解:
chroot_local_user=NO
// 用户不能修改自己根目录
chroot_list_enable=YES
//开启chroot_list 配置,该配置文件下的用户只能访问自己的目录,不在该列表的用户,可以访问自己目录以为的目录
chroot_list_file=/etc/vsftpd/chroot_list
// chroot_list 配置文件存放路径, 如果没有该配置,可以手动添加/etc/vsftpd/chroot_list 用户清单文件格式要求每个用户名各占一行。
userlist_enable=YES
//激活vsftpd检查userlist_file指定的用户是否可以访问csftpd服务器
userlist_deny=NO
//开启ftp用户登录白名单,只允许/etc/vsftpd/chroot_list 的用户访问ftp,
🚥 2.2 配置匿名用户登录环境
在vsFTPd 的配置文件 /etc/vsftpd/vsftpd.conf
中,注释行应以"#"开头,每个选项设置为一行,在该文件中,默认情况下会存在以下语句。
anonymous_enable=YES
,表明vsFTPd服务是允许匿名访问的,且这里的匿名服务器是必须配置的。
匿名访问默认的下载文件目录地址为/var/ftp/pub,该目录为空。
🚥 2.3 监听地址与控制端口
如果需要改变FTP的用来提供服务的默认端口,可以通过修改 vsFTPd 的主配置文件/etc/vsftpd/vsftpd.conf
来实现。
设置监听地址
配置文件中默认只有是否监听的参数,没有关于监听地址的配置参数。若要监听地址则需要添加如下内容。
sql
listen_address=ip address
此参数在VsFTPd 使用独立模式 (standalone)时有效,定义了在主机的哪个IP 地址上监听FTP请求,即在哪个P地址上提供FTP 服务。对于只有一个IP地址的主机,不需要使用此参数。对于多址主机,不设置此参数,即将监听所有IP 地址,默认值为无。
控制端口
控制端口是vsFTPd服务器监听的端口号。与监听地址一样,控制端口在独立模式下有效默认值为21,配置控制端口需要在配置文件中添加关于控制端口的参数,格式如下。
sql
listen_port=port_value
🚥 2.4 FTP模式与数据端口
FTP有两种工作模式,建立控制连接时都是由客户端和 FTP 服务器的控制端口(默认值为21)建立控制连接,然后传输操作指令的。
区别在于使用数据传输端口(FTP-DATA)的方式不同,主动模式由FTP服务器指定数据传输所使用的端口,默认值为20。被动模式由FTP客户端决定数据传输的端口。在 /etc/vsftpd/vsftpd.conf
配置文件中,也可以针对主动模式和被动模式对vsFTPd服务器进行配置。
主动模式
sql
主动模式的相关配置参数:
####如果要在数据连接时取消主动模式时设此选项为NO,默认值为YES
port_enable=YES/NO
###控制以主动模式进行数据传输时是否使用20端口(FTP-DATA)。YES使用,NO不使用,默认值为NO。RHL自带的vsftpdconf 文件中此参数设为YES
connetc_from_port20=YES/NO
###设定FTP数据传输端口(FTP-DATA)值,默认值为20。此参数用于主动模式。
ftp_data_port=port number
###默认值为NO。如果为YES,取消主动安全检查,该检查确保外出的数据只能连接到客户端上.打开此选项时要小心
port_promiscuous=YES/NO
被动模式
sql
被动模式的相关配置参数
###YES,表示数据传输时允许使用被动模式;NO,则表示不允许使用。默认值为 YES
pasv_enable=YES/NO
###设定在被动模式下,建立数据传输可以使用 port 范围的下界和上界。0表示任意,默认值为0把端口范围设在数值比较高的一段范围内,比如50000~60000,将有助于安全性的提高
pasy_min_port=port number
###此选项被激活时,将关闭被动模式的安全检查。该检查确保数据连接和控制连接是来自同一个IP地址的。小心打开此选项。此选项唯一合理的用法是,存在于由安全隧道方案构成的组织,默认值为NO
pasv_promiscuous=YES/NO
###此选项为一个数字IP 地址,作为被动命令的响应。默认值为 one,即地址是从呼入的连接套接字中获取的
pasv_address= IP address
🚥 2.5 ASCII模式
默认情况下,VSFTP 是禁止使用ASCII传输模式的,以下选项参数控制VSFTPd 是否使用ASCII传输模式,/etc/vsftpd/vsftpd.conf
中配置。
sql
ascii_download_enable=YES/NO
控制是否允许使用ASCII模式下载文件,YES 允许,NO不允许,默认为 NO。
sql
ascii_upload_enable=YES/NO
控制是否允许使用ASCI模式上传文件,YES 允许,NO不允许,默认为 NO。
🚥 2.6 超时选项
为了节约系统资源,vsFTPd 还提供了超时定义设置,以防止客户端无限制时间地连接在FTP服务器上。
sql
idle_session_timeout=xxx(以秒为单位)
空闲用户会话的超时时间,如果超出这个时间没有数据的传送或是指令的输入,就会强迫断线。单位为s,默认值为"300"。
sql
data_connection_timeout=xxx(以秒为单位)
定义数据传输过程中被阻塞的最长时间(以s为单位,一旦超出这个时间,客户端的连接将被关闭。单位为s,默认值为"300"。
以下两个选项是针对客户端的,客户端空闲1min后将自动中断连接,并在中断1min后自动激活连接。
sql
accept_timeout=xxx(以秒为单位)
接受建立链接的超时设定。单位为s,默认值为"60"。
sql
connect_timeout=xxx(以秒为单位)
响应主动模式的数据连接的超时设定,单位为s,默认值为"60"
🚥 2.7 负载控制
FTP客户端占用过大的宽带将影响服务器的正常运行。为防止客户端占用过大的带宽,保证服务器正常运行,可以通过设置以下参数来实现。
sql
####此参数在vsFTPd使用独立模式下有效。定义了FTP服务器最大的并发连接数,当超过此连接数时,FTP服务器拒绝客户端连接。默认值为0,表示不限制最大连接数
max_clients=numerical value
###此参数在VsFTPd使用独立模式下有效。定义了每个IP 地址最大的并发连接数目,超过这个数目将拒绝连接。此选项的设置将影响到如迅雷、BT 等多线程下载软件。默认值为0,表示不限制。
max_per_ip=numerical value
###设定匿名用户的最大数据传输速度value,以b/s为单位,默认值无
anon_max_rate=value
###设定本地用户的最大数据传输速度 value,以 b/s 为单位,默认值无。此选项对所有的用户都生效还可以在用户个人配置文件中使用此选项,以指定特定用户可获得的最大数据传输速率
local_max_rate=value
🚥 2.8 用户设置
FTP中有匿名用户(匿名账号anonymous,密码为空)、本地用户和虚拟用户3种。相应的配置参数如下。
匿名用户
sql
匿名用户配置参数说明
####控制是否允许匿名用户登录。YES 允许,NO 不允许,默认值为 YES
anonymous_enable=YES/NO
###控制匿名用户登入时是否需要密码。YES 不需要,NO需要,默认值为NO
no_anon_password=YES/NO
###指定匿名用户与本地账号相对应,该用户的家目录即为匿名用户访问 FTP 服务器时的家目录。默认值为"ftp"
ftp_username=ftp
###此参数默认值为NO当值为YES 时,拒绝使用 banned_email_file 参数指定文件中所列出的用 E-mail地址进行录的匿名用户。
###即当匿名用户使用 banned email file文件中所列出的用 E-mail进行登录时将被拒绝,这对于阻击某些Dos攻击有效。
###当此参数生效时,需追加 banned email_file参数banned_emailfile指定包含被拒绝的E-mail地址的文件默认文件为/etc/vsftpd.banned_emails
banned_email_file=/etc/vsftpd.banned_emails
###设定匿名用户的根目录,即匿名用户登入后,被定位到此目录下。主配置文件中默认无此项,默认值为/var/ftp/
anon_root=/var/ftp/
###控制是否只允许匿名用户下载可阅读文档。当值为YES 时,允许匿名用户下载可阅读的文件,为NO时,则允许匿名用户浏览整个服务器的文件系统。
###默认值为YES,控制是否允许匿名用户上传文件,YES 为允许,N 为不允许,默认是不设值,即为 NO。
###除了这个参数外,匿名用户如果要上传文件,还需要两个条件wite enable 参数为YES;以及在文件系统上FTP匿名用户对某个目录有写权限
anon_world_readable_only=
###控制是否允许匿名用户创建新目录,YES 为允许,NO 为不允许,默认是不设值,即为 NO。在文件系统上,FTP匿名用户必须对新目录的上层目录拥有写权限
anon_upload_enable=YES/NO
###控制匿名用户是否拥有除了上传和新建目录之外的其他权限,如删除、更名等。YES 为拥有,NO为不拥有,默认值为 NO。
anon mkdir_write_enable=YES/NO
###是否修改匿名用户所上传文件的所有权,当值为 YES 时,匿名用户所上传的文件所有权将改为另外一个不同的用户所有,用户由chown username参数指定。此选项默认值为NO
anon_other_write_enable=YES/NO
###指定拥有匿名用户上传文件所有权的用户。
chown_uploads
###此参数与chown_uploads 联用。不推荐使用root 用户
chown_username
本地用户
在使用FTP服务的用户中,除了匿名用户外,还有一类在FTP服务器所属主机上拥有账号的用户,在VsFTPd中称此类用户为本地用户(localusers)。
sql
本地用户配置参数说明
###是否允许本地用户登录。默认值为"YES",也就是允许本地用户访问 VSFTPd服务器。以下选项只有在local_enable=YES"的前提下才有效
local_enable=YES/NO
###当设置为"YES"时,本地用户只能访问到家目录,不能切换到家目录之外
chroot_local_user=YES/NO
###当设置为"YES"时,表示本地用户也有例外,可以切换到家目录之外,例外的用户在"chroot_list_fle 指定的文件中(默认文件是"/etc/vsftpd.chroot_list")
chroot_list_enable=YES/NO
###当设置为"YES"时,以本地用户登录的客户端可以通过"SITECHMOD"指令来修改文件的权限
chmod_enable=YES/NO
###设置文件创建的掩码(操作方法与 Liux 下文件属性设置相同),默认值为"022",也就是其他用户具有只读属性
local umask
###指定本地用户登录 vsFTPd 服务器时切换到的目录。没有设置默认值
local root
虚拟用户
考虑到安全方面的问题,vSFTPd 除了支持本地用户和匿名用户之外,还支持虚拟用户虚拟用户的具体配置参数如下。
sql
guest_enable
当设置为"YES"时,所有非匿名用户都被映射为一个特定的本地用户。该用户通过guest_username"指令指定。默认值为"No"。
sql
guest_username
设置虚拟用户映射到的本地用户,默认值为"ftp"。
🚥 2.9 用户登录控制
VSFTPd 提供了丰富的登录控制选项,包括登录后客户端可以显示的信息、允许执行的指令以及一些登录中的控制选项等。
sql
登录控制选项
###设置客户端登录VSFTPd 服务器后,服务器显示在客户端的信息被保存在"banner_fle"指定的文本文件中
banner_file=文本文件路径
###设置客户端登录 VSFTPd 服务器后客户端可以执行的指令集合。需要注意的是,如果设置了该指令,则其他没有列在其中的指令都拒绝执行,没有设置默认值
cmds_allowed
###设置客户端登录 sFTPp 服务器后客户端显示的欢迎或者其他相关信息。需要注意的是,如果设置了"banner file".本指令将被忽略,没有设置默认值
ftpd_banner
###此选项被激活后,VSFTPd 将读取 userlist_fle 参数所指定的文件中的用户列表。当列表中的用户登录 FTP 服务器时,该用户在提示输入密码之前就被禁止了。即该用户名输入后,VSFTPd 查到该用户名在列表,VSFTPd 就直接禁止该用户,不再进行询问密码等后续步聚。默认值为 NO
userlist_enable=YES/NO
###决定禁止还是只允许由 userlist_file 指定文件中的用户登录FTP服务器。此选项在userlist_enable 选项启动后才生效。默认值为 YES,禁止文件中的用户登求,同时也不向这些用户发出输入口令的提示。设置为 NO,只允许文件中的用户登录FTP服务器
userlist_deny=YES/NO
###在VSFTPd中使用TCP_Wrappers 远程访问控制机制,默认值为YES
cp_wrappers=YES/NO
🚥 2.10 目录访问控制
vsFTPd对目录的访问也设置了一些控制选项。
sql
目录访问控制选项
###隐藏文件的所有者和组信息,匿名用户看到的文件所有者和组全部变成FTP
hide_ids
###用于指定目录切换时显示的信息所在的文件,默认值为"message"
message_file
###设置是否显示以"."开头的文件,默认不显示
force_dot_files
###设置当用户切换到一个目录时,是否显示目录切换信息。如果设置为"YES",则显示"message_file"指定文件中的信息(默认显示message文件信息
dirmessage_enable
###设置是否允许用户列目录,默认值为"YES"一允许列目录
dirlist_enable
🚥 2.11 文件操作控制
sql
控制上传和下载的参数
###设置是否允许下载。默认值为"YES",即允许下载
download_enable
####设置匿名用户上传的文件的拥有者,默认值"root"
chown_username
###当设置为"YES"时,所有匿名用户上传的文件其拥有者被设置为"chown_usemame"指令指定的用户
chown_uploads
###默认值"NO"当设置为"YES"时FTP 客户端登录后允许使用 DELE(删除文件)、RNFR(重命名)和STOR(断点续传)指令
write_enable
🚥 2.12 新增文件权限设置
vsFTPd可以记录服务器的工作状态,包括客户端的上传、下载操作等。
sql
log_ftp_protocol
是否记录所有的FTP命令信息。默认值为"NO"。
sql
dual log enable
如果启用则生成两个相似的日志文件,分别为/var/log/xferlog和/var/log/vsftpd.log。前者是Wu-ftpd类型的传输日志,可以用于标准工具分析,后者是VSFTPd类型的日志。默认值为NO"。
sql
syslogenable
设置为"YES"时将本来应记录在/var/log/vsftpdlog 的信息传给syslogd daemon,由syslogd的配置文件决定存储位置。默认值为"NO"。
🚥 2.13 日志设置
vsFTPd还可以进行传输日志文件的设置,具体配置选项如下
sql
xferlog_std_format=YES/NO
启用后,传输日志文件将以标准 xferlog 的格式书写,如同 Wu-ftpd一样。此格式的日志文件默认为/var/log/xferlog,也可以通过xferlog_file选项来设定。
sql
xferlog_enable=YES/NO
如果启用此选项将维护一个日志文件,用于详细记录上传和下载。默认情况下,这个日志文件是/var/log/vsftpd.log。但是也可以通过配置文件中的vsftpd_log_file选项来指定。默认值为"NO"。
🔻 三、测试vsftpd服务
- windows shell 界面
匿名用户访问
匿名访问默认的下载文件目录地址为/var/ftp/pub。
1、先在FTP服务器上的/var/ftp/pub目录下建立一个file-test文件。
sql
[root@ftp-server pub]# cd /var/ftp/pub
[root@ftp-server pub]# touch file-test
[root@ftp-server pub]# ll
总用量 0
-rw-r--r-- 1 root root 0 7月 16 13:47 file-test
[root@ftp-server pub]#
2、Windows下访问vsftpd服务,使用匿名账号anonymous登录,密码为空。
1、 ls #列表显示匿名FTP服务目录
2、cd pub #进入匿名FTP服务匿名下载目录
3、mget file-test #利用mget命令下载file-test 文件
4、!dir + 文件名 ,显示本地已下载的文件列表
本地用户访问
若FTP服务器存在本地用户zyl,则vsftpd服务不需要配置即可使用本地账号zyl进行登录,登录后访问的FTP服务目录地址为该用户账号默认路径/home/zyl。
本地用户可以离开当前目录并切换到有权访问的其他目录,并在权限允许的情况下进行文件的上传与下载。
1、本地用户zyl登录
2、创建update目录,测试上传刚才匿名用户下载的文件file-test。
3、检查
- 浏览器访问ftp
匿名用户访问
sql
ftp://192.168.181.12/
🔻 四、配置vsftpd服务禁止匿名访问、并控制用户切换目录
本地用户访问
在vsFTPd 的配置文件 /etc/vsftpd/vsftpd.conf
中,修改anonymous_enable=NO
。
创建ftpuser和设置用户密码--ftpuser
sql
[root@ftp-server ~]# useradd ftpuser
[root@ftp-server ~]# passwd ftpuser
浏览器访问:ftp://192.168.181.12/
3、配置本地用户只能访问到家目录,不能切换到家目录之外
在vsFTPd 的配置文件 /etc/vsftpd/vsftpd.conf
中,修改内容。
sql
###添加
local_root=/home/ftpuser
write_enable=YES
###取消注释
chroot_local_user=NO
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
修改vim /etc/vsftpd/chroot_list,添加用户ftpuser
重启vsFTPd
sql
[root@ftp-server ~]# systemctl restart vsftpd
浏览器访问:ftp://192.168.181.12/
只能看到家目录下/home/ftpuser/的文件
🔻 总结---温故知新
javascript
🟢 该章详细介绍了【Red Hat 搭建部署VSFTPd服务】,vsFTPd的相关配置,如登录环境、监听控制端口、模式、数据端口、禁止匿名访问等配置。