实现基于文件验证的vsftpd虚拟用户
1、创建用户数据库文件
1 | vim /etc/vsftpd/vusers.txt |
2、创建用户和访问FTP目录
1 | useradd -d /var/ftproot -s /sbin/nologin vuser |
Centos7 还需要执行以下操作:
1 | chmod -w /var/ftproot/ |
3、创建pam配置文件
1 | vim /etc/pam.d/vsftpd.db |
4、指定pam配置文件
1 | vim /etc/vsftpd/vsftpd.conf |
5、SELinux设置:
禁用SELinux 或者 setsebool -P ftpd_full_access 1
6、虚拟用户建立独立的配置文件
1 | mdkir /etc/vsftpd/vusers.d/ 创建配置文件存放的路径 |
cd /etc/vsftpd/vusers.d/ 进入此目录
7、允许wang用户可读写,其它用户只读
vim wang
创建各用户自已的配置文件
1 | anon_upload_enable=YES |
vim mage
创建各用户自已的配置文件
1 | local_root=/ftproot 登录目录改变至指定的目录 |
实现基于MYSQL验证的vsftpd虚拟用户
说明:本实验在两台CentOS主机上实现,一台做为FTP服务器,一台做数据库服务器
1、在数据库服务器上安装包:
Centos7:在数据库服务器上安装
1
2
3yum –y install mariadb-server
systemctl start mariadb.service
systemctl enable mariadbCentos6:在数据库服务器上安装
1
yum –y install mysql-server
在FTP服务器上安装vsftpd和pam_mysql包
1
2centos6:pam_mysql由epel6的源中提供
yum install vsftpd pam_mysqlcentos7:无对应rpm包,需手动编译安装
1 | yum -y groupinstall "Development Tools" |
2、在数据库服务器上创建虚拟用户账号
- 建立存储虚拟用户数据库和连接的数据库用户
1 | mysql> CREATE DATABASE vsftpd; |
ftp服务和mysql不在同一主机:1
2mysql> GRANT SELECT ON vsftpd.* TO
vsftpd@'172.16.%.%' IDENTIFIED BY 'magedu';
ftp服务和mysql在同一主机:1
2
3
4
5mysql> GRANT SELECT ON vsftpd.* TO
vsftpd@localhost IDENTIFIED BY 'magedu';
mysql> GRANT SELECT ON vsftpd.* TO
vsftpd@'127.0.0.1' IDENTIFIED BY 'magedu';
mysql> FLUSH PRIVILEGES;
- 准备相关表
1 | mysql> USE vsftpd; |
测试连接1
2mysql -uvsftpd -h 172.16.200.200 -pmagedu
mysql> SHOW DATABASES;
- 添加虚拟用户
根据需要添加所需要的用户,为了安全应该使用PASSWORD函数加密其密码后
存储
1 | mysql>DESC users; |
3、在FTP服务器上配置vsftpd服务
- 在FTP服务器上建立pam认证所需文件
1 | vi /etc/pam.d/vsftpd.mysql 添加如下两行 |
crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示使用mysql password()函数加密,3表示md5加密,4表示sha1加密
auth 表示认证
account 验证账号密码正常使用
required 表示认证要通过
pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝
对路径;后面为给此模块传递的参数
user=vsftpd为登录mysql的用户
passwd=magedu 登录mysql的的密码
host=mysqlserver mysql服务器的主机名或ip地址
db=vsftpd 指定连接msyql的数据库名称
table=users 指定连接数据库中的表名
usercolumn=name 当做用户名的字段
passwdcolumn=password 当做用户名字段的密码
crypt=2 密码的加密方式为mysql password()函数加密
- 建立相应用户和修改vsftpd配置文件,使其适应mysql认证
建立虚拟用户映射的系统用户及对应的目录1
2
3
4useradd -s /sbin/nologin -d /var/ftproot vuser
chmod 555 /var/ftproot centos7 需除去ftp根目录的写权限
mkdir /var/ftproot/{upload,pub}
setfacl –m u:vuser:rwx /var/ftproot/upload
确保/etc/vsftpd.conf中已经启用了以下选项1
anonymous_enable=YES
添加下面两项1
2guest_enable=YES
guest_username=vuser
修改下面一项,原系统用户无法登录1
pam_service_name=vsftpd.mysql
4、启动vsftpd服务
1 | service vsftpd start;systemctl start vsftpd |
查看端口开启情况1
netstat -tnlp |grep :21
5、Selinux相关设置:在FTP服务器上执行
1 | restorecon -R /lib64/security |
6、测试:利用FTP客户端工具,以虚拟用户登录验证结果
1 | tail /var/log/secure |
7、在FTP服务器上配置虚拟用户具有不同的访问权限
vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访
问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任
意未使用目录,只需要在vsftpd.conf指定其路径及名称即可
- 配置vsftpd为虚拟用户使用配置文件目录
1 | vim /etc/vsftpd/vsftpd.conf |
- 创建所需要目录,并为虚拟用户提供配置文件
1 | mkdir /etc/vsftpd/vusers_config/ |
- 配置虚拟用户的访问权限
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如
果需要让用户wang具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/wang文件,在里面添加如下选项并设置为YES即可,只读则设为NO
注意:需确保对应的映射用户对于文件系统有写权限1
2
3
4anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}
local_root=/ftproot 登录目录改变至指定的目录