linux-ssh + google authenticator双因子认证

一. 简述: 

随着业务的发展, 人员的增多,一套合理的权限管理方案是必不可少的,通常情况下,为了安全,便于管理,我们都会配置一组跳板机作为登录入口。这里简单聊聊登录跳板机的方式。 

  在业界,不同的公司,可能使用不同的跳板机认证方式,通常有以下几种: ssh(key/pass)、kerberos、ldap、自己开发pam模块等。。

也有一些公司通过几种认证方式进行组合式进行认证(如kerberos+ldap+google auth等)。

根据实际环境,我们采用了ssh-key + google auth组合的方案。

二. 部署:

安装相关工具包:

#yum install -y git automake libtool pam-devel
#yum -y install wget gcc make pam-devel libpng-devel



安装chrony 实际同步工具:

#yum install -y chrony
#vim /etc/chrony.conf 
 
#/etc/init.d/chrony start
#chkconfig --add chrony
#chkconfig --level 3 5 chrony
#chkconfig chrony on


安装二维码生成工具(非必须):
#wget -c http://fukuchi.org/works/qrencode/qrencode-3.4.4.tar.gz
#tar fxvz qrencode-3.4.4.tar.gz 
#cd qrencode-3.4.4
# ./configure 
#make && make install


安装google认证工具:
#git clone https://github.com/google/google-authenticator-libpam.git
#cd google-authenticator-libpam/
#./bootstrap.sh 
#./configure 
#make && make install
#ln -sv  /usr/local/lib/security/pam_google_authenticator.so /lib64/security/pam_google_authenticator.so

三. 配置:

1. 修改sshd_config, 令其支持google auth

vim /etc/ssh/sshd_config

Port 22
SyslogFacility AUTHPRIV
LogLevel INFO
AuthenticationMethods keyboard-interactive,publickey
PermitRootLogin yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
ChallengeResponseAuthentication yes
UsePAM yes
X11Forwarding yes
PrintLastLog yes
PasswordAuthentication no

2. vim /etc/pam.d/sshd 

# cat /etc/pam.d/sshd 
auth       required     pam_google_authenticator.so
auth	   required	pam_sepermit.so
#auth       substack     password-auth
auth       include      postlogin

/etc/init.d/sshd restart

3. 生成google auth 的key

# google-authenticator 

4. 安装谷歌身份验证器,通过google auth 的key生成 实时的6位数验证码。

也可以安装google浏览器插件的方式; 

