Linux之vsftpd的部署

FTP:file transfer protocol,文件传输协议
它是互联网中最早的文件传输协议。
端口:21(用于连接)、20(用于传输文件)。

vsftpd的安装

详细过程参考Linux之软件管理中的"搭建共享软件仓库"一节
在这里插入图片描述

1. 在含有软件资源(镜像/第三方软件)的主机中安装ftp软件

命令:
yum install vsftpd -y
systemctl start vsftpd
systemctl enable vsftpd

2. 关闭selinux和firewalld

关闭selinux

  • 查询selinux状态
    命令:getenforce

  • 编辑配置文件
    配置文件位置:/etc/sysconfig/selinux
    在这里插入图片描述

3. 重启系统

命令:reboot

4. 关闭firewalld

命令:
systemctl stop firewalld
systemctl disable firewalld

5. 测试访问该机的ftp目录

共两种方法测试:

  • 在浏览器中输入:ftp://ftp服务器的ip,返回ftp的资源列表说明成功。
  • 执行命令lftp ftp服务器的ip注意:lftp软件需下载)

下载lftp的过程

[root@linux7_clone yum.repos.d]# yum whatprovides */lftp		##找到提供lftp软件的目录
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
localsoftware                                                 | 2.9 kB  00:00:00     
rhel7                                                         | 4.3 kB  00:00:00     
software                                                      | 2.9 kB  00:00:00     
zjrhel7                                                       | 4.3 kB  00:00:00     
(1/6): localsoftware/primary_db                               | 1.1 kB  00:00:00     
(2/6): zjrhel7/primary_db                                     | 4.2 MB  00:00:00     
(3/6): rhel7/primary_db                                       | 4.2 MB  00:00:00     
(4/6): rhel7/group_gz                                         | 146 kB  00:00:00     
(5/6): zjrhel7/group_gz                                       | 146 kB  00:00:00     
(6/6): software/primary_db                                    | 1.1 kB  00:00:00     
localsoftware/filelists_db                                    |  586 B  00:00:00     
rhel7/filelists_db                                            | 3.4 MB  00:00:00     
software/filelists_db                                         |  586 B  00:00:00     
zjrhel7/filelists_db                                          | 3.4 MB  00:00:00     
lftp-4.4.8-11.el7.i686 : A sophisticated file transfer program
Repo        : rhel7
Matched from:
Filename    : /usr/bin/lftp
Filename    : /usr/lib/lftp



lftp-4.4.8-11.el7.i686 : A sophisticated file transfer program
Repo        : zjrhel7
Matched from:
Filename    : /usr/bin/lftp
Filename    : /usr/lib/lftp



lftp-4.4.8-11.el7.x86_64 : A sophisticated file transfer program
Repo        : rhel7
Matched from:
Filename    : /usr/bin/lftp
Filename    : /usr/lib64/lftp



lftp-4.4.8-11.el7.x86_64 : A sophisticated file transfer program		##对应本机系统的lft软件的版本
Repo        : zjrhel7
Matched from:
Filename    : /usr/bin/lftp
Filename    : /usr/lib64/lftp



[root@linux7_clone yum.repos.d]# yum install lftp-4.4.8-11.el7.x86_64 -y  ##安装lftp
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
Resolving Dependencies
--> Running transaction check
---> Package lftp.x86_64 0:4.4.8-11.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=======================================================================================
 Package          Arch               Version                   Repository         Size
=======================================================================================
Installing:
 lftp             x86_64             4.4.8-11.el7              rhel7             752 k

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

Total download size: 752 k
Installed size: 2.4 M
Downloading packages:
lftp-4.4.8-11.el7.x86_64.rpm                                    | 752 kB  00:00:01     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : lftp-4.4.8-11.el7.x86_64                                            1/1 
rhel7/productid                                                 | 1.6 kB  00:00:00     
  Verifying  : lftp-4.4.8-11.el7.x86_64                                            1/1 

Installed:
  lftp.x86_64 0:4.4.8-11.el7                                                           

Complete!

访问ftp服务器

命令:
匿名访问:lftp ip地址
普通用户访问:lfto ip地址 -u 用户名
在这里插入图片描述
此时,成功配置好ftp服务

