一、匿名用户登录

Yum方式安装:
[root@hadoop103 ~]# yum -y install vsftpd ftp (加安装比较快)
[root@hadoop103 ~]# systemctl start vsftpd
[root@hadoop103 ~]# systemctl status vsftpd
[root@hadoop103 ~]# systemctl enable vsftpd

配置文件:/etc/vsftpd/vsftpd.conf

默认情况下,安装完vsftpd即可匿名用户登录(匿名用户名为:ftp/anonymous,无密码)
匿名用户只有下载权限,而无上传权限,是因为一下原因:

  1. /etc/vsftpd/vsftpd.conf 配置文件中“anon_upload_enable=YES”选项没有开启

(开启需去掉注释)

  1. 匿名用户默认/var/ftp文件写入目录无其他用户写入权限

image.png
(除了所有者有w权限外,其他用户无w权限)

1. 匿名权限控制

  1. anonymous_enable=YES # 启用匿名用户访问
  2. anon_umask=022 # 匿名用户所上传文件的掩码
  3. anon_root=/var/ftp # 匿名用户FTP的根目录
  4. anon_upload_enable=YES # 允许上传文件
  5. anon_mkdir_write_enable=YES # 允许创建目录
  6. anon_other_write_enable=YES # 允许其他写入权限(删除、覆盖、重命名)
  7. anon_max_rate=0 # 限制最大传输速率(0为不限速,单位:bytes/秒)

示例:

1)实现匿名用户上传

  - 开启 anon_upload_enable=YES 配置项
  - 在/var/ftp目录下创建上传目录
  - 修改上传目录的权限或所有者,让匿名用户有写入权限

(建议不要直接修改/var/ftp目录权限或者修改/var/ftp/pub目录权限)

[root@hadoop103 ~]# vim /etc/vsftpd/vsftpd.conf 去掉下面配置项前面的注释

# anon_upload_enable=YES 改为 anon_upload_enable=YES

[root@hadoop103 ~]# cd /var/ftp/
[root@hadoop103 ftp]# mkdir upload (创建单独的上传目录)
[root@hadoop103 ftp]# chmod o+w upload (给上传目录设置权限)
[root@hadoop103 ftp]# getsebool -a|grep ftp
image.png
(查看ftpd_full_access、ftpd_use_passive_mode 此两项是否为 on)
[root@hadoop103 ftp]# setsebool ftpd_full_access on
[root@hadoop103 ftp]# setsebool ftpd_use_passive_mode on

[root@hadoop103 ftp]# systemctl restart vsftpd (重启vsftpd服务)

2)实现创建目录和文件其他操作

  - 配置文件开启 anon_mkdir_write_enable=YES 允许创建目录权限
  - 配置文件开启 anon_other_write_enable=YES  允许其他写入权限

3)用于进入某个目录时弹出相应说明

(说明语首次进入目录时会显示)

  - 在对应目录下面创建 .message 文件,并写入说明内容
  - 配置文件开启 dirmessage_enable=YES 
  - 配置文件设置 message_file=.message  (.message文件存放默认在FTP当前创建的目录下)

image.png
image.png

4)实现上传的文件其他人可下载

默认情况下开放上传权限后,上传的文件是无法下载的,因为文件的其他人位置没有 r 权限

  - 配置文件设置 anon_umask=022  允许其他人可下载

二、本地用户登录

1. 本地用户权限控制

local_enable=YES                                                    # 启用本地系统用户
local_umask=022                                                        # 本地用户所上传文件的权限掩码
local_root=/var/ftp                                                # 设置本地用户的FTP根目录
chroot_local_user=YES                                            # 将登录FTP的用户禁锢在主目录
local_max_rate=0                                                    # 显示最大传输速率
ftpd_banner=Welcome to blah FTP service        # 用户登录时显示的欢迎信息
userlist_enable=YES & userlist_deny=YES        # 禁止/etc/vsftpd/user_list文件中出现的用户登录FTP
userlist_enable=YES & userlist_deny=NO        # 仅允许/etc/vsftpd/user_list文件中出现的用户登录FTP

注意:/etc/vsftpd/ftpusers 配置文件为禁止登录FTP的用户黑名单,权限比user_list权限更高
( /etc/vsftpd/ftpusers文件设置好后会及时生效)

示例:

1)服务端创建FTP本地用户并设置密码

(所创建的用户仅用来登录Vsftp,不可登录操作系统)
useradd -s /sbin/nologin username (username为所需要创建的用户名)
passwd username (给username设置密码)

[root@hadoop103 ~]# useradd -s /sbin/nologin muyb
[root@hadoop103 ~]# passwd muyb (密码:123456)

[root@hadoop103 ~]# vim /etc/vsftpd/vsftpd.conf

anonymous_enable=YES 改为 # anonymous_enable=YES    (注释掉匿名用户登录)

reverse_lookup_enable=NO    (添加此配置项)

[root@hadoop103 ~]# systemctl restart vsftpd
备注:reverse_lookup_enable=NO 表示禁用DNS反向解析,如果是YES经常会出现登录超时
(特别是Windows系统连接ftp超时情况特别严重,因此需禁用DNS反向解析)

