复习之vsftp服务

一、vsftp服务简介

文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证。

Vsftpd是linux类操作系统上运行的ftp服务器软件。

vsftpd基本信息如下:

服务名称:   vsftpd.service
配置目录:   /etc/vsftpd
主配置文件:  /etc/vsftpd/vsftpd.conf
默认发布目录:  /var/ftp
报错信息:
550 : 程序本身拒绝
553 :文件系统权限限制
500 :权限过大
530 :认证失败

二、vsftpd的安装及启用

在虚拟机westosa上进行操作实验,安装的前提:

  • 配置好网络
  • 配置好软件仓库
  • 修改主机名为ftp
  • 关闭火墙

[root@ftp ~]# systemctl disable --now firewalld
[root@ftp ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor >
   Active: inactive (dead)
     Docs: man:firewalld(1)

 直接在仓库安装vsftpd服务即可!安装后并开启服务

[root@ftp ~]# dnf install -y vsftpd
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
AppStream                                       1.4 MB/s | 3.2 kB     00:00    
BaseOS                                          1.1 MB/s | 2.8 kB     00:00    
Dependencies resolved.
================================================================================
 Package         Architecture    Version               Repository          Size
================================================================================
Installing:
 vsftpd          x86_64          3.0.3-31.el8          AppStream          180 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 180 k
Installed size: 343 k
Downloading Packages:
vsftpd-3.0.3-31.el8.x86_64.rpm                   30 MB/s | 180 kB     00:00    
--------------------------------------------------------------------------------
Total                                            18 MB/s | 180 kB     00:00     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1 
  Installing       : vsftpd-3.0.3-31.el8.x86_64                             1/1 
  Running scriptlet: vsftpd-3.0.3-31.el8.x86_64                             1/1 
  Verifying        : vsftpd-3.0.3-31.el8.x86_64                             1/1 
Installed products updated.

Installed:
  vsftpd-3.0.3-31.el8.x86_64                                                    

Complete!
[root@ftp ~]# systemctl enable --now vsftpd
Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /usr/lib/systemd/system/vsftpd.service.

此时访问需要登陆

终端也可以利用lftp测试,报错530

三、lftp的使用方法

在终端也可进行登陆ftp,安装  lftp 可!

  • lftp  + ip  : 匿名登陆
  • lftp + ip + -u +用户名  :用户登陆
  • quit 退出
[root@ftp ~]# dnf install -y lftp
Updating Subscription Management repositories.
Unable to read consumer identity

安装后在终端输入 ftp  172.25.254.100即可查看ftp界面!也是匿名登陆!

ps:只有ls出来才算登陆ftp界面!

注意:匿名登陆下,不能上传文件!

 lftp 用户登陆:可以上传文件+下载文件

四、匿名用户访问控制

实验开始前保证

  • 关闭selinux
  • 关闭火墙
  • 开启vsftpd服务

1. 登陆控制

  • anonymous_enable=YES / NO: 匿名用户是否可以登陆

如果想匿名用户也可以访问ftp界面,需要修改ftp主配置文件,修改完成别忘了重启服务!

[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf 
[root@ftp ~]# systemctl restart vsftpd.service 

 修改完成后再次测试,匿名用户也可登陆ftp!

显示的是默认发布目录,/var/ftp下的!

在终端测试,显示匿名用户也可登陆!

[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf 
[root@ftp ~]# systemctl restart vsftpd.service 
[root@ftp ~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
drwxr-xr-x    2 0        0               6 Feb 17  2020 pub
lftp 172.25.254.100:/> quit

2. 家目录控制

vsftpd默认家目录是/var/ftp,可以在主配置文件修改家目录

  • anon_root=/westos

首先建立新目录,作为家目录

[root@ftp ~]# ll /var/ftp/
total 0
drwxr-xr-x 2 root root 6 Feb 17  2020 pub
[root@ftp ~]# mkdir /westos
[root@ftp ~]# touch /westos/westosfile{1..10}

在新目录中建立10个文件,如果访问vsftp可以看见10个文件,

说明该目录更改为了vsftp的家目录

在配置文件中添加:anon_root=/westos

[root@ftp ~]# cat /etc/vsftpd/vsftpd.conf 
# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=YES
anon_root=/westos
# Uncomment this to allow local users to log in.

然后重启服务,访问vsftp,发现10个文件存在!说明家目录已更改!

[root@ftp ~]# systemctl restart vsftpd.service 
[root@ftp ~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
-rw-r--r--    1 0        0               0 Aug 01 10:59 westosfile1
-rw-r--r--    1 0        0               0 Aug 01 10:59 westosfile10
-rw-r--r--    1 0        0               0 Aug 01 10:59 westosfile2
-rw-r--r--    1 0        0               0 Aug 01 10:59 westosfile3
-rw-r--r--    1 0        0               0 Aug 01 10:59 westosfile4
-rw-r--r--    1 0        0               0 Aug 01 10:59 westosfile5
-rw-r--r--    1 0        0               0 Aug 01 10:59 westosfile6
-rw-r--r--    1 0        0               0 Aug 01 10:59 westosfile7
-rw-r--r--    1 0        0               0 Aug 01 10:59 westosfile8
-rw-r--r--    1 0        0               0 Aug 01 10:59 westosfile9
lftp 172.25.254.100:/> 

注释掉即可还原!

3.上传控制

  • anon_upload_enable=YES|NO
  • 修改默认发布目录的子目录权限

当匿名用户上传文件时,默认不允许上传!

ps:只能在发布目录的子目录上传文件!不能在发布目录上传文件!

[root@ftp ~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
drwxr-xr-x    2 0        0               6 Feb 17  2020 pub
lftp 172.25.254.100:/> cd /pub/
lftp 172.25.254.100:/pub> put /etc/passwd
put: /etc/passwd: Access failed: 550 Permission denied. (passwd)
lftp 172.25.254.100:/pub> 

此时报错550,意思是程序本身不允许上传,修改主配置文件!然后重启服务!

[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf 
[root@ftp ~]# systemctl restart vsftpd.service 

 再次上传文件,报错553,意思是权限控制!

[root@ftp ~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
drwxr-xr-x    2 0        0               6 Feb 17  2020 pub
lftp 172.25.254.100:/> cd /pub/
lftp 172.25.254.100:/pub> put /etc/passwd
put: /etc/passwd: Access failed: 553 Could not create file. (passwd)
lftp 172.25.254.100:/pub> quit
[root@ftp ~]# 

查看默认发布目录的子目录权限,发现只有root可以写。

因此要修改该目录权限

[root@ftp ~]# ll -ld /var/ftp/pub/
drwxr-xr-x 2 root root 6 Feb 17  2020 /var/ftp/pub/
[root@ftp ~]# id ftp 
uid=14(ftp) gid=50(ftp) groups=50(ftp)
[root@ftp ~]# chgrp ftp /var/ftp/pub/
[root@ftp ~]# chmod 775 /var/ftp/pub/
[root@ftp ~]# ll -ld /var/ftp/pub/
drwxrwxr-x 2 root ftp 6 Feb 17  2020 /var/ftp/pub/

再次测试匿名上传文件!成功上传!

[root@ftp ~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
drwxrwxr-x    2 0        50              6 Feb 17  2020 pub
lftp 172.25.254.100:/> cd /pub/
lftp 172.25.254.100:/pub> put /etc/passwd
2761 bytes transferred
lftp 172.25.254.100:/pub> quit

4.建立目录控制

  • anon_mkdir_write_enable=YES|NO

默认情况,匿名用户无法建立目录!

[root@ftp ~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
drwxrwxr-x    2 0        50             20 Aug 01 11:22 pub
lftp 172.25.254.100:/> cd /pub/
lftp 172.25.254.100:/pub> mkdir westos
mkdir: Access failed: 550 Permission denied. (westos)
lftp 172.25.254.100:/pub> quit

只需要修改主配置文件,重启服务!

[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf 
[root@ftp ~]# systemctl restart vsftpd.service 
[root@ftp ~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
drwxrwxr-x    2 0        50             20 Aug 01 11:22 pub
lftp 172.25.254.100:/> cd /pub/
lftp 172.25.254.100:/pub> mkdir westos
mkdir ok, `westos' created
lftp 172.25.254.100:/pub> ls
-rw-------    1 14       50           2761 Aug 01 11:22 passwd
drwx------    2 14       50              6 Aug 01 11:30 westos
lftp 172.25.254.100:/pub> quit

 就能建立目录!!!

5. 下载控制

  • anon_world_readable_only=NO  :可以下载

默认情况下,匿名用户无法下载文件

[root@ftp ~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
drwxrwxr-x    3 0        50             34 Aug 01 11:30 pub
lftp 172.25.254.100:/> cd pub/
lftp 172.25.254.100:/pub> ls
-rw-------    1 14       50           2761 Aug 01 11:22 passwd
drwx------    2 14       50              6 Aug 01 11:30 westos
lftp 172.25.254.100:/pub> get passwd 
get: Access failed: 550 Failed to open file. (passwd)
lftp 172.25.254.100:/pub> quit

修改配置文件,添加下载控制即可!ps:该控制配置文件中没有

可以man  5  vsftpd.service 查找

 找到后添加该控制!

 添加成功,重启服务,即可下载文件成功!

[root@ftp ~]# systemctl restart vsftpd.service 
[root@ftp ~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
drwxrwxr-x    3 0        50             34 Aug 01 11:30 pub
lftp 172.25.254.100:/> cd pub/
lftp 172.25.254.100:/pub> ls
-rw-------    1 14       50           2761 Aug 01 11:22 passwd
drwx------    2 14       50              6 Aug 01 11:30 westos
lftp 172.25.254.100:/pub> get passwd 
2761 bytes transferred
lftp 172.25.254.100:/pub> quit

6.. 删除控制

  • anon_other_write_enable=YES

默认情况下,匿名用户无法删除文件

[root@ftp ~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
drwxrwxr-x    3 0        50             34 Aug 01 11:30 pub
lftp 172.25.254.100:/> cd pub/
lftp 172.25.254.100:/pub> ls
-rw-------    1 14       50           2761 Aug 01 11:22 passwd
drwx------    2 14       50              6 Aug 01 11:30 westos
lftp 172.25.254.100:/pub> rm passwd 
rm: Access failed: 550 Permission denied. (passwd)
lftp 172.25.254.100:/pub> quit 

同理查找删除控制的服务

 添加删除控制在主配置文件!

 配置成功重启服务,再次测试,可以删除文件!

[root@ftp ~]# systemctl restart vsftpd.service 
[root@ftp ~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
drwxrwxr-x    3 0        50             34 Aug 01 11:30 pub
lftp 172.25.254.100:/> cd pub/
lftp 172.25.254.100:/pub> ls
-rw-------    1 14       50           2761 Aug 01 11:22 passwd
drwx------    2 14       50              6 Aug 01 11:30 westos
lftp 172.25.254.100:/pub> rm passwd 
rm ok, `passwd' removed
lftp 172.25.254.100:/pub> ls
drwx------    2 14       50              6 Aug 01 11:30 westos
lftp 172.25.254.100:/pub> quit

7. 上传文件权限设定

  • anon_umask=022 : 目录权限是777-022=755,文件权限是755-111=644.

匿名用户上传文件时,默认权限是600

如果想更改权限,在配置文件中修改即可!

 再次上传文件,文件权限已更改!

 8. 上传文件的用户身份设定

  • chown_upload=YES
    chown_username=westos
    chown_upload_mode=0644

默认下,匿名用户上传文件的用户是ftp

 如果想设定用户身份,可以修改配置文件!

注意:在设定用户身份后,想要修改权限,只能通过 chown_upload_mode=0644  (权限多少就写多少,不是预留权限)设定,不能通过 non_umask=022 设定!

 设定完成后重启服务,再次上传文件测试,发现用户身份和权限都已经设定!

[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf 
[root@ftp ~]# systemctl restart vsftpd.service 
[root@ftp ~]# lftp 172.25.254.100
lftp 172.25.254.100:~> ls
drwxrwxr-x    3 0        50             34 Aug 02 05:01 pub
lftp 172.25.254.100:/> cd pub/
lftp 172.25.254.100:/pub> ls
--w----r--    1 1000     50           2761 Aug 02 05:01 passwd
drwx------    2 14       50              6 Aug 01 11:30 westos
lftp 172.25.254.100:/pub> rm passwd 
rm ok, `passwd' removed
lftp 172.25.254.100:/pub> ls
drwx------    2 14       50              6 Aug 01 11:30 westos
lftp 172.25.254.100:/pub> put /etc/passwd
2761 bytes transferred
lftp 172.25.254.100:/pub> ls
-rw-r--r--    1 1000     50           2761 Aug 02 05:02 passwd
drwx------    2 14       50              6 Aug 01 11:30 westos
lftp 172.25.254.100:/pub> quit
[root@ftp ~]# id westos 
uid=1000(westos) gid=1000(westos) groups=1000(westos),10(wheel)

9. 登陆数量控制

  • max_clients=2

默认情况下,登陆ftp的终端没有限制

在配置文件中设定登陆数量为2

 测试,当登陆第3个ftp时,无法登录。。。。

 此时,退出一个,则第3个顺利登陆!

 将登陆数量注释,则又可以无限制的登陆!

10.上传速率控制

  • anon_max_rate=102400 :设定速率大小为100k

首先建立一个大文件,为了实验效果,上传该文件,默认情况下上传速度还是挺快的!

<pre>[root@ftp ~]# dd if=/dev/zero of=/mnt/bigfile bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (524 MB, 500 MiB) copied, 0.222185 s, 2.4 GB/s
[root@ftp ~]# lftp 172.25.254.100
lftp 172.25.254.100:~&gt; ls
drwxrwxr-x    3 0        50             34 Aug 02 05:02 <font color="#0087FF">pub</font>
lftp 172.25.254.100:/&gt; cd pub/
lftp 172.25.254.100:/pub&gt; ls
-rw-r--r--    1 1000     50           2761 Aug 02 05:02 passwd
drwx------    2 14       50              6 Aug 01 11:30 <font color="#0087FF">westos</font>
lftp 172.25.254.100:/pub&gt; put /mnt/bigfile 
524288000 bytes transferred                     
lftp 172.25.254.100:/pub&gt; quit
[root@ftp ~]# 

</pre>

在配置文件中,设定文件上传速率为100k

 再次上传该文件,发现速率很慢!

 五、本地用户访问控制

1. 登陆控制

  • local_enable=NO|YES :默认开启
  • lftp 172.25.254.100 -u westos : 登陆形式

新建一个本地用户hgx,用户hgx和westos登陆ftp,默认登陆成功!

[root@ftp ~]# useradd hgx
[root@ftp ~]# echo westos | passwd --stdin hgx
Changing password for user hgx.
passwd: all authentication tokens updated successfully.
[root@ftp ~]# lftp 172.25.254.100 -u westos
Password: 
lftp westos@172.25.254.100:~> ls                   
-rw-r--r--    1 1000     1000         2761 Aug 01 10:01 passwd
lftp westos@172.25.254.100:~> quit
[root@ftp ~]# lftp 172.25.254.100 -u hgx
Password: 
lftp hgx@172.25.254.100:~> ls
lftp hgx@172.25.254.100:~> quit

在配置文件中修改登陆控制,设定不允许本地用户登陆!

 保存后重启服务,再次用本地用户登陆,发现无法登录!

[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf 
[root@ftp ~]# systemctl restart vsftpd.service 
[root@ftp ~]# lftp 172.25.254.100 -u hgx
Password: 
lftp hgx@172.25.254.100:~> ls                      
ls: Login failed: 530 This FTP server is anonymous only.
lftp hgx@172.25.254.100:~> quit
[root@ftp ~]# lftp 172.25.254.100 -u westos
Password: 
lftp westos@172.25.254.100:~> ls                   
ls: Login failed: 530 This FTP server is anonymous only.
lftp westos@172.25.254.100:~> quit

2. 家目录控制

  • local_root=/westos : 设定家目录为/westos
  • /home/westos : 默认家目录
[root@ftp ~]# lftp 172.25.254.100 -u westos
Password: 
lftp westos@172.25.254.100:~> ls                   
-rw-r--r--    1 1000     1000         2761 Aug 01 10:01 passwd
lftp westos@172.25.254.100:~> quit

在配置文件中设定本地用户的默认家目录

 再次登陆本地用户,查看家目录,家目录已经变成/westos

<pre>[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf 
[root@ftp ~]# systemctl restart vsftpd.service 
[root@ftp ~]# lftp 172.25.254.100 -u westos
Password: 
lftp westos@172.25.254.100:~&gt; ls                   
-rw-r--r--    1 0        0               0 Aug 01 10:59 westosfile1
-rw-r--r--    1 0        0               0 Aug 01 10:59 westosfile10
-rw-r--r--    1 0        0               0 Aug 01 10:59 westosfile2
-rw-r--r--    1 0        0               0 Aug 01 10:59 westosfile3
-rw-r--r--    1 0        0               0 Aug 01 10:59 westosfile4
-rw-r--r--    1 0        0               0 Aug 01 10:59 westosfile5
-rw-r--r--    1 0        0               0 Aug 01 10:59 westosfile6
-rw-r--r--    1 0        0               0 Aug 01 10:59 westosfile7
-rw-r--r--    1 0        0               0 Aug 01 10:59 westosfile8
-rw-r--r--    1 0        0               0 Aug 01 10:59 westosfile9
lftp westos@172.25.254.100:~&gt; quit
</pre>

3. 写权限控制

  • write_enable=NO|YES : 默认开启

默认情况下,本地用户的写权限是开启的,可以上传文件,可以删除文件

<pre>[root@ftp ~]# lftp 172.25.254.100 -u hgx
Password: 
lftp hgx@172.25.254.100:~&gt; ls                      
lftp hgx@172.25.254.100:~&gt; put /etc/passwd
2798 bytes transferred
lftp hgx@172.25.254.100:~&gt; ls
-rw-r--r--    1 1001     1001         2798 Aug 02 06:37 passwd
lftp hgx@172.25.254.100:~&gt; rm passwd 
rm ok, `passwd&apos; removed
lftp hgx@172.25.254.100:~&gt; quit
</pre>

在配置文件中设定写权限为NO

测试,本地用户上传文件失败!!

[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf 
[root@ftp ~]# systemctl restart vsftpd.service 
[root@ftp ~]# lftp 172.25.254.100 -u hgx
Password: 
lftp hgx@172.25.254.100:~> ls                      
lftp hgx@172.25.254.100:~> put /etc/passwd
put: /etc/passwd: Access failed: 550 Permission denied. (passwd)
lftp hgx@172.25.254.100:~> quit

注意:此时匿名用户也无法上传和删除文件!

[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf 
[root@ftp ~]# systemctl restart vsftpd.service 
[root@ftp ~]# lftp 172.25.254.100 -u hgx
Password: 
lftp hgx@172.25.254.100:~> ls                      
lftp hgx@172.25.254.100:~> put /etc/passwd
put: /etc/passwd: Access failed: 550 Permission denied. (passwd)
lftp hgx@172.25.254.100:~> quit
[root@ftp ~]# lftp 172.25.254.100 
lftp 172.25.254.100:~> ls
drwxrwxr-x    3 0        50             49 Aug 02 05:51 pub
lftp 172.25.254.100:/> cd pub/
lftp 172.25.254.100:/pub> ls
-rw-r--r--    1 1000     50       16043547 Aug 02 05:53 bigfile
-rw-r--r--    1 1000     50           2761 Aug 02 05:02 passwd
drwx------    2 14       50              6 Aug 01 11:30 westos
lftp 172.25.254.100:/pub> rm passwd 
rm: Access failed: 550 Permission denied. (passwd)
lftp 172.25.254.100:/pub> put /etc/passwd
put: /etc/passwd: Access failed: 550 Permission denied. (passwd)
lftp 172.25.254.100:/pub> quit

4. 上传文件权限控制

  • local_umask=077 : 保留权限为077,目录权限为700,文件权限为600

本地用户上传文件默认权限是644

 在主配置文件中设定上传文件权限为600,则保留权限是077

 测试,上传新文件,该文件权限为600

 将权限修改回以前,再次上传新文件,发现权限又变回644

删除上传的文件,ps: 不能用rm -fr  / rm  *  。 只能rm  + 名字~!

[root@ftp ~]# lftp 172.25.254.100 -u hgx
Password: 
lftp hgx@172.25.254.100:~> ls                      
-rw-------    1 1001     1001         1032 Aug 02 06:56 group
-rw-r--r--    1 1001     1001          490 Aug 02 06:57 inittab
-rw-r--r--    1 1001     1001         2798 Aug 02 06:53 passwd
lftp hgx@172.25.254.100:~> rm -fr *
lftp hgx@172.25.254.100:~> ls
-rw-------    1 1001     1001         1032 Aug 02 06:56 group
-rw-r--r--    1 1001     1001          490 Aug 02 06:57 inittab
-rw-r--r--    1 1001     1001         2798 Aug 02 06:53 passwd
lftp hgx@172.25.254.100:~> rm *
rm: Access failed: 550 Delete operation failed. (*)
lftp hgx@172.25.254.100:~> ls
-rw-------    1 1001     1001         1032 Aug 02 06:56 group
-rw-r--r--    1 1001     1001          490 Aug 02 06:57 inittab
-rw-r--r--    1 1001     1001         2798 Aug 02 06:53 passwd
lftp hgx@172.25.254.100:~> rm group passwd inittab 
rm ok, 3 files removed
lftp hgx@172.25.254.100:~> ls
lftp hgx@172.25.254.100:~> quit

5. 用户登陆黑白名单

  • /etc/vsftpd/ftpusers :永久黑名单,名单内的用户不能登陆
  • /etc/vsftpd/user_list:默认黑名单,默认情况下是黑名单。但是在配置文件中添加userlist_deny=NO 时该名单变成了白名单。

默认情况下,hgx用户可以登陆,但是把该用户写入永久黑名单 /etc/vsftpd/ftpusers后,无法登录!

ps:黑白名单不用重启服务,可以立即生效!

[root@ftp ~]# lftp 172.25.254.100 -u hgx
Password: 
lftp hgx@172.25.254.100:~> ls                      
lftp hgx@172.25.254.100:~> quit
[root@ftp ~]# vim /etc/vsftpd/ftpusers 
[root@ftp ~]# 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
hgx
[root@ftp ~]# lftp 172.25.254.100 -u hgx
Password: 
lftp hgx@172.25.254.100:~> ls                      
ls: Login failed: 530 Login incorrect.          
lftp hgx@172.25.254.100:~> 
lftp hgx@172.25.254.100:~> quit

同时,westos用户可以正常登陆!

[root@ftp ~]# lftp 172.25.254.100 -u westos
Password: 
lftp westos@172.25.254.100:~> ls                   
-rw-r--r--    1 1000     1000         2761 Aug 01 10:01 passwd
lftp westos@172.25.254.100:~> quit

把用户hgx从永久黑名单中删除后,该用户hgx又可以登陆!

默认情况,该文件也是 /etc/vsftpd/user_list 黑名单,名单内的用户无法登录!

如下图,westos用户无法登录,hgx用户正常登陆,因为westos用户在默认黑名单内!

[root@ftp ~]# 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
westos
[root@ftp ~]# lftp 172.25.254.100 -u westos
Password: 
lftp westos@172.25.254.100:~> ls                   
ls: Login failed: 530 Permission denied.          
lftp westos@172.25.254.100:~> quit
[root@ftp ~]# lftp 172.25.254.100 -u hgx
Password: 
lftp hgx@172.25.254.100:~> ls                      
lftp hgx@172.25.254.100:~> quit

进入默认黑名单,发现 在配置文件添加 userlist_deny=NO 默认黑名单变成白名单,只有该名单内的用户可以登陆!

 进入配置文件,添加参数,把默认黑名单改成白名单!

 修改成功后重启服务,再次测试!发现westos用户可以登陆,反而hgx用户无法登录!

[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf 
[root@ftp ~]# systemctl restart vsftpd.service 
[root@ftp ~]# lftp 172.25.254.100 -u hgx
Password: 
lftp hgx@172.25.254.100:~> ls                      
ls: Login failed: 530 Permission denied.          
lftp hgx@172.25.254.100:~> quit
[root@ftp ~]# lftp 172.25.254.100 -u westos
Password: 
lftp westos@172.25.254.100:~> ls                   
-rw-r--r--    1 1000     1000         2761 Aug 01 10:01 passwd
lftp westos@172.25.254.100:~> wuit
Unknown command `wuit'.
lftp westos@172.25.254.100:~> quit

想恢复默认设置,只需要在配置文件中删除userlist_deny=NO 即可!同时将westos用户从默认黑名单中删除!再次登陆,两个用户都可以登陆!

[root@ftp ~]# vim /etc/vsftpd/user_list 
[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf 
[root@ftp ~]# systemctl restart vsftpd.service 
[root@ftp ~]# lftp 172.25.254.100 -u westos
Password: 
lftp westos@172.25.254.100:~> ls                   
-rw-r--r--    1 1000     1000         2761 Aug 01 10:01 passwd
lftp westos@172.25.254.100:~> quit
[root@ftp ~]# lftp 172.25.254.100 -u hgx
Password: 
lftp hgx@172.25.254.100:~> ls                      
lftp hgx@172.25.254.100:~> quit

6. 锁定用户到自己的家目录

  • chroot_local_user=YES
  • chmod u-w /home/* :锁定用户到家目录必须去除写权限,否则无法登录!

默认情况下,用户登陆可以进入根目录

[root@ftp ~]# lftp 172.25.254.100 -u hgx
Password: 
lftp hgx@172.25.254.100:~> ls                      
lftp hgx@172.25.254.100:~> cd /
cd ok, cwd=/
lftp hgx@172.25.254.100:/> ls
lrwxrwxrwx    1 0        0               7 Aug 12  2018 bin -> usr/bin
dr-xr-xr-x    5 0        0            4096 Aug 01 06:21 boot
drwxr-xr-x   21 0        0            3300 Aug 02 03:49 dev
drwxr-xr-x  140 0        0            8192 Aug 02 05:58 etc
drwxr-xr-x    4 0        0              31 Aug 02 05:58 home
lrwxrwxrwx    1 0        0               7 Aug 12  2018 lib -> usr/lib
lrwxrwxrwx    1 0        0               9 Aug 12  2018 lib64 -> usr/lib64
drwxr-xr-x    2 0        0               6 Aug 12  2018 media
drwxr-xr-x    2 0        0              21 Aug 02 05:48 mnt
drwxr-xr-x    2 0        0               6 Aug 12  2018 opt
dr-xr-xr-x  209 0        0               0 Aug 02 03:49 proc
dr-xr-x---   15 0        0            4096 Aug 02 08:51 root
drwxr-xr-x   40 0        0            1220 Aug 02 03:49 run
lrwxrwxrwx    1 0        0               8 Aug 12  2018 sbin -> usr/sbin
drwxr-xr-x    2 0        0               6 Aug 12  2018 srv
dr-xr-xr-x   13 0        0               0 Aug 02 03:49 sys
drwxrwxrwt   17 0        0            4096 Aug 02 06:59 tmp
drwxr-xr-x   12 0        0             144 Jul 30 06:09 usr
drwxr-xr-x   22 0        0            4096 Jul 30 12:48 var
drwxr-xr-x    2 0        0             197 Aug 01 10:59 westos

比较危险,因此可以设定锁定用户到自己的家目录,则不能随便访问其他目录!

在主配置文件chroot_local_user=YES,同时去除主目录的写权限!

 本地用户登陆成功,且被锁定在自己的家目录中!

7.锁定用户到自己的家目录--白名单

  • chroot_local_user=YES
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list
      : 在名单内的用户没有被锁定

上节实验,本地用户全部都锁定在自己的家目录中,可以设定白名单!

让westos用户被锁定,hgx用户不被锁定!

首先在配置文件中 设定

 由于白名单不存在,所以要新建白名单!将用户hgx写进该白名单!

[root@ftp ~]# cat /etc/vsftpd/chroot_list 
hgx
[root@ftp ~]# 

重启服务后进行测试,发现hgx用户没有被锁定!westos用户被锁定!

[root@ftp ~]# systemctl restart vsftpd.service 
[root@ftp ~]# lftp 172.25.254.100 -u westos
Password: 
lftp westos@172.25.254.100:~> ls                   
-rw-r--r--    1 1000     1000         2761 Aug 01 10:01 passwd
lftp westos@172.25.254.100:/> cd /
lftp westos@172.25.254.100:/> ls
-rw-r--r--    1 1000     1000         2761 Aug 01 10:01 passwd
lftp westos@172.25.254.100:/> quit
[root@ftp ~]# lftp 172.25.254.100 -u hgx
Password: 
lftp hgx@172.25.254.100:~> ls                      
lftp hgx@172.25.254.100:~> cd /
cd ok, cwd=/
lftp hgx@172.25.254.100:/> ls
lrwxrwxrwx    1 0        0               7 Aug 12  2018 bin -> usr/bin
dr-xr-xr-x    5 0        0            4096 Aug 01 06:21 boot
drwxr-xr-x   21 0        0            3300 Aug 02 03:49 dev
drwxr-xr-x  140 0        0            8192 Aug 02 05:58 etc
drwxr-xr-x    4 0        0              31 Aug 02 05:58 home
lrwxrwxrwx    1 0        0               7 Aug 12  2018 lib -> usr/lib
lrwxrwxrwx    1 0        0               9 Aug 12  2018 lib64 -> usr/lib64
drwxr-xr-x    2 0        0               6 Aug 12  2018 media
drwxr-xr-x    2 0        0              21 Aug 02 05:48 mnt
drwxr-xr-x    2 0        0               6 Aug 12  2018 opt
dr-xr-xr-x  209 0        0               0 Aug 02 03:49 proc
dr-xr-x---   15 0        0            4096 Aug 02 09:36 root
drwxr-xr-x   40 0        0            1220 Aug 02 03:49 run
lrwxrwxrwx    1 0        0               8 Aug 12  2018 sbin -> usr/sbin
drwxr-xr-x    2 0        0               6 Aug 12  2018 srv
dr-xr-xr-x   13 0        0               0 Aug 02 03:49 sys
drwxrwxrwt   17 0        0            4096 Aug 02 09:36 tmp
drwxr-xr-x   12 0        0             144 Jul 30 06:09 usr
drwxr-xr-x   22 0        0            4096 Jul 30 12:48 var
drwxr-xr-x    2 0        0             197 Aug 01 10:59 westos
lftp hgx@172.25.254.100:/> quit

8. 锁定用户到自己的家目录--黑名单

  • chroot_local_user=NO
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list :此时改名为黑名单!名单内的用户被锁定!

设置主配置文件,设定黑名单!

重启服务,黑名单中只有hgx用户,测试hgx和westos用户,发现hgx用户被锁定!

[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf 
[root@ftp ~]# systemctl restart vsftpd.service 
[root@ftp ~]# cat /etc/vsftpd/chroot_list 
hgx
[root@ftp ~]# lftp 172.25.254.100 -u hgx
Password: 
lftp hgx@172.25.254.100:~> ls                      
lftp hgx@172.25.254.100:/> cd /  
lftp hgx@172.25.254.100:/> ls
lftp hgx@172.25.254.100:/> quit
[root@ftp ~]# lftp 172.25.254.100 -u westos
Password: 
lftp westos@172.25.254.100:~> ls                   
-rw-r--r--    1 1000     1000         2761 Aug 01 10:01 passwd
lftp westos@172.25.254.100:~> cd /
cd ok, cwd=/
lftp westos@172.25.254.100:/> ls
lrwxrwxrwx    1 0        0               7 Aug 12  2018 bin -> usr/bin
dr-xr-xr-x    5 0        0            4096 Aug 01 06:21 boot
drwxr-xr-x   21 0        0            3300 Aug 02 03:49 dev
drwxr-xr-x  140 0        0            8192 Aug 02 05:58 etc
drwxr-xr-x    4 0        0              31 Aug 02 05:58 home
lrwxrwxrwx    1 0        0               7 Aug 12  2018 lib -> usr/lib
lrwxrwxrwx    1 0        0               9 Aug 12  2018 lib64 -> usr/lib64
drwxr-xr-x    2 0        0               6 Aug 12  2018 media
drwxr-xr-x    2 0        0              21 Aug 02 05:48 mnt
drwxr-xr-x    2 0        0               6 Aug 12  2018 opt
dr-xr-xr-x  209 0        0               0 Aug 02 03:49 proc
dr-xr-x---   15 0        0            4096 Aug 02 09:51 root
drwxr-xr-x   40 0        0            1220 Aug 02 03:49 run
lrwxrwxrwx    1 0        0               8 Aug 12  2018 sbin -> usr/sbin
drwxr-xr-x    2 0        0               6 Aug 12  2018 srv
dr-xr-xr-x   13 0        0               0 Aug 02 03:49 sys
drwxrwxrwt   17 0        0            4096 Aug 02 09:46 tmp
drwxr-xr-x   12 0        0             144 Jul 30 06:09 usr
drwxr-xr-x   22 0        0            4096 Jul 30 12:48 var
drwxr-xr-x    2 0        0             197 Aug 01 10:59 westos
lftp westos@172.25.254.100:/> quit

六、虚拟用户访问

以上实验用户都是真实存在的,这样服务器的安全性很差,因此可以建立虚拟用户访问ftp!

1. 建立虚拟用户

  • 建立认证文件模板:一行用户名一行密码
  • 加密认证文件
  • 建立认证策略文件
  • 配置文件开启虚拟用户功能

新建认证文件:/etc/vsftpd/westos :名字任意!

加密认文件

[root@ftp ~]# cat /etc/vsftpd/westos
user1
123
user2
123
[root@ftp ~]# db_load -T -t hash -f /etc/vsftpd/westos /etc/vsftpd/westos.db
[root@ftp ~]# cd /etc/vsftpd
[root@ftp vsftpd]# ls
chroot_list  user_list    vsftpd_conf_migrate.sh  westos.db
ftpusers     vsftpd.conf  westos

建立认证策略文件

[root@ftp vsftpd]# vi /etc/pam.d/westos
[root@ftp vsftpd]# cat /etc/pam.d/westos
account    required   pam_userdb.so    db=/etc/vsftpd/westos
auth       required   pam_userdb.so    db=/etc/vsftpd/westos

编辑配置文件,开启虚拟功能!指定认证策略文件!

 设定完成,重启服务!测试虚拟用户usera user2是否可以登陆ftp

 虚拟用户成功登陆ftp,但是家目录与匿名用户的一样!可以建立虚拟用户自己的家目录!

2. 虚拟用户家目录的设定

  • local_root=/ftpuserdir/$USER  :设定虚拟用户的家目录
    user_sub_token=$USER

首先建立虚拟用的家目录,名字与用户名一致!

[root@ftp ~]# ls -lR /ftphomedir/
/ftphomedir/:
total 0
drwxr-xr-x 3 root root 34 Aug  2 19:06 user1
drwxr-xr-x 3 root root 34 Aug  2 19:06 user2

/ftphomedir/user1:
total 0
drwxr-xr-x 2 root root 6 Aug  2 19:06 pub
-rw-r--r-- 1 root root 0 Aug  2 19:03 user1file

/ftphomedir/user1/pub:
total 0

/ftphomedir/user2:
total 0
drwxr-xr-x 2 root root 6 Aug  2 19:06 pub
-rw-r--r-- 1 root root 0 Aug  2 19:03 user2file

/ftphomedir/user2/pub:
total 0

在配置文件中设定虚拟用户的家目录!

 设定成功后,重启服务,测试,登陆匿名用户!

登陆user1就在user1的家目录,user2就在user2的家目录!

[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf 
[root@ftp ~]# systemctl restart vsftpd.service 
[root@ftp ~]# lftp 172.25.254.100 -u user1
Password: 
lftp user1@172.25.254.100:~> ls                    
drwxr-xr-x    2 0        0               6 Aug 02 11:06 pub
-rw-r--r--    1 0        0               0 Aug 02 11:03 user1file
lftp user1@172.25.254.100:/> quit
[root@ftp ~]# lftp 172.25.254.100 -u user2
Password: 
lftp user2@172.25.254.100:~> ls                    
drwxr-xr-x    2 0        0               6 Aug 02 11:06 pub
-rw-r--r--    1 0        0               0 Aug 02 11:03 user2file
lftp user2@172.25.254.100:/> quit

3. 用户配置独立设定

  • user_config_dir=/etc/vsftpd/user_conf : 主配置文件中添加
  • mkdir  /etc/vsftpd/user_conf  : 新建独立目录
  • vim  /etc/vsftpd/user_conf/user1 : 独立目录下新建与用户名相同的文件,并且写入配置!则单独生效!

虚拟用户userq user2用的都是默认配置文件,则上传,删除文件功能是一致的!

首先修改目录的权限+所有组!!此时,所有的虚拟用户都可以上传文件+删除文件!

[root@ftp ~]# ls -ld /ftphomedir/user{1..2}
drwxr-xr-x 3 root root 34 Aug  2 19:06 /ftphomedir/user1
drwxr-xr-x 3 root root 34 Aug  2 19:06 /ftphomedir/user2
[root@ftp ~]# chmod 775 /ftphomedir/user{1..2}/pub
[root@ftp ~]# chgrp ftp /ftphomedir/user{1..2}/pub
[root@ftp ~]# ls -ld /ftphomedir/user{1..2}/pub
drwxrwxr-x 2 root ftp 6 Aug  2 19:06 /ftphomedir/user1/pub
drwxrwxr-x 2 root ftp 6 Aug  2 19:06 /ftphomedir/user2/pub
[root@ftp ~]# lftp 172.25.254.100 -u user1
Password: 
lftp user1@172.25.254.100:~> ls                    
drwxrwxr-x    2 0        50              6 Aug 02 11:06 pub
-rw-r--r--    1 0        0               0 Aug 02 11:03 user1file
lftp user1@172.25.254.100:/> cd pub/
lftp user1@172.25.254.100:/pub> ls
lftp user1@172.25.254.100:/pub> put /etc/passwd
2798 bytes transferred
lftp user1@172.25.254.100:/pub> ls 
-rw-r--r--    1 1000     50           2798 Aug 02 11:31 passwd
lftp user1@172.25.254.100:/pub> rm passwd 
rm ok, `passwd' removed
lftp user1@172.25.254.100:/pub> ls
lftp user1@172.25.254.100:/pub> quit
[root@ftp ~]# lftp 172.25.254.100 -u user2
Password: 
lftp user2@172.25.254.100:~> ls                    
drwxrwxr-x    2 0        50              6 Aug 02 11:06 pub
-rw-r--r--    1 0        0               0 Aug 02 11:03 user2file
lftp user2@172.25.254.100:/> cd pub/
lftp user2@172.25.254.100:/pub> ls
lftp user2@172.25.254.100:/pub> put /etc/passwd
2798 bytes transferred
lftp user2@172.25.254.100:/pub> ls
-rw-r--r--    1 1000     50           2798 Aug 02 11:31 passwd
lftp user2@172.25.254.100:/pub> rm passwd 
rm ok, `passwd' removed
lftp user2@172.25.254.100:/pub> ls 
lftp user2@172.25.254.100:/pub> quit

修改默认配置文件,关闭上传+删除文件设定!此时虚拟用户都无法上传+删除文件!

重启服务后,设定生效!

[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf 
[root@ftp ~]# systemctl restart vsftpd.service 
[root@ftp ~]# lftp 172.25.254.100 -u user1
Password: 
lftp user1@172.25.254.100:~> ls                    
drwxrwxr-x    2 0        50              6 Aug 02 11:31 pub
-rw-r--r--    1 0        0               0 Aug 02 11:03 user1file
lftp user1@172.25.254.100:/> cd pub/
lftp user1@172.25.254.100:/pub> ls
lftp user1@172.25.254.100:/pub> put /etc/passwd
put: /etc/passwd: Access failed: 550 Permission denied. (passwd)
lftp user1@172.25.254.100:/pub> quit
[root@ftp ~]# lftp 172.25.254.100 -u user2
Password: 
lftp user2@172.25.254.100:~> ls                    
drwxrwxr-x    2 0        50              6 Aug 02 11:31 pub
-rw-r--r--    1 0        0               0 Aug 02 11:03 user2file
lftp user2@172.25.254.100:/> cd pub/
lftp user2@172.25.254.100:/pub> ls
lftp user2@172.25.254.100:/pub> put /etc/passwd
put: /etc/passwd: Access failed: 550 Permission denied. (passwd)
lftp user2@172.25.254.100:/pub> quit

如果想要实现user1 可以上传+删除文件,而user2不可以吗?需要建立独立配置文件!

首先在默认配置文件中添加独立目录---名字任意

 新建该目录,重启服务!

[root@ftp ~]# mkdir /etc/vsftpd/user_conf
[root@ftp ~]# systemctl restart vsftpd.service 

在该目录下新建与用户名同名的文件!并且写入允许上传的配置!

[root@ftp ~]# touch /etc/vsftpd/user_conf/user1
[root@ftp ~]# vim /etc/vsftpd/user_conf/user1
[root@ftp ~]# cat /etc/vsftpd/user_conf/user1
anon_upload_enable=YES
[root@ftp ~]# 

测试!!user1可以上传文件,user2不可以!因为user1使用的是独立配置,user2使用的是默认配置,而默认配置不允许上传文件!

[root@ftp ~]# lftp 172.25.254.100 -u user1
Password: 
lftp user1@172.25.254.100:~> ls                    
drwxrwxr-x    2 0        50              6 Aug 02 11:31 pub
-rw-r--r--    1 0        0               0 Aug 02 11:03 user1file
lftp user1@172.25.254.100:/> cd pub/
lftp user1@172.25.254.100:/pub> ls
lftp user1@172.25.254.100:/pub> put /etc/passwd
2798 bytes transferred
lftp user1@172.25.254.100:/pub> ls 
-rw-r--r--    1 1000     50           2798 Aug 02 11:52 passwd
lftp user1@172.25.254.100:/pub> quit
[root@ftp ~]# lftp 172.25.254.100 -u user2
Password: 
lftp user2@172.25.254.100:~> ls                    
drwxrwxr-x    2 0        50              6 Aug 02 11:31 pub
-rw-r--r--    1 0        0               0 Aug 02 11:03 user2file
lftp user2@172.25.254.100:/> cd pub/
lftp user2@172.25.254.100:/pub> ls
lftp user2@172.25.254.100:/pub> put /etc/passwd
put: /etc/passwd: Access failed: 550 Permission denied. (passwd)
lftp user2@172.25.254.100:/pub> quit

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值