vsftpd服务配置(centos7)

vsftpd

FTP服务器是按照FTP协议在互联网上提供文件存储和访问服务的主机,FTP客户端则是向服务器发送连接请求,以建立数据传输链路的主机。FTP协议有下面两种工作模式。

主动模式:FTP服务器主动向客户端发起连接请求。

被动模式:FTP服务器等待客户端发起连接请求(默认工作模式)。

在配置妥当软件仓库之后,就可以安装vsftpd服务程序

[root@localhost ~]# yum install -y vsftpd
已加载插件:fastestmirror, langpacks
Repository base is listed more than once in the configuration
Loading mirror speeds from cached hostfile
 * base: mirrors.nju.edu.cn
 * extras: mirrors.nju.edu.cn
 * updates: mirrors.nju.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 vsftpd.x86_64.0.3.0.2-29.el7_9 将被 安装
--> 解决依赖关系完成

依赖关系解决

=================================================================================
 Package         架构            版本                     源                大小
=================================================================================
正在安装:
 vsftpd          x86_64          3.0.2-29.el7_9           updates          173 k

事务概要
=================================================================================
安装  1 软件包

总下载量:173 k
安装大小:353 k
Downloading packages:
警告:/var/cache/yum/x86_64/7/updates/packages/vsftpd-3.0.2-29.el7_9.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
vsftpd-3.0.2-29.el7_9.x86_64.rpm 的公钥尚未安装
vsftpd-3.0.2-29.el7_9.x86_64.rpm                          | 173 kB  00:00:00     
从 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 检索密钥
导入 GPG key 0xF4A80EB5:
 用户ID     : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>"
 指纹       : 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
 软件包     : centos-release-7-4.1708.el7.centos.x86_64 (@anaconda)
 来自       : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : vsftpd-3.0.2-29.el7_9.x86_64                                 1/1 
  验证中      : vsftpd-3.0.2-29.el7_9.x86_64                                 1/1 

已安装:
  vsftpd.x86_64 0:3.0.2-29.el7_9                                                 

完毕!

关闭防火墙、关闭selinux

