
为了鼓励广泛采用双因子认证的方式,Google公司发布了Google Authenticator,一款开源的,可基于开放规则(如 HMAP/基于时间)生成一次性密码的软件。这是一款跨平台软件,可运行在Linux, Android, iOS。Google公司同时也支持插件式鉴别模块PAM(pluggable authentication module),使其能和其他也适用PAM进行验证的工具(如OpenSSH)协同工作。
在本教程中,我们将叙述集成OpenSSH和Google提供的认证器实现如何为SSH服务设置双因子认证。我将使用一款Android设备来生成一次性密码,本教程中需要两样武器:(1)一台运行着OpenSSH服务的Linux终端,(2)一台安卓设备。
在Linux系统中安装Google Authenticator
第一步需要在运行着OpenSSH服务的Linux主机上安装Google认证器。按照如下步骤安装Google认证器及其PAM模块。
用安装包安装 Google Authenticator
如果你不想自己构建 Google Authenticator,在几个 Linux 发行版上有已经编译好的安装包。安装包里面包含 Google Authenticator 二进制程序和 PAM 模块。
在 Ubuntu 上安装 Google Authenticator:
$ sudo apt-get install libpam-google-authenticator
在 Fedora 上安装 Google Authenticator:
$ sudo yum install google-authenticator
在 CentOS 上安装 Google Authenticator ,需要首先启用 EPEL 软件库,然后运行如下命令(LCTT 译注:EPEL 库中可能已经删除了该软件包,请使用源代码编译方式安装):
$ sudo yum install google-authenticator
如果不想使用已经编译好的安装包,或者你的 Linux 发行版不在此列,可以自行编译:
在 Linux 上编译 Google Authenticator
首先,安装构建 Google Authenticator 所需的软件包。
在 Debian、 Ubuntu 或 Linux Mint 上:
$ sudo apt-get install wget make gcc libpam0g-dev
在 CentOS、 Fedora 或 RHEL上:
$ sudo yum install wget make gcc pam-devel
然后下载 Google Authenticator 的源代码,并按如下命令编译(已经从 Google Code 迁移到了 Github)。
$ wget https://github.com/google/google-authenticator/archive/master.zip
$ unzip master.zip
$ cd google-authenticator-master/libpam
$ ./bootstrap.sh
$ ./configure
$ make
如果构建成功,你会在目录中看到 pam_google_authenticator.so 和 google-authenticator 两个文件。
最后,将 Google Authenticator 安装到合适位置。默认会安装到 /usr/local/lib/security 下,根据你的系统不同,你可能需要将其符号链接到 pam 库的位置(比如 CentOS 7 会在 /usr/lib64/security)。
$ sudo make install
排错
当编译 Google Authenticator 时出现如下错误:
fatal error: security/pam_appl.h: No such file or directory
要修复这个问题,请安装如下依赖包。
在 Debian、 Ubuntu 或 Linux Mint 上:
$ sudo apt-get install libpam0g-dev
在 CentOS、 Fedora 或 RHEL 上:
$ sudo yum install pam-devel
当Google认证器安装好后,你需要在Linux主机上创建验证密钥,并且在安卓设备上注册,注意这项配置 *** 作是一次性的。我们将详细叙述如何完成这些 *** 作:
生成验证密钥
在Linux主机上运行Google认证器
$ google-authenticator
你将看到一个QR码,它使用如下图形表示我们数字形态的密钥。一会我们要用到它在安卓设备上完成配置。
高防。 其实在Hibernate里面你建的表如果有关系的话。 生成实体类的时候会生成多对一或者多对多,或者一对多的关系。 这样你查询一个对象的时候,他里面就包含了你要查询的那个对象的实体类或者集合(根据多对一或者一对多的关系确定的)。 这样你遍历出info的内容,就可以直接点出来想要的type. 这就是hibernate的优势,竟然用了hibernate就要用到他的优势。 嘿嘿 努力吧。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)