[root@hadoop103 ~]# vim /etc/pam.d/vsftpd 注释掉下面行

auth       required   pam_shells.so 改为 # auth       required   pam_shells.so

客户端连接测试:
image.png

备注:本地用户登录FTP后,会在自己/home/用户 的家目录下

2)将所用FTP用户禁锢在自己的家目录

配置文件 chroot_local_user=YES 开启 禁止切换目录功能

本地用户在没有设置禁锢家目录的情况下,可以进入系统的/目录,容易造成安全事故
image.png

禁锢本地用户在其/home/用户 家目录:
[root@hadoop103 ~]# vim /etc/vsftpd/vsftpd.conf (去掉下面配置项的注释)

# chroot_local_user=YES 改为 chroot_local_user=YES

[root@hadoop103 ~]# systemctl restart vsftpd

客户端登录报错:
image.png
原因:/home/用户 用户家目录其它用户没有执行权限
image.png
处理:给/home/用户 用户家目录授权
[root@hadoop103 ~]# chmod 755 /home/muyb
image.png

客户端登录验证禁锢本地用户在家目录:
image.png

3)将部分用户禁锢在自己的家目录

  - 配置文件 choor_list_enable=YES 开启白名单功能    (允许白名单里的用户随意切换目录)
  - 配置文件设置 choor_list_file=/etc/vsftpd/chroot_list    (手动设置白名单文件位置)

[root@hadoop103 ~]# vim /etc/vsftpd/vsftpd.conf 去掉下面配置项的注释,并添加

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

[root@hadoop103 ~]# cd /etc/vsftpd/
[root@hadoop103 vsftpd]# touch chroot_list
[root@hadoop103 vsftpd]# cat chroot_list
[root@hadoop103 vsftpd]# systemctl restart vsftpd

客户端muyb用户登录验证白名单配置:
image.png

4)黑名单设置不允许登录FTP

所有写入/etc/vsftpd/ftpusers 配置文件 的用户都不允许登录FTP,设置后将立即生效

[root@hadoop103 vsftpd]# echo “muyb” > ftpusers

客户端muyb用户登录验证黑名单功能:
image.png

5) 本地用户访问指定目录

创建用户,并指定其家目录:
创建myb03用户指定其家目录为/data/muyb03,且用户不可登录系统
[root@hadoop103 ~]# useradd muyb03 -d /data/muyb03 -s /sbin/nologin
[root@hadoop103 ~]# echo 123456 | passwd —stdin muyb03

配置文件添加如下内容:
[root@hadoop103 ~]# vim /etc/vsftpd/vsftpd.conf

local_root=/data/muyb03

修改/data/muyb03家目录权限:
[root@hadoop103 ~]# chmod 755 /data/muyb03

客户端muyb03用户登录测试:

6)修改被动模式数据传输使用端口

pasv_enable=YES
pasv_min_port=30000
pasv_max_port=35000

创建一个1G的test.txt文件(dd if=/dev/zero of=./test.txt bs=1M count=1000)

三、虚拟用户登录

示例:
1)建立虚拟用户数据库文本文件
[root@hadoop103 ~]# cd /etc/vsftpd/
[root@hadoop103 vsftpd]# vim /etc/vsftpd/vsftpd.user

muyaobin01
123456
muyaobin02
123456

将数据库文本文件转换为数据库文件
[root@hadoop103 vsftpd]# db_load -T -t hash -f vsftpd.user vsftpd.db
修改用户数据库文件,保证其安全性
[root@hadoop103 vsftpd]# chmod 600 vsftpd.db
注意:虚拟用户数据库文本文件名可自己定义,奇数行为用户名,偶数行为密码

2)创建虚拟用户的映射用户,并指定其家目录
[root@hadoop103 vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual
virtual:为虚拟用户的映射用户
/var/ftproot:为家目录
[root@hadoop103 vsftpd]# chmod o+r /var/ftproot
3)建立支持虚拟用户的PAM认证文件,添加虚拟用户支持
[root@hadoop103 vsftpd]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.pam
编辑vsftpd.pam文件:
[root@hadoop103 vsftpd]# vim /etc/pam.d/vsftpd.pam (清空内容,添加如下两行)

#%PAM-1.0
auth       required     pam_userdb.so  db=/etc/vsftpd/vsftpd
account    required     pam_userdb.so  db=/etc/vsftpd/vsftpd

修改/etc/vsftpd/vsftpd.conf配置文件,添加支持配置
[root@hadoop103 vsftpd]# vim /etc/vsftpd/vsftpd.conf

pam_service_name=vsftpd 改为 pam_service_name=vsftpd.pam

# 添加如下配置行
guest_enable=YES
guest_username=virtual
user_config_dir=/etc/vsftpd/dir
创建/etc/vsftpd/dir目录<br />[root@hadoop103 vsftpd]# mkdir /etc/vsftpd/dir<br />4)为虚拟用户建立独立的配置文件

注意:做虚拟用户配置文件设置时,必须将主配置文件里的自定义匿名用户的相关设置项注释掉

# anon_mkdir_write_enable=YES
# anon_other_write_enable=YES