紧接上一篇,Open×××使用用户名密码登录之后,觉得可能本地文件的安全性不是很好,毕竟密码还是明文显示的嘛,所以这次鼓捣Open×××使用MySQL进行认证。部署环境什么的,依然参考上一篇中的配置,不同的是,需要在Open×××上安装MySQL数据库。
1、安装MySQL
yum -y install mysql-server mysql-devel mysql /etc/init.d/mysqld start chkconfig mysqld on
2、创建open***数据库以及相关表
mysqladmin -u root password 123456
mysql -uroot -p123456
mysql> create database open***;
Query OK, 1 row affected (0.00 sec)
mysql> use open***;
Database changed
mysql> create table ***user (
-> name char(100) not null,
-> password char(255) default null,
-> active int(10) not null default 1,
-> primary key (name)
-> );
Query OK, 0 rows affected (0.06 sec)
mysql> desc ***user;
+----------+-----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-----------+------+-----+---------+-------+
| name | char(100) | NO | PRI | NULL | |
| password | char(255) | YES | | NULL | |
| active | int(10) | NO | | 1 | |
+----------+-----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> create table logtable (
-> msg char(254),
-> user char(100),
-> pid char(100),
-> host char(100),
-> rhost char(100),
-> time char(100)
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> desc logtable;
+-------+-----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------+------+-----+---------+-------+
| msg | char(254) | YES | | NULL | |
| user | char(100) | YES | | NULL | |
| pid | char(100) | YES | | NULL | |
| host | char(100) | YES | | NULL | |
| rhost | char(100) | YES | | NULL | |
| time | char(100) | YES | | NULL | |
+-------+-----------+------+-----+---------+-------+
6 rows in set (0.00 sec)
mysql> insert into ***user (name,password) values ('test1',password('123456'));
Query OK, 1 row affected (0.00 sec)
mysql> grant all on open***.* to ***@'localhost' identified by '***';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
3、安装pam_mysql模块
使用MySQL数据库来验证Open×××服务器登陆需要使用pam_mysql模块,因此我们需要安装这个模块,直接使用yum安装即可。
yum install pam_mysql -y
4、配置pam_mysql模块
vim /etc/pam.d/open*** #该文件默认不存在
auth sufficient pam_mysql.so user=*** passwd=*** host=localhost db=open*** table=***user usercolumn=name passwdcolumn=password [where=***user.active=1] sqllog=0 crypt=2 sqllog=true logtable=logtable logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time
account required pam_mysql.so user=*** passwd=*** host=localhost db=open*** table=***user usercolumn=name passwdcolumn=password [where=***user.active=1] sqllog=0 crypt=2 sqllog=true logtable=logtable logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time
[root@open*** ~]# cat /etc/pam.d/open***
auth sufficient pam_mysql.so user=*** passwd=*** host=localhost db=open*** table=***user usercolumn=name passwdcolumn=password [where=***user.active=1] sqllog=0 crypt=2 sqllog=true logtable=logtable logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time
account required pam_mysql.so user=*** passwd=*** host=localhost db=open*** table=***user usercolumn=name passwdcolumn=password [where=***user.active=1] sqllog=0 crypt=2 sqllog=true logtable=logtable logmsgcolumn=msg logusercolumn=user logpidcolumn=pid loghostcolumn=host logrhostcolumn=rhost logtimecolumn=time
使用testsaslauthd验证登录情况,如果出现下面的情况,说明我们的配置是正确的。
[root@open*** ~]# testsaslauthd -u test1 -p test1 -s open***
0: OK "Success."
5、安装auth_pam插件
在编译安装Open××× 2.0.9后会生成一个open***-auth-pam.so,文件路径为/usr/lib64/open***/plugin/lib/open***-auth-pam.so,但是该文件有问题,好像网上有人测试过2.1以上的open***自带的open***-auth-pam.so文件都会出现验证错误问题,所以这里需要编译一个低版本的。
yum -y install pam-devel wget https://open***.net/release/open***-2.0.7.tar.gz tar -zxf open***-2.0.7.tar.gz cd open***-2.0.7/plugin/auth-pam/ make
[root@open*** auth-pam]# make
gcc -O2 -Wall -DDLOPEN_PAM=1 -fPIC -c -I../.. auth-pam.c
gcc -O2 -Wall -DDLOPEN_PAM=1 -fPIC -c -I../.. pamdl.c
gcc -O2 -Wall -DDLOPEN_PAM=1 -fPIC -shared -Wl,-soname,open***-auth-pam.so -o open***-auth-pam.so auth-pam.o pamdl.o -lc -ldl
cp open***-auth-pam.so /etc/open***/ #将编译好的模块文件拷贝到/etc/server.conf中定义的地方
6、编辑open***配置文件
vi /etc/server.conf
添加如下几行:
# script-security 3 system #这一行在open***2.0.9中无法识别script-security,但是在2.1中可以,但是2.0.9无须添加这一行也可以完成认证。
plugin /etc/open***/open***-auth-pam.so open***
client-cert-not-required
username-as-common-name
例如:
[root@open*** auth-pam]# cat /etc/server.conf
port 1194
proto tcp
dev tun
ca /opt/tools/open***-2.0.9/easy-rsa/2.0/keys/ca.crt
cert /opt/tools/open***-2.0.9/easy-rsa/2.0/keys/server.crt
key /opt/tools/open***-2.0.9/easy-rsa/2.0/keys/server.key
dh /opt/tools/open***-2.0.9/easy-rsa/2.0/keys/dh1024.pem
server 10.8.0.0 255.255.255.0
push "route 192.168.140.0 255.255.255.0"
ifconfig-pool-persist ipp.txt
client-to-client
keepalive 10 120
comp-lzo
persist-key
persist-tun
status open***-status.log
verb 5
###############################################################################################
####open*** authenticated with openldap
#plugin /usr/lib64/open***/plugin/lib/open***-auth-ldap.so "/etc/open***/auth/ldap.conf cn=%u"
#client-cert-not-required
#username-as-common-name
###############################################################################################
####open*** authenticated with user/pass
#auth-user-pass-verify /etc/open***/checkpsw.sh via-env
#client-cert-not-required
#username-as-common-name
###############################################################################################
####open*** authenticated with mysql
#script-security 3 system
plugin /etc/open***/open***-auth-pam.so open***
client-cert-not-required
username-as-common-name
7、编辑客户端配置文件
其实MySQL和之前的用户名密码的客户端配置文件都一样,直接按照之前的复制一份即可。
例如:
client
dev tun
proto tcp
remote 192.168.49.135 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
;cert eva.crt
;key eva.key
ns-cert-type server
auth-user-pass
comp-lzo
verb 3
8、客户端连接测试
客户端配置,和用户名密码一样,只需将服务器端CA证书放到目录中即可,另外配置文件内容也和用户名密码的客户端配置文件一样。
输入数据库中的用户名密码,进行认证。
认证通过,连接成功。
已经获取IP地址。
9、查看日志
[root@open*** auth-pam]# tail -f /opt/tools/open***-2.0.9/easy-rsa/2.0/open***-status.log
Open××× CLIENT LIST
Updated,Wed Sep 21 04:42:22 2016
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
test1,192.168.49.1:4922,44194,16000,Wed Sep 21 04:04:06 2016
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
10.8.0.22,test1,192.168.49.1:4922,Wed Sep 21 04:04:20 2016
GLOBAL STATS
Max bcast/mcast queue length,0
END
10、查看MySQL中的用户登录表
11、禁用用户示例
如果需要禁用用户,只需要在MySQL中将***user表中的用户的active修改为0即可,例如:
这样的话,test1的active值为0,就无法通过认证了。(禁用需要下次连接生效,如果当前用户已连接,会在用户断开重连时生效)
可以看到,使用test1再次连接失败。
在MySQL中的logtable中也可以查看到失败的登录。
而其他用户可以正常连接。
转载于:https://blog.51cto.com/jerry12356/1855077