需要清空iptables防火墙的默认策略,并把当前已经被清理的防火墙策略状态保存下来

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# vim /etc/selinux/config 
[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce 
Permissive
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables-save

在这里插入图片描述

将ftp协议添加到firewalld服务允许列表中(在防火墙开启的情况下)

[root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=ftp 
success
[root@localhost ~]# firewall-cmd --reload 
success

进行过滤vsftpd的主配置文件(过滤注释信息)

多复制几份进行多次实验

[root@localhost ~]# rpm -qc vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
*/etc/vsftpd/vsftpd.conf

[root@localhost ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
[root@localhost ~]# grep -v "#" /etc/vsftpd/vsftpd.conf_bak >/etc/vsftpd/vsftpd.conf
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd.conf_bak  vsftpd_conf_migrate.sh
[root@localhost vsftpd]# cp vsftpd.conf vsftpd.conf_bak1
[root@localhost vsftpd]# cp vsftpd.conf vsftpd.conf_bak2
[root@localhost vsftpd]# cp vsftpd.conf vsftpd.conf_bak3
[root@localhost vsftpd]# ls
ftpusers   vsftpd.conf      vsftpd.conf_bak1  vsftpd.conf_bak3
user_list  vsftpd.conf_bak  vsftpd.conf_bak2  vsftpd_conf_migrate.sh

vsftpd服务程序常用的参数以及作用

参数作用
listen=[YES|NO]是否以独立运行的方式监听服务
listen_address=IP地址设置要监听的IP地址
listen_port=21设置FTP服务的监听端口
download_enable=[YES|NO]是否允许下载文件
userlist_enable=[YES|NO] userlist_deny=[YES|NO]设置用户列表为“允许”还是“禁止”操作
max_clients=0最大客户端连接数,0为不限制
max_per_ip=0同一IP地址的最大连接数,0为不限制
anonymous_enable=[YES|NO]是否允许匿名用户访问
anon_upload_enable=[YES|NO]是否允许匿名用户上传文件
anon_umask=022匿名用户上传文件的umask值
anon_root=/var/ftp匿名用户的FTP根目录
anon_mkdir_write_enable=[YES|NO]是否允许匿名用户创建目录
anon_other_write_enable=[YES|NO]是否开放匿名用户的其他写入权限(包括重命名、删除等操作权限)
anon_max_rate=0匿名用户的最大传输速率(字节/秒),0为不限制
local_enable=[YES|NO]是否允许本地用户登录FTP
local_umask=022本地用户上传文件的umask值
local_root=/var/ftp本地用户的FTP根目录
chroot_local_user=[YES|NO]是否将用户权限禁锢在FTP目录,以确保安全
local_max_rate=0本地用户最大传输速率(字节/秒),0为不限制

匿名开放模式:是最不安全的一种认证模式,任何人都可以无须密码验证而直接登录到FTP服务器。

本地用户模式:是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是如果黑客破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制整台服务器。

虚拟用户模式:更安全的一种认证模式,它需要为FTP服务单独建立用户数据库文件,虚拟出用来进行密码验证的账户信息,而这些账户信息在服务器系统中实际上是不存在的,仅供FTP服务程序进行认证使用。这样,即使黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。

安装ftp客户端工具进行测试

[root@localhost vsftpd]# yum install -y ftp
已加载插件:fastestmirror, langpacks
Repository base is listed more than once in the configuration
Loading mirror speeds from cached hostfile
 * base: mirrors.bfsu.edu.cn
 * extras: mirrors.bfsu.edu.cn
 * updates: mirrors.ustc.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 ftp.x86_64.0.0.17-67.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

=================================================================================
 Package        架构              版本                     源               大小
=================================================================================
正在安装:
 ftp            x86_64            0.17-67.el7              base             61 k

事务概要
=================================================================================
安装  1 软件包

总下载量:61 k
安装大小:96 k
Downloading packages:
ftp-0.17-67.el7.x86_64.rpm                                |  61 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : ftp-0.17-67.el7.x86_64                                       1/1 
  验证中      : ftp-0.17-67.el7.x86_64                                       1/1 

已安装:
  ftp.x86_64 0:0.17-67.el7                                                       

完毕!

匿名访问模式

向匿名用户开放的权限参数以及作用

参数作用
anonymous_enable=YES允许匿名访问模式
anon_umask=022匿名用户上传文件的umask值
anon_upload_enable=YES允许匿名用户上传文件
anon_mkdir_write_enable=YES允许匿名用户创建目录
anon_other_write_enable=YES允许匿名用户修改目录名称或删除目录

编写主配置文件

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
  1 anonymous_enable=YES
  2 anon_umask=022
  3 anon_upload_enable=YES
  4 anon_mkdir_write_enable=YES
  5 anon_other_write_enable=YES
  6 local_enable=YES
  7 write_enable=YES
  8 local_umask=022
  9 dirmessage_enable=YES
 10 xferlog_enable=YES
 11 connect_from_port_20=YES
 12 xferlog_std_format=YES
 13 listen=NO
 14 listen_ipv6=YES
 15 
 16 pam_service_name=vsftpd
 17 userlist_enable=YES
 18 tcp_wrappers=YES        
 
 重启服务加入开机自启
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multiuser.target.wants/vsftpd.service to/usr/lib/systemd/system/vsftpd.service.

在这里插入图片描述

使用ftp命令远程连接ftp服务器进行认证

匿名账户统一anonymous,密码为空

进入的ip地址根据本机ip a查看

[root@localhost ~]# ftp 192.168.153.128
Connected to 192.168.153.128 (192.168.153.128).
220 (vsFTPd 3.0.2)
Name (192.168.153.128:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed.
ftp> mkdir files
550 Create directory operation failed.
ftp> 

在这里插入图片描述

系统拒绝创建目录,vsftpd服务默认访问是/var/ftp目录,查看该目录权限只有root管理员有写入权限,修改目录权限 ,修改后还是会出现报错,使用getsebool查看ftp相关的selinux域策略

[root@localhost ~]# ll -d /var/ftp/pub/
drwxr-xr-x. 2 root root 6 610 2021 /var/ftp/pub/
[root@localhost ~]# chown -R ftp /var/ftp/pub/   
也可以使用chmod -R 777 /var/ftp
[root@localhost ~]# ll -d /var/ftp/pub/
drwxr-xr-x. 2 ftp root 6 610 2021 /var/ftp/pub/

[root@localhost ~]# getsebool -a | grep ftp
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> off

ftpd_full_access --> off导致操作失败,修改策略,使用-P参数使修改的策略永久生效
[root@localhost ~]# setsebool -P ftpd_full_access =on
setsebool: illegal value =on for boolean ftpd_full_access

在这里插入图片描述

在这里插入图片描述

修改完再次进行测试

[root@localhost ~]# ftp 192.168.153.128
Connected to 192.168.153.128 (192.168.153.128).
220 (vsFTPd 3.0.2)
Name (192.168.153.128:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed.
ftp> mkdir files
257 "/pub/files" created
ftp> rename files database
350 Ready for RNTO.
250 Rename successful.
ftp> rmdir database
250 Remove directory operation successful.
ftp> exit
221 Goodbye.

在这里插入图片描述

本地用户模式

本地用户模式使用的权限参数以及作用

参数作用
anonymous_enable=NO禁止匿名访问模式
local_enable=YES允许本地用户模式
write_enable=YES设置可写权限
local_umask=022本地用户模式创建文件的umask值
userlist_deny=YES启用“禁止用户名单”,名单文件为ftpusers和user_list
userlist_enable=YES开启用户作用名单文件功能

这里着重提示做这个实验的前提是将第一个主配置文件删除,使用刚刚备份的文件重新进行实验

在这里插入图片描述

配置主配置文件参数

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 
  1 anonymous_enable=NO
  2 local_enable=YES
  3 write_enable=YES
  4 local_umask=022
  5 dirmessage_enable=YES
  6 xferlog_enable=YES
  7 connect_from_port_20=YES
  8 xferlog_std_format=YES
  9 listen=NO
 10 listen_ipv6=YES
 11 
 12 pam_service_name=vsftpd
 13 userlist_enable=YES
 14 tcp_wrappers=YES
本地用户模式的配置基本不变只需要拒绝匿名访问模式
重启服务 加入启动项
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multiuser.target.wants/vsftpd.service to/usr/lib/systemd/system/vsftpd.service.

在这里插入图片描述

使用root用户登录,系统提示以下错误信息

[root@localhost ~]# ftp 192.168.153.128
Connected to 192.168.153.128 (192.168.153.128).
220 (vsFTPd 3.0.2)
Name (192.168.153.128:root): root
530 Permission denied.
Login failed.
ftp> 

在这里插入图片描述

在目录中默认存放两个默认拒绝的用户(ftpusers和user_list)

删除掉root用户

[root@localhost ~]# cat /etc/vsftpd/user_list 
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
# root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
[root@localhost ~]# cat /etc/vsftpd/ftpusers 
# Users that are not allowed to login via ftp
# root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

可以选择在上述两个文件中不存在的用户进行实验,也可以像上面一样删除掉root用户再进行实验,在实验之前需要开启 setsebool -P ftpd_full_access=on(如果重启后)

[root@localhost ~]# ftp 192.168.153.128
Connected to 192.168.153.128 (192.168.153.128).
220 (vsFTPd 3.0.2)
Name (192.168.153.128:root): root
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir files
257 "/root/files" created
ftp> rename files database
350 Ready for RNTO.
250 Rename successful.
ftp> rmdir database
250 Remove directory operation successful.
ftp> exit
221 Goodbye.

在这里插入图片描述

虚拟用户模式

这里着重提示做这个实验的前提是将第一个主配置文件删除,使用刚刚备份的文件重新进行实验

在这里插入图片描述

创建进行ftp认证的用户数据库文件,奇数行为账户名,偶数行为密码

[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# vim vuser.list
zhangsan
redhat
lisi
redhat

由于明文信息既不安全,也不符合让vsftpd服务程序直接加载的格式,因此需要使用db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件,并且降低数据库文件的权限(避免其他人看到数据库文件的内容),然后再把原始的明文信息文件删除。

[root@localhost vsftpd]# db_load -T -t hash -f vuser.list vuser.db
[root@localhost vsftpd]# chmod 600 vuser.db 
[root@localhost vsftpd]# rm -rf vuser.list

创建vsftpd服务程序用于存储文件的根目录以及用于虚拟用户映射的系统本地用户。vsftpd服务用于存储文件的根目录指的是,当虚拟用户登录后所访问的默认位置。

[root@localhost vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual
[root@localhost vsftpd]# ls -ld /var/ftproot/
drwx------. 3 virtual virtual 78 58 20:44 /var/ftproot/
[root@localhost vsftpd]# chmod -Rf 755 /var/ftproot/

创建虚拟用户认证的PAM问文件 vsftpd.vu,其中PAM文件内的“db=”参数为使用db_load命令生成的账户密码数据库文件的路径,但不用写数据库文件的后缀

[root@localhost ~]# vim /etc/pam.d/vsftpd.vu
auth       required     pam_userdb.so db=/etc/vsftpd/vuser
account    required     pam_userdb.so db=/etc/vsftpd/vuser

在这里插入图片描述

利用PAM文件进行认证时使用的参数以及作用

参数作用
anonymous_enable=NO禁止匿名开放模式
local_enable=YES允许本地用户模式
guest_enable=YES开启虚拟用户模式
guest_username=virtual指定虚拟用户账户
pam_service_name=vsftpd.vu指定PAM文件
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf  
 1 anonymous_enable=NO
  2 local_enable=YES
  3 write_enable=YES
  4 guest_enable=YES
  5 guest_username=virtual
  6 allow_writeable_chroot=YES
  7 local_umask=022
  8 dirmessage_enable=YES
  9 xferlog_enable=YES
 10 connect_from_port_20=YES
 11 xferlog_std_format=YES
 12 listen=NO
 13 listen_ipv6=YES
 14 pam_service_name=vsftpd.vu
 15 userlist_enable=YES
 16 user_config_dir=/etc/vsftpd/vusers_dir(对虚拟账户新建目录以及写入相关权限后添加)

在这里插入图片描述

对虚拟账户新建目录以及写入相关权限

[root@localhost ~]# mkdir /etc/vsftpd/vusers_dir/
[root@localhost ~]# cd /etc/vsftpd/vusers_dir/
[root@localhost vusers_dir]# touch lisi
[root@localhost vusers_dir]# vim zhangsan
	anon_upload_enable=YES
	anon_mkdir_write_enable=YES
	anon_other_write_enable=YES

在这里插入图片描述

重启服务 加入启动项
[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multiuser.target.wants/vsftpd.service to/usr/lib/systemd/system/vsftpd.service.

在实验之前需要开启 setsebool -P ftpd_full_access=on(如果重启后)

[root@linuxprobe ~]# ftp 192.168.153.128
Connected to 192.168.153.128 (192.168.153.128).
220 (vsFTPd 3.0.3)
Name (192.168.10.10:root): lisi
331 Please specify the password.
Password:此处输入虚拟用户的密码
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mkdir files
550 Permission denied.
ftp> exit
221 Goodbye.

vsftpd服务程序登陆后所在目录

登录方式默认目录
匿名公开/var/ftp
本地用户该用户的家目录
虚拟用户对应映射用户的家目录

TFTP简单文件传输协议

[root@localhost ~]# yum install -y tftp-server tftp xinetd
已加载插件:fastestmirror, langpacks
Repository base is listed more than once in the configuration
Loading mirror speeds from cached hostfile
 * base: mirrors.bfsu.edu.cn
 * extras: mirrors.bfsu.edu.cn
 * updates: mirrors.ustc.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 tftp.x86_64.0.5.2-22.el7 将被 安装
---> 软件包 tftp-server.x86_64.0.5.2-22.el7 将被 安装
---> 软件包 xinetd.x86_64.2.2.3.15-14.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

================================================================================================
 Package                 架构               版本                         源                大小
================================================================================================
正在安装:
 tftp                    x86_64             5.2-22.el7                   base              38 k
 tftp-server             x86_64             5.2-22.el7                   base              47 k
 xinetd                  x86_64             2:2.3.15-14.el7              base             128 k

事务概要
================================================================================================
安装  3 软件包

总下载量:213 k
安装大小:378 k
Downloading packages:
(1/3): tftp-5.2-22.el7.x86_64.rpm                                        |  38 kB  00:00:00     
(2/3): tftp-server-5.2-22.el7.x86_64.rpm                                 |  47 kB  00:00:00     
(3/3): xinetd-2.3.15-14.el7.x86_64.rpm                                   | 128 kB  00:00:00     
------------------------------------------------------------------------------------------------
总计                                                            357 kB/s | 213 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : 2:xinetd-2.3.15-14.el7.x86_64                                               1/3 
  正在安装    : tftp-5.2-22.el7.x86_64                                                      2/3 
  正在安装    : tftp-server-5.2-22.el7.x86_64                                               3/3 
  验证中      : tftp-server-5.2-22.el7.x86_64                                               1/3 
  验证中      : tftp-5.2-22.el7.x86_64                                                      2/3 
  验证中      : 2:xinetd-2.3.15-14.el7.x86_64                                               3/3 

已安装:
  tftp.x86_64 0:5.2-22.el7   tftp-server.x86_64 0:5.2-22.el7   xinetd.x86_64 2:2.3.15-14.el7  

完毕!

编写配置文件(默认不存在)

[root@localhost ~]# vim /etc/xinetd.d/tftp
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /var/lib/tftpboot
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

重启服务 如果开启防火墙则手动加入策略
[root@localhost ~]# systemctl restart tftp
[root@localhost ~]# systemctl enable tftp
[root@localhost ~]# systemctl restart xinetd
[root@localhost ~]# systemctl enable xinetd
[root@localhost ~]# firewall-cmd --zone=public --permanent --add-port=69/udp
success
[root@localhost ~]# firewall-cmd --reload 
success

tftp命令中可用的参数以及作用

参数作用
?帮助信息
put上传文件
get下载文件
verbose显示详细的处理信息
status显示当前的状态信息
binary使用二进制进行传输
ascii使用ASCII码进行传输
timeout设置重传的超时时间
quit退出

测试

[root@localhost ~]# tftp 192.168.153.128
tftp> get readme.txt
tftp> quit
[root@localhost ~]# ls
anaconda-ks.cfg       readme.txt  模板  图片  下载  桌面
initial-setup-ks.cfg  公共        视频  文档  音乐
[root@localhost ~]# cat readme.txt
welcome xiaozhao_student

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值