vsftpd用户分为:匿名用户、本地用户、虚拟用户
虚拟用户和本地用户没有关系,但是所有虚拟用户会被映射为一个指定的系统帐号,访问共享位置就是这系统帐号的家目录。
各虚拟用户可以被赋予不同的访问权限:
通过匿名用户权限控制参数进行指定;
虚拟用户帐号的存储方式
文件,编辑文本文件来存储
奇数行为用户名,奇数行+1为其对应密码。
此文件需要被编码为hash格式,这个方式非常费劲,添加一
次就需要重新hash加密一次
关系型数据库的表中:
即时查询数据库完成用户认证:
mysql库,pam要依赖于pam-mysql模块
1 安装软件
安装mysql,vsftpd,pam_mysql
pam_mysql属于epel的,得安装epel:yum install epel-release
打开它的readme
里面示例:
认证方式 可选的 模块认证 帐号密码
红色字体是远程主机上执行的,黑色字体是在本地执行的:
2 配置数据库
在远程主机上安装mariadb:
远程主机上执行
create database vsftpd;
use vsftpd;
grant select on vsftpd.* TO vsftpd@'192.168.%.%' identified by 'vsftpd';
flush privileges;
远程连接mariadb的主机
mysql -uvsftpd -h192.168.1.108 -p
但是centos7里面不是iptables了,所以需要关闭的是firewalld
systemctl stop firewalld
或者
service firewalld stop
本地查看下数据库。
远程主机建立表
create table user( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) BINARY NOT NULL, password CHAR(48) BINARY NOT NULL);
在本地端可以查到
desc user;
数据库内建函数password(‘xxx’)可以将任意数据变成48位的
select password(‘abc’);
insert into user (name,password) values('tom',password('magedu')),('gh',password('magedu'));
向远程主机的vsftpd表中插入数据
在本地查询
3 配置pam
随便在/etc/pam.d里建立个文件
在里面输入内容如下
auth,认证
account,验证用户有效与否
required ,可选方式
pam_mysql.so ,模块认证,相对路径,/lib64
user=vsftpd,mysql连接用户
passwd=vsftpd ,mysql连接密码
host=192.168.1.108 ,mysql连接地址
db=vsftpd ,数据库名字
table=user ,表名字
usercolumn=name ,用户列名
passwdcolumn=password ,密码列名
crypt=0,加密方式
4 建立账号
需要在本地主机上建立一个帐号用来登录
useradd –s /sbin/nologin –d /var/ftproot vuser
chmod go+rx /var/ftproot
请确保/etc/vsftpd.conf中已经启用了以下选项
anonymous_enable=YES //匿名用户
local_enable=YES //本地用户
write_enable=YES //本地用户写入
anon_upload_enable=NO //匿名上传
anon_mkdir_write_enable=NO //匿名建立文件夹
chroot_local_user=YES //是否将用户限制在主目录,yes是
然后添加以下项
guest_enable=YES
guest_username=vuser并确保pam_service_name选项的值如下所示
pam_service_name=vsftpd.mysql
用tail /var/log/secure里显示最近登录系统的日志
现在几个用户都是相同权限的,下面要赋予不同的权限。
5 配置不同用户的访问权限
在/etc/vsftpd/vsftpd.conf
添加user_config_dir=/etc/vsftpd/vuser_config
然后在指定位置建立文件夹vuser,并针对每个用户建立一个文件
里面的内容如下
anon_upload_enable=YES
anon_mkdir_write_enable=yes
anon_other_write_enable=yes测试连接一下,成功
-------------------------------------------------------------------------
除了ftp,下列也可以使用
axel,lftpget,wget,curl
ftp协议是明文
ftps:SSL,认证过程是安全的
sftp:SSH,