vsftp 虚拟用户+MySQL认证独立家目录
centos7 系统
安装包
yum -y install mariadb vsftpd openssl-devel mysql-devel pam-devel
yum -y groupinstall "Development Tools" "Server PlatformDevelopment"
启动mariadb 和设置root密码(略)
创建vsftp数据库和用户
CREATE DATABASE vsftpd;
grant select on vsftpd.* to vsftpd@'%' identified by '123456';
use vsftpd;
创建一个auth表
CREATE TABLE auth (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,name VARCHAR(30) NOT NULL , password CHAR(48) NOT NULL);
插入2个测试的用户名和密码
INSERT INTO auth (name,password) VALUES ("test1","123456"),("test2","123456");
编译安装pam_mysql
下载源码包安装,地址http://pam-mysql.sourceforge.net/
tar -xf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1
./configure –with-openssl -with-pam-mods-dir=/usr/lib64/security
make && make install
编辑pam验证,将下面的信息改成自己的
cp /usr/lib64/securi/pam_mysql.so /usr/lib64/security/pam_mysql.so
[root@controller03 ]# cat /etc/pam.d/vsftpd.mariadb
auth required /usr/lib64/security/pam_mysql.so user=vsftp passwd=123456 host=172.16.20.3 db=vsftpd table=auth usercolumn=name passwdcolumn=password crypt=0
account required /usr/lib64/security/pam_mysql.so user=vsftp passwd=123456 host=172.16.20.3 db=vsftpd table=auth usercolumn=name passwdcolumn=password crypt=0
指定pam_mysql.so的路径,user、passwd为授权的用户,host为连接的数据库主机,usercolumn/passwdcolumn为定义的字段名,crypt=N,(N=0:密码明文发送;N=1:使用crypt函数加密;N=2:使用mysql的password()函数;N=3:使用md5加密;N=4:使用sha1加密)。
配置vsftpd文件,提示最好在文本文件中复制在粘贴,否则可能vsftpd无法启动,就是编码问题
[root@controller03 test2]# cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #禁止匿名登录
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
chroot_local_user=YES
listen=YES
pam_service_name=vsftpd.mariadb #改成上面定义的pam文件
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES #启用虚拟用户
guest_username=vftpuser #真实用户
virtual_use_local_privs=YES #NO时,虚拟用户和匿名用户有相同的权限,默认是NO,YES就是具有guest_username的用户权限
user_config_dir=/etc/vsftpd/vuser_conf
定义用户文件,每一个用户一个文件
cat /etc/vsftpd/vuser_conf/test2
local_root=/home/test2 #定义自己家目录
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
创建系统用户vftpuser
groupadd -g 1501 vftpuser && useradd -g vftpuser -u 1501 -s /sbin/nologin -d /home/vftpuser vftpuser
创建用户目录
mkdir /home/test2
mkdir /home/test3
chown -R root:root *
[root@controller03 home]# ll
total 0
drwxr-xr-x 3 root root 18 Dec 4 14:35 test2
drwxr-xr-x 2 root root 6 Dec 4 14:31 test3
drwxr-xr-x 3 root root 88 Dec 4 14:21 vftpuser
启动vsftp服务systemctl restart vsftpd.service
cd到test2目录,现在还是无法针对这个test2的目录进行操作,在建立一个文件夹soft,赋予chown vftpuser:vftpuser既可,然后登陆ftp就可以在这个目录下进行操作了
遇到的问题:
登陆ftp用户名和密码没有错误就是登陆不上去。
[root@controller01 home]# ll
total 0
drwxr-xr-x 2 vftpuser vftpuser 6 Dec 5 16:02 test1
drwx------ 2 root root 76 Dec 5 10:08 vftpuser
原因就上面的家目录属组有问题不是root而是vftpuser用户,这个用户是system用户,用来映射虚拟用户的
问题1
tail -f /var/log/secure
Dec 5 16:39:25 controller01 vsftpd[9484]: pam_mysql - SELECT returned no result.
Dec 5 16:39:25 controller01 vsftpd[9484]: pam_mysql - SELECT returned no result.
登陆ftp页面后就会提示这个,用户名密码没有验证成功。