vsftpd的基本信息

  • 服务名称:
    vsftpd.service
  • 配置文件目录:
    /etc/vsftpd
  • 主配置文件:
    /etc/vsftpd/vsftpd.conf
  • 默认发布目录:
    var/ftp
    在这里插入图片描述
  • 报错信息:
报错代码 含义
550 程序本身拒绝此命令
553 文件系统权限被限制,权限过小
500 权限过大
503 认证失败(密码错误)

匿名用户的访问控制

  • 匿名访问:
    命令: lftp ftp服务器ip
    在这里插入图片描述
  • 本地用户访问:
    命令:lftp ftp服务器ip -u 用户名
    在这里插入图片描述

若要配置ftp服务器的访问,可修改主配置文件:/etc/vsftpd/vsftpd.conf

修改后需重启ftp服务:systemctl restart vsftpd

登陆控制

控制主配置文件中的语句:anonymous_enable=YES|NO

  • 允许匿名登录
    anonymous_enable=YES
    默认情况下,匿名登陆的位置是ftp服务器的/var/ftp目录
  • 不允许匿名登陆
    anonymous_enable=NO

家目录控制

在主配置文件中增加语句:anon_root=登陆后的位置

若不加此语句,默认登陆位置为:/var/ftp目录

上传控制

控制主配置文件中的语句:anon_upload_enable=YES|NO

默认情况下不开启上传功能,anon_upload_enable=YES被注释。

  1. 默认情况下上传文件
    在这里插入图片描述
  2. 配置anon_upload_enable=YES后上传文件
    在这里插入图片描述
  3. 查看ftp服务器中/var/ftp的权限
    在这里插入图片描述
  4. 修改权限后上传文件
[root@rhel7 software]# chmod 777 /var/ftp/

在这里插入图片描述

  1. 仅修改/var/ftp/pub的权限后上传文件
[root@rhel7 software]# chmod 755 /var/ftp/
[root@rhel7 software]# chmod 777 /var/pft/pub/
[root@rhel7 software]# ls -ld /var/ftp/pub
drwxrwxrwx. 2 root root 6 Jun 21  2018 /var/ftp/pub

在这里插入图片描述

下载控制

默认通过FTP仅能下载可读文件,下载路径为当前路径

在FTP中下载命令为get

要需要下载其它类型的文件,可在主配置文件中增加语句:anon_world_readable_only=NO

建立两个权限不同的文件测试下载功能:
在这里插入图片描述
在这里插入图片描述
修改配置文件后方可下载不可读文件

目录建立控制

在主配置文件中增加语句:anon_world_readable_only=YES|NO

默认情况下该语句被注释,即默认情况下不能在ftp服务器新建目录。
在这里插入图片描述

删除或重命名文件/目录控制

在主配置文件中增加语句:anon_other_write_enable=YES|NO
在这里插入图片描述

登陆数量控制

默认可登录的用户数为2000个

在主配置文件中增加语句:max_clients=数目

上传速率控制

在主配置文件中增加语句:anon_max_rate=自定义速率

本地用户的访问控制

登陆控制

  • 创建新用户:
    useradd alice
    useradd bob
  • 给新用户设置密码:
    echo "alice" | passwd --stdin alice
    echo "bob" | passwd --stdin bob
  • 登陆ftp服务器的目录:
    lftp ftp服务器ip -u 用户名
    在这里插入图片描述
    在这里插入图片描述
    在ftp服务器的主配置文件/etc/vsftpd/vsftpd.conf中,语句local_enable=YES|NO控制本地用户的登陆。默认情况下local_enable=YES,若设置为NO,则:
    在这里插入图片描述

家目录控制

命令:local_root=登陆后的位置

若令本地用户登陆的页面为/software目录:
在这里插入图片描述

写权限控制

命令:write_enable=YES|NO
本地用户默认情况下可以写入文件,即默认write_enable=YES

上传文件权限控制

命令:local_umask=077

用户登陆控制

永久黑名单

-配置文件:/etc/vsftpd/ftpusers
特点:即改即用,无需重启服务。

默认黑名单

  • 配置文件:etc/vsftpd/user_list
    特点:默认黑名单,可修改为白名单。
    在这里插入图片描述
    在这里插入图片描述

用户登录白名单

