上篇Openconnect服务部署配置文件当中,使用了最为便捷的pam方式验证。
而Openconnect支持丰富的验证类型甚至进行计费:
支持以下方式的密码认证
- PAM
- Radius
- 密码文件
- 基于时间的认证(HOTP / TOTP)
PAM
一般的,只需要取消注释使auth = "pam"
生效即可
而auth = "pam[gid-min=1000]"
则身份验证限制为特定的一组用户。
Radius
因为没有这类需也没有进行尝试,当选择这样方式时理论上应该这样进行配置auth = "radius[config=/etc/radiusclient/radiusclient.conf,groupconfig=true]"
密码文件
显然这种方式也是简而易用的。通过添加auth = "plain[passwd=./ocserv.passwd]"
使其生效。
密码文件可以通过ocpasswd
进行管理,使用ocserv --help
查看使用方法。
添加用户
添加一个名为kay的用户
/usr/local/bin/ocpasswd kay -c /etc/ocserv/ocserv.passwd
而后输入密码即可。
此时查看文件
cat /etc/ocserv/ocserv.passwd
是这样的(用户:组:加密后的密码)
kay:*:$5$UNvJw6PfZdIITAZn$QFcenjsqKkwgFF9nsIUq5YdjwyIe/ly2JiHGA7PKv71
*代表没有进行分组
也可以加上用户组
/usr/local/bin/ocpasswd -g lvmoo kay -c /etc/ocserv/ocserv.passwd
锁定用户
在某个时候,需要收回用户的登录权限可以进行账户锁定
/usr/local/bin/ocpasswd -l kay -c /etc/ocserv/ocserv.passwd
此时用户状态的密码前面会加上一个!
,用户无法进行认证登录了。
kay:lvmoo:!$5$TwNRYcJ1989e9Tjz$k1qPO0KrcFhblxAKEdeZ.DEdj0mXwt/Ze9OU4dL9WO2
解锁用户
用户得到了许可,又可以获得权限时,进行解锁:
/usr/local/bin/ocpasswd -u kay -c /etc/ocserv/ocserv.passwd
删除用户
被告知用户永不再使用ocserv时,进行用户删除
/usr/local/bin/ocpasswd -d kay -c /etc/ocserv/ocserv.passwd
这样记录文件会将用户所在行进行删除。
密码文件+二次认证
otp文件
使用上面的两种方式登录相对来说都是不安全的,一旦连接信息,账户密码泄露第三者也可以进行认证。
这里并不是指数据传输不安全或者ocserv是不安全的,因为泄露的账户密码对于任何系统都是不安全的。
但是加上基于时间的二次认证会让安全等级提升。
配置登录方式auth = "plain[passwd=./ocserv.passwd,otp=./ocserv.otp]"
ocserv.otp
必须采用https://code.google.com/p/mod-authn-otp/中所述的“UsersFile”格式。
生成方法
echo "HOTP/T30 kay - $(head -c 16 /dev/urandom |xxd -c 256 -ps)" >>/etc/ocserv/ocserv.otp
如果指定了OTP文件,则允许'passwd'文件中的密码字段为空。在这种情况下,仅会提示用户输入OTP。
再使用以下命令打印5个救急密码(其中后面的KEY替换为上面生成的密钥)。
oathtool --totp -w 5 621d83e3f5334bb10bc4f77f0c6cf458
生成二维码
一般的otp工具可以进行扫描添加或者手动输入秘钥添加,这里进行二维码生成后便于直接扫描添加
使用以下命令将KEY转换为base32(在0x后面一样记得替换自己的KEY):
echo 0x621d83e3f5334bb10bc4f77f0c6cf458 | xxd -r -c 256 | base32
MIOYHY7VGNF3CC6E657QY3HULA======
然后使用qrencode
创建一个二维码。
sudo apt-get install qrencode -y
echo "otpauth://totp/[email protected]?secret=MIOYHY7VGNF3CC6E657QY3HULA&issuer=OpenConnect" | qrencode -o - -t UTF8
使用OTP标准的app扫描二维码即可。
更多双因素认证方式请查看官方文档 ocserv双因素身份验证
--EOF--
本文由 Kay @ Jun 20, 2019 at 07:34:00 pm 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Jun 21, 2019 at 09:12:48 am
大佬 周末好,请教一个问题:
我也是使用编译安装的ocserv,但是在使用
auth = "plain[passwd=/etc/ocserv/ocserv.passwd,otp=/etc/ocserv/ocserv.otp]"
启动会提示 unknown otp
大佬遇到过这个问题吗?谢谢。
没遇到过,看提示确认/etc/ocserv/ocserv.otp是否存在
大佬 这个是有的:
[email protected]:~# cat /etc/ocserv/oc
ocpasswd ocserv.conf ocserv.otp
编译安装才会有这样的报错 ,但是使用 [email protected]:~# apt-get install ocserv 就没这样的报错
编译安装可以安装自己喜欢的版本
apt-get install 是有啥版本用啥版本
看来我只能用apt-get install 了,哈哈哈。谢谢。
你看看那个文件是否有有效内容,初次使用建议用工具生成。
大佬说的是这个吧,里面有内容的
[email protected]:~# cat /etc/ocserv/ocserv.otp
HOTP/T30 zh - b16a312c76741493252cdccd0354fc11 0 867203 2020-12-06T03:16:11L