当前位置:Linux教程 - Linux文化 - 使用PAM进行统一身份的认证

使用PAM进行统一身份的认证


PAM是 PLUGGABLE AUTHENTICATION MODULES 的缩写.
可插入的认证模块(并不是Linux指的模块)用于实现应用程序的认证机制,
是程序员或管理员不需要重新编写或编译程序就可以改变认证机制.
在linux它已经被广泛的应用了, 例如: /etc/securitty /etc/onlogin
/etc/ftpusers 实际上都是给它用的.你在登陆的时候的输入密码和你修改密码
时也都用的是它./etc/pam.conf和/etc/pam/* 都是它的配置文件.

它最大的优点是它的弹性和可扩充性. 你可以随意修改认证机制, 按你的实
际需要来定制系统.你了解后就会非常清楚了.

DESIGN GOALS(设计目标)

(a) 管理员可以选择认证方式, 从简单的密码到智能卡系统.

(b) 可以为不同的程序配置不同的认证机制.如 使telnet使用 S/Key认证.
而本机的 login 缺使用一般的 UNIX password.

(c) 支持程序的显示方式的需求. 如login 需要基于终端的显示, 而dtlogin
需要 X 显示, 而`ftp' 和 `telnet'需要透过网络来认证.

(d) 支持为一个程序配置同时使用多种认证机制.

(e) 可是用户在使用多种认证机制时,不必为同一个密码敲入多次.

(f) 可是用户在认真时需要输入多个密码.

(g) 当底层的认证机制改变时上层软件不需要修改.

(h) 结构为system authentication提供一个 _pluggable_ model.

(i) 必须能满足现有的服务需要.

4. OVERVIEW OF THE PAM FRAMEWORK (纵览PAM的框架)

其核心实际上是一些库函数. 你写的应用程序要调用它们.PAM为你提供
了一套入口(the front end). 而这套函数互调用 特定认证机制所定义的模块
(the back end).
简单的说是这样的: 你调用一个函数仅仅告诉它你要认正,这就足够了.至于
用那一种机制来认证是由配置文件规定的. 你只需要看一看返回值就知道认证是
否成功了. 对于开发应用程序的人来说只需要记住几个函数.

ftp telnet login (Applications)
| | |
| | |
+--------+--------+
|
+-----+-----+
| PAM API | 2) {
fprintf(stderr, "Usage: check_user [username]\n");
exit(1);
}

retval = pam_start("check_user", user, &conv, &pamh);
/* 开始 */
if (retval == PAM_SUCCESS)
retval = pam_authenticate(pamh, 0);
/* 认证是不是该用户? 提示你输入一个密码 */

if (retval == PAM_SUCCESS)
retval = pam_acct_mgmt(pamh, 0);
/* 账号是否有效? */

if (retval == PAM_SUCCESS) {
fprintf(stdout, "Authenticated\n");
} else {
fprintf(stdout, "Not Authenticated\n");
}

if (pam_end(pamh,retval) != PAM_SUCCESS) {
/* 结束 */
pamh = NULL;
fprintf(stderr, "check_user: failed to release authenticator\n");
exit(1);
}

return ( retval == PAM_SUCCESS ? 0:1 ); /* indicate success */
}

- Bricks Team