基础环境
mv /etc/yum.repos.d/CentOS-* /tmp/
curl -o /etc/yum.repos.d/centos.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install -y vim net-tools wget
安装服务
[root@master ~]# yum install -y vsftpd
设置开机自动
[root@master ~]# systemctl enable vsftpd --now
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
永久地在防火墙中添加FTP服务
[root@master ~]# firewall-cmd --permanent --add-service=ftp
success
重新加载防火墙配置
[root@master ~]# firewall-cmd --reload
success
开启ftpd_full_access策略,允许FTP服务具有完全访问权限
[root@master ~]# setsebool -P ftpd_full_access=on
配置匿名用户登录
创建测试目录/opt/ftp,并创建测试文件test.txt
[root@master ~]# mkdir /opt/ftp
[root@master ~]# touch /opt/ftp/test.txt
[root@master ~]# ll /opt/ftp/
total 0
-rw-r--r--. 1 root root 0 Dec 28 04:44 test.txt
编辑修改配置文件/etc/vsftpd/vsftpd.conf
[root@master ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES #允许匿名用户登录
anon_root=/opt/ftp #将匿名用户的根目录设为/opt/ftp ### 这行文件中没有需要手动添加
anon_upload_enable=YES #允许匿名用户上传文件
anon_mkdir_write_enable=YES #允许匿名用户创建文件夹
### 重启服务使配置生效
[root@master ~]# systemctl restart vsftpd
小提示:允许匿名用户登录等命令是默认开启的,一般为了更方便只需要配置匿名用户的根目录即可。
[root@master ~]# setenforce 0
[root@master ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client ftp ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
共享目录中创建文件夹test,结果报错了,报错界面如图7所示
- 出错原因是系统的本地权限没有设置。设置本地系统权限,可以将属主设置为ftp,或者对/opt/ftp目录赋予其他用户写的权限。
[root@master ~]# ll -d /opt/ftp/
drwxr-xr-x. 2 root root 22 Dec 28 04:44 /opt/ftp/
### 第一张方法:
# 将属主更改为匿名用户ftp
[root@master ~]# chown ftp /opt/ftp/
[root@master ~]# ll -d /opt/ftp/
drwxr-xr-x. 2 ftp root 22 Dec 28 04:44 /opt/ftp/
### 第二中方法:
# 赋予其他用户写的权限
[root@master ~]# chmod o+w /opt/ftp/
[root@master ~]# ll -d /opt/ftp/
drwxr-xrwx. 2 root root 22 Dec 28 04:56 /opt/ftp/
配置本地用户登录
配置本地账户user_test1登录FTP服务器,同时要求禁止匿名用户登录FTP服务器
### 第一种方法:
[root@master ~]# useradd user_test1
[root@master ~]# passwd user_test1
Changing password for user user_test1.
New password: ### 此处的直接即可,因为是暗文看不到输入
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
### 第二张方法:
[root@master ~]# useradd user_test1
[root@master ~]# echo 000000 | passwd --stdin user_test1
Changing password for user user_test1.
passwd: all authentication tokens updated successfully.
创建FTP账号user_test1并禁止本地登录,然后为其设置登录密码
[root@master ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #禁止匿名用户登录
local_enable=YES #允许本地用户登录
local_root=/opt/ftp #将本地用户的根目录设为/opt/ftp ### 此行需要自己手动添加
chroot_local_user=NO #是否限制本地用户,这也是默认值,可以省略
chroot_list_enable=YES #激活chroot功能
chroot_list_file=/etc/vsftpd/chroot_list #设置锁定用户在根目录中的列表文件
allow_writeable_chroot=YES #只要启用chroot就一定加入这条:允许chroot限制,否则出现连接错误
创建/etc/vsftpd/chroot_list文件,添加测试账号
[root@master ~]# cat /etc/vsftpd/chroot_list
user_test1
重启服务
[root@master ~]# systemctl restart vsftpd
配置虚拟用户登录
创建宿主用户 vuser,虚拟用户的主目录为/var/vuser_dir
[root@master ~]# useradd -m -d /var/vuser_dir -s /sbin/nologin vuser
配置 pam 认证
vsftpd
虚拟用户采用pam
认证,认证数据库可通过db_load
命令来生成,认证的配置文件由vsftpd.conf
文件中的pam_service_name=vsftpd
来指定,存放在/etc/pam.d/vsftpd
1. 创建虚拟用户的账号和密码
- 在
/etc/vsftpd/
中创建文本文件vuserlog.txt
,其中奇数行为账号,偶数行为密码,存入两个虚拟用户:vuser1
,密码为123456
vuser2
,密码同样为123456
[root@master ~]# vim /etc/vsftpd/vuserlog.txt
vuser1
123456
vuser2
123456
2. 生成 pam 认证数据库
[root@master ~]# cd /etc/vsftpd/
[root@master vsftpd]# db_load -T -t hash -f vuserlog.txt vuserlog.db
- 在
/etc/vsftpd/
中利用vuserlog.txt
文件生成认证数据库vuserlog.db
。如果管理员要修改虚拟用户账号,则只需要修改vuserlog.txt
文件,然后重新生成数据库即可
3. 修改 pam 认证配置
[root@master ~]# vim /etc/pam.d/vsftpd
#%PAM-1.0
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuserlog
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuserlog
4. 修改 vsftpd.conf 文件
guest_enable=YES
#开启虚拟用户
guest_username=vuser
#指定虚拟用户的宿主
user_config_dir=/etc/vsftpd/vuser_conf
#指定虚拟用户配置文件的存放位置
allow_writeable_chroot=YES ### 此行在本地用户已配置
#当 chroot 开启时,允许写入权限
5. 配置虚拟用户
创建虚拟用户配置文件的存放目录
[root@master ~]# mkdir /etc/vsftpd/vuser_conf/
创建虚拟用户配置文件
- 在虚拟用户配置目录中创建虚拟用户配置文件并编写用户配置,同时配置文件必须以虚拟用户名作为文件名,一个虚拟用户具有一份配置文件
[root@master ~]# vim /etc/vsftpd/vuser_conf/vuser1
local_root=/var/vuser_dir
#指定 vuser1 的主目录
write_enable=YES
#开启写入权限
anon_world_readable_only=NO
#开启下载权限
anon_upload_enable=YES
#开启上传权限
anon_mkdir_write_enable=YES
#开启上传权限
anon_other_write_enable=YES
#开启删除、重命名权限
6. 重启服务
[root@master ~]# systemctl restart vsftpd
7.测试
文件夹为空
创建两个文件测试
虚拟机测试
[root@master ~]# cd /var/vuser_dir/
[root@master vuser_dir]# touch vuser.txt
刷新浏览