1.1 任务概述
如果采用本地帐号访问FTP服务器,会有安全风险。FTP还提供了一种虚拟帐号访问的方式。
1.2 知识导学
虚拟帐号可以看成将多个匿名帐户映射到一个本地帐号的方式。
虚拟帐号的工作原理和流程
- 创建一个本地宿主帐户和宿主目录,设置好所有者和权限。虚拟帐号要映射到它。
- 创建虚拟帐户文本,生成虚拟帐户数据库db文件,设置好权限,在pam中启用验证
- 在配置文件中,指定虚拟帐号配置目录,虚拟帐号映射本地用户、根目录等
- 在宿主目录下,创建同名的虚拟帐号子目录;
- 在虚拟帐号配置目录下,创建虚拟帐号同名的分离配置文件,针对该虚拟帐号进行匿名设置
- 启动服务,检查放火墙和SELINUX设置
1.3 任务分解
1.3.1 任务
一、创建虚拟宿主用户、主目录以及虚拟帐号的子配置目录## 虚拟用户的宿主目录[root@w ~]# useradd -d /var/vftp -s /sbin/nologin vftp ##添加本地宿主帐号[root@w ~]# echo 12345678 | passwd --stdin vftp ## 如果不设密码,帐号无法登录[root@w ~]# mkdir -p /etc/vsftpd/vftp_conf ## 新建虚拟帐号独立配置文件所在的目录
二、修改主配置文件
[root@w ~]# cd /etc/vsftpd[root@w vsftpd]# grep -v "#" vsftpd.conf.bak_0 > vsftpd.conf[root@w vsftpd]# vim vsftpd.conf''' 修改anonymous_enable=NO ## 禁止匿名访问local_enable=YES ## 启用本地帐户write_enable=YES ## 本地用户可写guest_enable=YES ## 启用虚拟帐户guest_username=vftp ## 虚拟帐号映射的本地帐户user_config_dir=/etc/vsftpd/vftp_conf ## 虚拟帐户的独立配置文件目录virtual_use_local_privs=NO #虚拟用户等同本地用户权限还是匿名用户权限,默认NOchroot_local_user=YES ## 将本地用户限制在主目录内allow_writeable_chroot=YES ## 随chroot一起启用listen=YES ## vsftpd以独立服务方式启用local_umask=022 ## 以下是默认dirmessage_enable=YESxferlog_enable=YESconnect_from_port_20=YES ## 默认,数据连接接口xferlog_std_format=YESpam_service_name=vsftpd ## pam认证的脚本名tcp_wrappers=YES'''
三、设置PAM认证。
(一)创建用户文本文件
[root@w ~]# vim /etc/vsftpd/vusers ## 在配置目录中创建虚拟用户文本vusers''' add vir user ##奇数行是帐号,偶数行是密码test0112345678test0212345678
(二)生成虚拟帐号数据库
[root@w ~]# cd /etc/vsftpd[root@w vsftpd]# db_load -T -t hash -f vusers vusers.db[root@w vsftpd]# chown vftp vusers.db ##[root@w vsftpd]# chmod 770 vusers.db ## 设置只能vuser用户和root组访问
(三)配置PAM文件,使VSFTPD能使用它
[root@w ~]# cd /etc/pam.d/ ## 切换到vsftpd的PAM认证文件[root@w pam.d]# cp vsftpd vsftpd_bak ## 备份[root@w pam.d]# vim vsftpd ## 将原有内容全部注释,新增内容''' addauth required pam_userdb.so db=/etc/vsftpd/vusersaccount required pam_userdb.so db=/etc/vsftpd/vusers
四、为虚拟用户创建目录和配置文件
[root@w ~]# mkdir -p /var/vftp/test01 ## 在宿主目录下创建虚拟帐号主目录[root@w ~]# chown vftp /var/vftp/test01 -R[root@w ~]# vim /etc/vsftpd/vftp_conf/test01 ## 为test01虚拟用户创建独立配置'''local_root=/var/vftp/test01anon_upload_enable=yesanon_mkdir_write_enable=yesanon_other_write_enable=yesanon_world_readable_only=no ##如果no,只要ftp用户有读权限即可下载。yes,则other要有r权限。'''
五、启动服务,放行和测试
[root@w ~]# systemctl start vsftpd[root@w ~]# firewall-cmd --list-all[root@w ~]# setenforce 0
1.4 新增用户
参考:
[root@w ~]# cd /etc/vsftpd/vuser_conf[root@w vuser_conf]# vim create_bash_config.sh### 创建虚拟帐号的配置文件的脚本#!/bin/bashusername=$1;rm -f /etc/vsftpd/vuser_conf/$username;touch /etc/vsftpd/vuser_conf/$username;echo "local_root=/var/ftp/vuser/test01anon_upload_enable=yesanon_mkdir_write_enable=yesanon_other_write_enbale=yesanon_world_readable_only=no" >> /etc/vsftpd/vuser_conf/$username;[root@w ~]# cd /etc/vsftpd[root@w vsftpd]# touch vusers[root@w vsftpd]# vim add_user.sh### 添加用户脚本#!/bin/bashecho -n "please input username"read username;if [! $username ] thenecho "username can not empty";exit;fiecho -n "please input password"read passwd;if [! $passwd ] thenecho "password can not empty";exit;fiecho -n "save to db? y/n: ";read re;vuser_dir=/var/ftp/vuserif [[ $re = 'y' || $re = 'Y']] thenecho $username >> login.txtecho $passwd >> login.txtdb_load -T -t hash -f ./vusers ./vusers.dbmkdir -p $vuser_dir/$username;chown vuser:vuser $vuser_dir/$username;sh /etc/vsftpd/vuser_conf/create_bash_config.sh $username;echo "save success!!!";elseecho "do not save";exitfiecho " show users";cat /etc/vsftpd/vusers;[root@w ~]# cd /etc/vsftpd[root@w vsftpd]# chmod a+x add_user.sh