<think>好的,用户问的是如何在UKUI环境下实现多因子登录,特别是自定义OTP登录。首先,我需要确认UKUI是否原生支持多因子认证。UKUI是一个基于Linux的桌面环境,通常在Ubuntu Kylin等发行版中使用。多因子认证(MFA)通常在系统层面的PAM(Pluggable Authentication Modules)配置中实现,而不是桌面环境本身。所以,用户可能需要通过配置Linux系统的PAM模块来启用MFA。 接下来,用户提到自定义OTP,比如自己的OTP系统。常见的OTP工具有Google Authenticator,但用户可能希望使用自己开发的或其他第三方OTP解决方案。这里需要考虑如何将自定义的OTP集成到PAM中。可能需要编写或使用现有的PAM模块,或者修改现有模块的配置。 首先,需要确保系统安装了必要的PAM模块。例如,Google Authenticator的PAM模块是libpam-google-authenticator。如果用户有自己的OTP,可能需要类似的自定义PAM模块。这可能涉及到开发一个PAM模块来处理OTP验证,这需要一定的编程知识,特别是C语言,因为PAM模块通常用C编写。 然后,配置PAM文件。在/etc/pam.d/目录下的相关配置文件(如common-auth或sshd)中添加对OTP模块的引用。配置时需要确定认证的顺序,是作为主要因素还是次要因素。例如,先密码认证,然后OTP,或者两者组合。 对于自定义OTP,如果用户有自己的验证逻辑,可能需要修改现有的PAM模块,或者创建一个新的模块。这可能比较复杂,需要了解PAM的工作流程和开发规范。另外,用户可能需要生成和管理OTP密钥,这通常涉及到将密钥与用户账户关联,并在登录时进行验证。 测试环节也很重要。在应用配置之前,应该保持一个活跃的SSH会话,以防止配置错误导致无法登录。然后,通过新会话测试登录流程,确保密码和OTP的顺序正确,并且自定义的OTP验证逻辑有效。 可能遇到的问题包括PAM配置错误导致登录失败,OTP生成或验证逻辑不正确,或者密钥管理问题。这时候需要查看系统日志(如/var/log/auth.log)来排查错误。 最后,安全性方面需要注意密钥的安全存储和传输,防止中间人攻击,以及备份密钥以防丢失。同时,用户教育也很重要,确保用户了解如何正确使用OTP进行登录。 总结来说,实现步骤大致是:安装必要的PAM模块,配置PAM文件以启用多因子认证,处理自定义OTP的集成(可能需要开发自定义模块),生成和管理OTP密钥,测试配置,并确保安全性。用户需要有一定的系统管理经验,特别是在处理PAM配置和可能需要的模块开发时。如果用户不熟悉这些,可能需要寻求更详细的文档或专业帮助。</think>### UKUI 实现多因子登录(包括自定义OTP)的步骤指南 #### 1. **理解多因子认证(MFA)的底层依赖** UKUI 作为桌面环境,其登录认证依赖 Linux 系统的 **PAM(Pluggable Authentication Modules)** 框架。多因子登录需通过配置 PAM 实现,而非 UKUI 自身功能。 --- #### 2. **基础环境准备** - **安装依赖工具**: ```bash sudo apt update sudo apt install libpam-google-authenticator # 示例:Google Authenticator的PAM模块 ``` - **自定义OTP场景**: - 若需自定义OTP(如私有算法),需开发适配的 **PAM模块**(需C语言基础)。 - 或使用开源替代方案(如 `oathtool` + 脚本集成)。 --- #### 3. **配置PAM实现多因子认证** - **编辑PAM配置文件**(以SSH登录为例): ```bash sudo nano /etc/pam.d/sshd # 或修改其他登录类型(如gdm3、lightdm) ``` - **添加OTP认证层**(示例配置): ```plaintext # 原始密码认证行(通常已存在) auth required pam_unix.so # 添加OTP作为第二因子 auth required pam_google_authenticator.so ``` --- #### 4. **自定义OTP集成(以脚本为例)** - **场景**:使用 `oathtool` 生成OTP,替代Google Authenticator- **步骤**: 1. **生成密钥并绑定用户**: ```bash # 生成密钥文件 mkdir -p ~/.otp_keys head -c 16 /dev/urandom | base32 > ~/.otp_keys/user_otp_secret ``` 2. **创建PAM脚本** (`/usr/local/bin/custom_otp_verify.sh`): ```bash #!/bin/bash USER=$1 OTP_CODE=$2 SECRET=$(cat /home/$USER/.otp_keys/user_otp_secret) EXPECTED_CODE=$(oathtool --totp -b $SECRET) [ "$OTP_CODE" = "$EXPECTED_CODE" ] && exit 0 || exit 1 ``` 3. **配置PAM调用脚本**: ```plaintext auth required pam_exec.so quiet /usr/local/bin/custom_otp_verify.sh $USER ``` --- #### 5. **用户端密钥初始化** - **为每个用户生成OTP密钥**: ```bash # 管理员操作:初始化用户密钥 sudo -u username bash -c 'head -c 16 /dev/urandom | base32 > ~/.otp_keys/user_otp_secret' # 用户扫码或手动输入密钥到OTP客户端(如FreeOTP) ``` --- #### 6. **测试与验证** - **保持救援会话**: ```bash sudo systemctl start ssh # 确保SSH备用连接可用 ``` - **触发登录测试**: ```bash ssh username@localhost # 输入密码后应提示OTP ``` --- #### 7. **安全加固建议** - **密钥保护**: ```bash chmod 600 ~/.otp_keys/user_otp_secret # 限制文件权限 ``` - **备用验证方式**: - 预生成一组备用码,保存在安全位置。 --- ### 自定义开发说明(如需私有协议) 1. **编写PAM模块**(C语言): - 参考 [Linux-PAM模块开发文档](http://www.linux-pam.org/Linux-PAM-html/Linux-PAM_SAG.html) - 核心函数:`pam_sm_authenticate()` 实现OTP验证逻辑。 2. **编译与部署**: ```bash gcc -fPIC -shared -o pam_custom_otp.so pam_custom_otp.c -lpam sudo cp pam_custom_otp.so /lib/security/ ``` --- ### 常见问题排查 - **日志检查**: ```bash tail -f /var/log/auth.log # 实时查看认证错误 ``` - **PAM调试模式**: ```plaintext auth debug pam_google_authenticator.so # 添加debug参数 ``` --- 通过以上步骤,UKUI 可灵活支持密码+OTP的多因子登录,自定义OTP需结合脚本或开发适配模块实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值