欢迎光临
我们一直在努力

ubuntu上ssh登录yubikey二次认证的使用

0x00 相关背景

第一小节可以跳过

在网络数据严重泄露的当下,各种撞库攻击越加严峻。所以,为了提高保护咱们的数字资产安全以及个人隐私安全,各大网站和个人也推崇使用双因素身份验证(2FA:Multi-factor authentication)。攻破个人密码(1password等生成)后,还有一道屏障来保护,进行纵深防御😀。下面我们主要讨论2FA中的OTP.

  • OTP: One-time Password RFC(HMAC/HOTP/TOTP)
  • 形态可能有:将军令,谷歌二次认证, yubikey,RSA SecurID,以及很多二次开发产品. 如authy上CF的7位数字验证码,老东家的二次认证app,大部分都是TOTP,手机时间必须对准,或者误差在允许的时间窗口内, 才能认证成功.
  • 对比:
    • 自研太累,不看;
    • 谷歌二次认证,很通用方便, 安全级别较低可用(eg:很多vpn邮件中截图谷歌二维码被撸的案例/黑进安卓手机root后提取所有totp string);
    • RSA SecurID:付费自建认证中心,对于我们start up级别,太贵,买不起;
    • yubikey:硬件的,各方面安全都还行。

YubiKey基本上是一个小巧的设备,可以插入USB插槽并伪装成键盘。 当你用手指点击小金色光盘时,它会输入一次性密码(OTP:One-time Password)。 通过Yubico API,您可以轻松验证此密码,并将其与其他身份验证方法(如密码或ssh密钥)结合使用,以实现双因素身份验证(2FA)。
Google,Facebook和Github等许多热门网站都允许您通过YubiKeys启用2FA。

0x01 安装yubikey的依赖库

以下操作均基于ubuntu 16.04系统

sudo add-apt-repository ppa:yubico/stable
sudo apt-get update
sudo apt-get install libpam-yubico

0x02 云端生成API key

基于Yubico Get API Key中心

输入邮箱,插入yubikey,OTP框即可自动填充。
然后获取如下图的Client id和密钥 key. 需要注意的是,记得保存那串otp key,chrome可以F12中获取。

0x03 修改ssh登录配置

获取的id和key如下

Client ID:  12345
Secret key:  ***==
otp key: abcdabcdabcd***

修改/etc/pam.d/sshd文件,第一行添加参考如下,同时注释掉common-auth

cp /etc/pam.d/sshd /etc/pam.d/sshd.old
vim /etc/pam.d/sshd
auth required pam_yubico.so id=12345 key=****== debug authfile=/etc/yubikey_mappings mode=client
//注释
注释@include common-auth这一行

添加需要2fa的用户username到文件/etc/yubikey_mappings

//otp字符串取前12位就行, 建议新开一个用户测试,不要用root
echo 'root:abcdabcdabcd' >> /etc/yubikey_mappings

修改第二处ssh配置文件/etc/ssh/sshd_config

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.old
vim /etc/ssh/sshd_config

//保证下面三行的键值正确且存在

ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive:pam
UsePAM yes

service sshd restart

下面是scrt正常登陆跑通截图,弹出输入框时,插入yubikey到电脑,手指触碰小金色光盘即可自动填充。
v223a

0x04 文章参考

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址