在主配置文件中增加语句:userlist_deny=NO
此时,配置文件etc/vsftpd/user_list中变为白名单,文件中不包含的所有用户均不可登录。

锁定用户到自己的家目录中

chmod u-w /home/*
chroot_local_user=YES

锁定用户到自己的家目录中的白名单

chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

锁定用户到自己的家目录中的黑名单

chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

虚拟用户访问

虚拟用户是ftp目录中本不存在,专门为了远程访问ftp服务器中的文件而建立的用户。这些用户不属于ftp服务器上的本地用户。

建立虚拟过程

1. 建立认证文件模板

编写配置文件/etc/vsftpd/ftp_auth_file

[root@RHTL8_clone vsftpd]# vim ftp_auth_file

在这里插入图片描述
认证文件模板与认证策略相对应。

2. 加密认证文件

[root@RHTL8_clone vsftpd]# db_load -T -t hash -f ftp_auth_file ftp_auth_file.db

注意:ftp_auth_fileftp_auth_file.db两个文件所处的路径为:/etc/vsftpd目录(我上条命令执行时的当前目录正好就是/etc/vsftpd,所以没有使用绝对路径)。

3. 编写新的认证策略

[root@RHTL8_clone vsftpd]# cd /etc/pam.d		##进入系统配置文件目录
[root@RHTL8_clone pam.d]# ls					##该目录下为所有的系统配置文件
atd               gdm-launch-environment  postlogin             sudo
chfn              gdm-password            remote                sudo-i
chsh              gdm-pin                 rhn_register          su-l
cockpit           gdm-smartcard           runuser               system-auth
config-util       liveinst                runuser-l             systemd-user
crond             login                   smartcard-auth        vlock
cups              other                   sshd                  vmtoolsd
fingerprint-auth  passwd                  sssd-shadowutils      vsftpd
gdm-autologin     password-auth           su                    xserver
gdm-fingerprint   polkit-1                subscription-manager
[root@RHTL8_clone pam.d]# vim ftp-virtual-user	##文件名称中不能有大写
[root@RHTL8_clone pam.d]# vim /etc/vsftpd/vsftpd.conf

在这里插入图片描述

4. 编辑主配置文件/etc/vsftpd/vsftpd.conf

  • 指定认证策略文件
    pam_service_name=ftp-virtual-user
  • 指定虚拟用户功能开启
    guest_enable=YES
  • 指定虚拟用户在ftp服务器上的用户身份为ftp
    guest_username=ftp

5. 重启ftp服务

[root@RHTL8_clone pam.d]# systemctl restart vsftpd

6. 虚拟用户访问ftp服务器

在这里插入图片描述
bob能够访问ftp服务器,却不是ftp服务器的本地用户,它是专门服务于ftp软件的虚拟用户。
在这里插入图片描述

虚拟用户家目录的独立设定

1. 准备工作

[root@RHTL8_clone pam.d]# mkdir /ftpuserdir		##创建虚拟用户目录
[root@RHTL8_clone user2]# cd /ftpuserdir
[root@RHTL8_clone ftpuserdir]# mkdir bob		##创建和虚拟用户bob名称相同的目录
[root@RHTL8_clone ftpuserdir]# mkdir frank		##创建和虚拟用户frank名称相同的目录
[root@RHTL8_clone ftpuserdir]# cd bob
[root@RHTL8_clone bob]# touch bob_file			##在bob目录下创建新文件
[root@RHTL8_clone bob]# cd ..
[root@RHTL8_clone ftpuserdir]# cd frank
[root@RHTL8_clone frank]# touch frank_file		##在frank目录下创建新文件
[root@RHTL8_clone frank]# cd ..
[root@RHTL8_clone ftpuserdir]# ls -l
total 0
drwxr-xr-x 2 root root 22 Feb 21 20:24 bob
drwxr-xr-x 2 root root 24 Feb 21 20:24 frank

2. 编辑主配置文件

[root@RHTL8_clone pam.d]# vim /etc/vsftpd/vsftpd.conf 

在主配置文件中增加以下两个语句:

local_root=/ftpuserdir/$USER

用本地用户的登陆页面参数ocal_root设置虚拟用户的登陆页面,将登陆页面设置为ftpuserdir目录下当前用户目录中的内容。

$USER指系统当前用户。

user_sub_token=$USER

说明$USER的含义与系统中该字符的含义相同,表示当前用户。

3. 重启ftp服务

[root@RHTL8_clone pam.d]# systemctl restart vsftpd

4. 测试登陆至虚拟用户的家目录

在这里插入图片描述
不同的用户登陆后看到了页面不同,实现了虚拟用户家目录的独立。

虚拟用户配置的独立

1. 环境搭建

给虚拟用户创建目录:

[root@RHTL8_clone ftpuserdir]# ls
bob  frank
[root@RHTL8_clone ftpuserdir]# cd bob
[root@RHTL8_clone bob]# mkdir pub				##为用户bob创建新目录pub
[root@RHTL8_clone bob]# cd ..
[root@RHTL8_clone ftpuserdir]# cd frank
[root@RHTL8_clone frank]# mkdir pub				##为用户frank创建新目录pub
[root@RHTL8_clone frank]# cd
[root@RHTL8_clone ~]# chmod 775 /ftpuserdir/bob/pub		##修改用户bob中pub目录的权限
[root@RHTL8_clone ~]# chmod 775 /ftpuserdir/frank/pub	##修改用户frank中pub目录的权限
[root@RHTL8_clone ~]# cd /ftpuserdir
[root@RHTL8_clone ftpuserdir]# ls
bob  frank
[root@RHTL8_clone ftpuserdir]# ls -l
total 0
drwxr-xr-x 3 root root 33 Feb 21 20:40 bob
drwxr-xr-x 3 root root 35 Feb 21 20:41 frank
[root@RHTL8_clone ftpuserdir]# chgrp ftp /ftpuserdir/bob/pub	##修改用户bob中pub目录的所属组
[root@RHTL8_clone ftpuserdir]# chgrp ftp /ftpuserdir/frank/pub	##修改用户frank中pub目录的所属组
[root@RHTL8_clone ftpuserdir]# ls -ld /ftpuserdir/bob/pub
drwxrwxr-x 2 root ftp 6 Feb 21 20:40 /ftpuserdir/bob/pub
[root@RHTL8_clone ftpuserdir]# ls -ld /ftpuserdir/frank/pub
drwxrwxr-x 2 root ftp 6 Feb 21 20:41 /ftpuserdir/frank/pub

在这里插入图片描述
此时,两个虚拟用户中均有与之对应的文件和目录。

2. 配置虚拟用户的特殊权限

默认所有用户不能上传文件,可通过在主配置文件中将对应参数修改为:anon_upload_enable=YES即可上传文件。但此种改法赋予了所有用户上传文件的权限。

若要求仅令虚拟用户bob拥有上传文件的权限

[root@RHTL8_clone ftpuserdir]# cd /etc/vsftpd
[root@RHTL8_clone vsftpd]# ls
ftp_auth_file  ftp_auth_file.db  ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
[root@RHTL8_clone vsftpd]# mkdir user_config		##创建配置目录
[root@RHTL8_clone vsftpd]# cd user_config/
[root@RHTL8_clone user_config]# touch bob			##创建虚拟用户bob的配置文件
[root@RHTL8_clone user_config]# vim bob

在配置文件中增加语句:

anon_upload_enable=YES

3. 修改主配置文件

增加语句:
user_config_dir=/etc/vsftpd/user_config

4. 重启ftp服务

[root@RHTL8_clone user_config]# systemctl restart vsftpd

5. 虚拟用户上传文件至ftp服务器

在这里插入图片描述
553说明bob可上传文件,但不知哪里权限有问题,之后再排查。

之前错误的原因是直接将文件上传至bob用户的桌面,而bob桌面的权限为:
在这里插入图片描述
若将/ftpuserdir/bob目录的权限修改为777,ftp服务器拒绝。它的最大权限只能是775。

查看之前给与/ftpuserdir/bob/pub目录的权限:
在这里插入图片描述
尝试在pub目录中上传文件:
在这里插入图片描述
上传成功!!

注意:同一个文件上传一次就可以了,如果向ftp服务器上传已存在的文件,也会报553错误。

发布了58 篇原创文章 · 获赞 3 · 访问量 2163

猜你喜欢

转载自blog.csdn.net/weixin_43936250/article/details/104396416