- 默认情况下
vsftpd
是通过pam
的认证机制来验证用户的,但是对于用户很多的情况下,这个是完善的,接下来的配置希望实现vsftpd
基于mysql
的用户认证 - 首先来安装需要的两个软件包
[root@server23 ssl]# yum install mysql-server mysql-devel -y
[root@server23 ssl]# yum groupinstall "Development tools" -y
- 然后需要下载
pam_mysql
,并且进行解压安装
[root@server23 mnt]# tar -zxf pam_mysql-0.7RC1.tar.gz
- 然后进行编译安装
[root@server23 pam_mysql-0.7RC1]# ./configure --with-mysql=/usr/ --with-openssl
[root@server23 pam_mysql-0.7RC1]# make
[root@server23 pam_mysql-0.7RC1]# make install
- 可能出现的错误
configure: error: Cannot find pam headers. Please check if your system is ready for pam module development.
- 这个错误需要安装
[root@server23 pam_mysql-0.7RC1]# yum install pam-devel -y
- 如果出现这个错误
configure: error: Cannot locate mysql client library. Please check your mysql installation.
- 需要启动
mysql
服务,并且指定mysql
路径为/usr
; - 对于安装成功之后的库文件在
/lib/security/
[root@server23 pam_mysql-0.7RC1]# ll /lib/security/
total 140
-rwxr-xr-x. 1 root root 871 4月 16 17:38 pam_mysql.la
-rwxr-xr-x. 1 root root 135862 4月 16 17:38 pam_mysql.so
- 接下来需要配置
mysql
,创建相应的表文件
mysql> create database vsftpd;
Query OK, 1 row affected (0.00 sec)
mysql> use vsftpd;
Database changed
mysql> CREATE TABLE users (
-> id SMALLINT AUTO_INCREMENT NOT NULL,
-> name CHAR(20) BINARY NOT NULL,
-> password CHAR(48) BINARY NOT NULL,
-> PRIMARY key(id))
-> ;
Query OK, 0 rows affected (0.10 sec)
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY 'vsftpd';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@127.0.0.1 IDENTIFIED BY 'vsftpd';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
- 插入两个用户
mysql> INSERT INTO users (name,password) VALUE('tom',password('redhat')),('jerry',password('redhat'));
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
- 接下来需要建立的是
pam
认证需要的配置文件
auth required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd \
host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
account required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd \
host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0 //表示使用明文进行存储
- 建立虚拟用户映射的系统用户及对应的目录
[root@server23 ~]# useradd -s /sbin/nologin -d /var/ftproot vuser
[root@server23 ~]# chmod go+rx /var/ftproot/
- 接下来修改
vsftpd
的配置文件
pam_service_name=vsftpd.mysql
userlist_enable=YES
tcp_wrappers=YES
# ssl or tls
ssl_enable=NO
ssl_sslv3=YES
ssl_tlsv1=YES
allow_anon_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=NO
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt
rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key
guest_enable=YES
guest_username=vuser
- 接下来重新启动服务
[root@server23 ~]# /etc/init.d/vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
- 然后需要测试连接用户
tom
[root@my Desktop]# lftp 172.25.23.23 -utom
Password: //输入错误的密码
lftp tom@172.25.23.23:~> ls
ls: Login failed: 530 Login incorrect.
[root@my Desktop]# lftp 172.25.23.23 -utom
Password: //输入正确的密码
lftp tom@172.25.23.23:~> ls
lftp tom@172.25.23.23:~>
- 首先查看
mysql
里面存储的用户情况
- 测试使用
mysql
里面的用户是可以直接进行登陆
- 对于用户来说都会被映射成为
vuser
这个系统用户,并且家目录是/var/ftproot
,对于这个目录里面的文件是可以进行下载的
[root@my Desktop]# lftp 172.25.23.23 -utom
Password:
lftp tom@172.25.23.23:~> ls
-rw-r--r-- 1 0 0 779 Apr 16 14:30 fstab
lftp tom@172.25.23.23:/> get fstab
779 bytes transferred
- 同样也是可以上传文件的
lftp tom@172.25.23.23:/> lcd /etc
lcd ok, local cwd=/etc
lftp tom@172.25.23.23:/> put issue
23 bytes transferred
lftp tom@172.25.23.23:/> ls
-rw-r--r-- 1 0 0 779 Apr 16 14:30 fstab
-rw------- 1 502 502 23 Apr 16 14:32 issue
- 对于上面定义的虚拟用户的指令都是和匿名用户的指令进行匹配,上面的这些指令同时对于所有的虚拟用户生效,因为所有的虚拟用户都被映射成为一个匿名用户
vuser
; - 实现虚拟用户权限的精准定义
- 首先创建需要的几个文件
[root@server23 ~]# mkdir /etc/vsftpd/vusers_dir
[root@server23 ~]# cd /etc/vsftpd/vusers_dir
[root@server23 vusers_dir]# ls
[root@server23 vusers_dir]# touch tom
[root@server23 vusers_dir]# touch jerry
[root@server23 vusers_dir]# vim tom
[root@server23 vusers_dir]# cat tom > jerry
[root@server23 vusers_dir]# vim jerry
[root@server23 vusers_dir]# cat tom
anon_upload_enable=YES
anon_mkdir_write_enable=YES
[root@server23 vusers_dir]# cat jerry
anon_upload_enable=YES
anon_mkdir_write_enable=NO
- 其次更改配置文件,添加指令
[root@server23 vusers_dir]# vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir
- 对于两个用户进行了不同的权限定义,接下来进程验证