Xorg releases

X.org with X.Org Foundation

Find documents and information for the X11 versions released by X.org, mainly driven by the X.Org Foundation:

XFree86

Former X11 releases, done by XFree86:

  • XFree86 X4.5.0: (Release: 2005-03-16)

  • XFree86 X4.4.99.18 (snapshot): (Release: 2004-11-27)

  • XFree86 X4.4.99.9 (develsnap): (Release: 2004-07-12)

  • XFree86 X4.4.0: (Release: 2004-02-23)

  • XFree86 X4.4.0 RC2: (Release: ?)

  • XFree86 X4.3.0: (Release: 2003-02-26)

    • compatible with X11R6.6

  • XFree86 X4.2.1: (Release: 2002-09-03)

  • XFree86 X4.2.0: (Release: 2002-01-16)

    • the Open Source port of X.Org’s X11R6.6 release

  • XFree86 X4.1.0: (Release: 2001-06-02)

    • the Open Source port of X.Org’s X11R6.5.1 release

  • XFree86 X4.0.3: (Release: 2001-03-02)

  • XFree86 X4.0.2: (Release: 2000-12-15)

  • XFree86 X4.0.1: (Release: 2000-06-30)

    • the Open Source port of X.Org’s X11R6.4 release

  • XFree86 X4.0.0: (Release: 2000-02-26)

  • XFree86 X3.3.6: (Release: 1999-12-31)

    • a port of X11R6.3

  • XFree86 X3.3.5: (Release: ?)

  • XFree86 X2.1.1: (Release: 1994-05-04)

    • The XFree86 servers are derived from X386 1.2, which was the X server distributed with X11R5.

  • XFree86 X2.1: (Release: 1994-03-11)

  • XFree86 X2.0:

(This listing might be incomplete. The provided release dates can be slightly deviating from the true release dates.)

You can find the related packages on misc mirrors e.g. on http://ftp.gwdg.de/pub/xfree86/XFree86/.

X.org and XConsortium

Former X11 releases, done by X.org and the XConsortium:

  • X.org X11R6.6: Press Release (Released: 2001-04-03)

  • X.org X11R6.5.1: Press Release (Released: 2000-08-25)

  • X.org X11R6.4 (aka R6.4): (Release: 1998-03-31)

  • X.org X11R6.3 (aka R6.3): (Release: 1997-07-15)

  • X.org X11R6.1 (aka R6.1): (Release: 1996-03-12)

  • X.org X.V11R6 (aka R6): (Release: 1995-03-02)

  • X.org X.V11R5 (aka R5): (Release: 1994-05-18)

  • X.org X.V11R4 (aka R4): (Release: 1989-01-29)

  • X.org X.V11R3 (aka R3): (Release: ca. 1988-10-27)

  • X.org X.V11R2 (aka R2): (Release: ca. 1988-03-24)

  • X.org X.V11R1 (aka R1): (Release: ca. 1987-09-18)

  • X.org X.V10R4 (aka V10R4): (Release: ca. 1986-12-25)

  • X.org X.V10R3 (aka V10R3): (Release: ca. 1986-06-07)

(This listing might be incomplete. The provided release dates can be slightly deviating from the true release dates.)

You can find these older versions on one of the long term mirrors of X.org ftp, e.g. at http://ftp.pl.debian.org/mirror/ftp.x.org/pub/ or http://ftp.gwdg.de/pub/x11/x.org/pub/.

Posted in X.org | Tagged | Leave a comment

在named中设置能够记录每一次查询DNS服务器的记录

在named中设置能够记录每一次查询DNS服务器的记录。
在/etc/named.conf 中加入如下内容:


logging{

channel "bind_log" {

file "/var/log/named/bind.log" versions 3 size 25m;

severity info;

print-time yes;

print-severity yes;

print-category yes;

};

channel "query_log" {

file "/var/log/named/query.log" versions 3 size 25m;

severity info;

print-time yes;

print-category yes;

};

category lame-servers { null; };

category queries { "query_log"; };

category default{ "bind_log"; };

};

Posted in DNS | Tagged | Leave a comment

玩转 MPlayer

Mplayer的使用,记录下来,以后用的着

原文地址:http://linuxtoy.org/archives/playing-around-with-mplayer.html

MPlayer 是我在 Linux 系统中用到的相当好的媒体播放程序,它因支持播放广泛的音/视频文件格式而著称。本文所要探讨的,除却一般的使用方法之外,更包括一些鲜为人知的提示和诀窍。相信在阅读此文后,你的多媒体播放体验将会增色不少。

播放文件

使用 MPlayer 播放媒体文件最简单的方式是:
mplayer <somefile>

MPlayer 会自动检测文件的类型并加以播放,如果是音频文件,则会在命令行中显示该播放文件的状态信息;而假如是视频文件的话,则会打开一个新的播放窗口。

倒退与快进

在播放文件的时候,你可以通过以下三组快捷键来对播放进程进行倒退与快进操作:

  • 左方向键和右方向键:分别执行倒退 10 秒和快进 10 秒操作
  • 下方向键和上方向键:分别执行倒退 1 分钟和快进 1 分钟操作
  • 下翻页键和上翻页键:分别执行倒退 10 分钟和快进 10 分钟操作

播放 DVD

虽然 MPlayer 不支持 DVD 菜单,但是却能够播放 DVD。你可以这样播放 DVD:
mplayer dvd://<titlenumber>

你需要使用实际的数字来替换 <titlenumber>,如 1、2、3 等。

使用字幕

当播放电影文件时,你可以指定字幕文件:
mplayer -sub <somesubtitlefile> <somefile>

在播放 DVD 电影时,你也可以通过指定语言代码来使用字幕:
mplayer dvd://<titlenumber> -slang nl,en

这样,MPlayer 就会优先使用荷兰语字幕,如果该语言不可用,则再使用英语字幕。

有用的快捷键

以下是 MPlayer 中一些有用的快捷键:

  • f-当播放视频时,在全屏和窗口模式之间切换。你也可以在命令行中使用 -fs 选项,以便让 MPlayer 开始在全屏模式中播放。
  • o-在播放视频时切换 OSD(OnScreen Display)模式。
  • p 或 Space-暂停/继续播放。
  • q 或 Esc-退出 MPlayer。在 GUI 模式时,Esc 不会退出,仅停止播放。
  • / 和 * 或 9 和 0-减小或增大音量。
  • m-静音切换。
  • T(通常是 Shift + t)-播放窗口置顶切换。
  • b 和 j-在可用的字幕间循环。
  • x 和 z-调整字幕的延迟时间。
  • I(Shift + i)-显示播放电影的文件名称。
  • 1 和 2-调整对比度。
  • 3 和 4-调整亮度。
  • 5 和 6-调整色度。
  • 7 和 8-调整饱和度。

生成索引

有时候,有些视频文件(主要是 AVI 文件)包含损坏的索引,或者根本就没有索引。这种情况通常是由下载文件不正确或未完成造成的。幸运的是,MPlayer 能够生成正常播放文件所需的索引。通过使用 -idx 选项,你可以告诉 MPlayer 来生成索引:
mplayer -idx <somefile>

有时候文件虽然包含索引,但却已损坏。那样的情况,你可能需要 MPlayer 强制生成索引:
mplayer -forceidx <somefile>

根据视频文件的大小,生成索引需花费一定的时间。但在此后,文件应该能够正常播放。

纠正错误的音频/视频同步

有些视频文件(主要是 flv 文件)由于编码的问题,会给 MPlayer 带来音频/视频同步的麻烦。这有两种可能情况:

  • MPlayer 会尝试修复,但同步问题却更遭。
  • MPlayer 会尝试修复那些正确的,因此没有必要同步。

对于第一种情况,你应当让 MPlayer 努力修复同步问题:
mplayer -autosync 30 -mc 2.0 <somefile>

而对于第二种情况,你不应当允许 MPlayer 去修复同步问题:
mplayer -autosync 0 -mc 0 <somefile>

将上述命令中的 autosync 设置为正值就会让 MPlayer 逐渐调整音频/视频的同步。值越高,MPlayer 越快地修复它。mc 选项指定 MPlayer 纠正每帧要多少秒。值越高,MPlayer 越认为接近修复音频/视频同步。设置为 0 则阻止 MPlayer 修复。

在慢系统上使用 MPlayer

MPlayer 允许在旧的或慢的系统上使用低 CPU 功率来播放视频文件。你可以使用 -framedrop 选项:
mplayer -framedrop <somefile>

当播放 MP3 或 OGG Vorbis 文件时,你可能感受到一定的缓冲,这将影响你的音乐体验。那样的话,你可以尝试使用 libmad(MP3)或 Tremor(OGG Vorbis)音频解码器。你可以这样来检测它们:

对于 MP3:
mplayer -ac help | grep mad

如果上面的命令返回的结果像这样:
mad libmad working libMAD MPEG layer 1-2-3 [libmad]

那么你可以使用 libmad 播放 MP3:
mplayer -ac mad <somefile>

在 OGG 的情况中,你可以使用同样的技巧来检测 tremor 音频解码器是否可用:
mplayer -ac help | grep tremor

播放流媒体

如果 MPlayer 无法自动找到播放列表或直接的流媒体文件,你可以尝试使用 -playlist 选项:
mplayer -playlist <file or url>

同时你也可以设置较大的缓存:
mplayer -cache 8192 -playlist <file or url>

指定缓存大小的单位是 KB,上面的命令将允许 MPlayer 使用 8 MB 缓存。你可以使用 -cache-min 选项来改变 MPlayer 占用缓存的百分比:
mplayer -cache 8192 -cache-min 50 -playlist <file or url>

循环播放

如果你想让媒体文件循环播放,可以使用 -loop 选项:
mplayer -loop 3 <somefile>

上面的命令将播放 <somefile> 3 次,然后才退出。
mplayer -loop 0 <somefile>

上面的命令将永远重复播放 <somefile>。

改变播放速度

你可以使用 -speed 选项来改变 MPlayer 播放媒体文件的速度。值为 1.0,意味着正常速度;0.5 意味着慢两倍;2.0 意味着快两倍。像这样指定选项:
mplayer -speed 2.0 <somefile>

改变采样率

使用 -srate 选项你可以改变 MPlayer 输出的采样率:
mplayer -srate 48000 <somefile>

将音频输出为 wav 文件

你可以将视频文件中的音频部分输出为 wav 文件:
mplayer -ao pcm <somefile>

这将输出名为 audiodump.wav 的音频文件。你也可以为输出的 wav 文件指定名称:
mplayer -ao pcm:file=<filename>.wav <somefile>

使用 ASCII 方式观看电影

虽然无用,但却很好玩。有两个库文件支持该特性:aa 和 caca。使用 libaa,你只能在黑白 ASCII 中观看电影。而 libcaca 支持色彩。然而,libaa 支持更广泛。你可以像这样使用 libaa 观看电影:
mplayer -vo aa <somefile>

如果你想使用 libcaca:
mplayer -vo caca <somefile>

将电影输出为系列图片

MPlayer 也能将电影输出为一系列的图片:
mplayer -vo jpeg <somefile>

注意:上面的命令将产生数量巨大的 jpeg 文件。输出的 jpeg 文件名看起来像这样:00000001.jpg、00000002.jpg、00000003.jpg 等等。

你也可以输出其他的格式。只需将命令中的 jpeg 替换成 ppm、png、tga 等。

指定纵横比

当你在宽屏中播放电影时,可能想要使用 16:9 的纵横比:
mplayer -aspect 16:9 <somefile>

在非宽屏中,你可以使用 4:3 的纵横比。

将选项放置到 MPlayer 的配置文件中

对于一般用户来说,该配置文件位于 ~/.mplayer/config;全局的配置文件在 /etc/mplayer/config。不同的值使用行分隔,如:

# MPlayer config file


srate=48000
ao="pcm:file=dumpedaudio.wav"

Posted in Uncategorized | Leave a comment

深入 Linux PAM 体系结构

原文地址:http://www.ibm.com/developerworks/cn/linux/l-pam/index.html


本文阐述了 Linux-PAM 的概念,同时还与读者一道分析了 Linux-PAM 的体系结构,作者希望籍此以加深读者对 Linux-PAM 的理解,以便对其有更深层的把握。

一、什么是Linux-PAM

为 安全起见,计算机系统只有经过授权的合法用户才能访问,在这里如何正确鉴别用户的真实身份是一个关键的问题。所谓用户鉴别,就是用户向系统以一种安全的方 式提交自己的身份证明,然后由系统确认用户的身份是否属实的过程。换句话说,用户鉴别是系统的门户,每个用户进入到系统中都必须经过鉴别这一道关。

最初,Linux系统的用户鉴别过程就像各种Unix系统的一样:系统管理员为用户建立一个帐号并为其指定一个口令,用户 用此指定的口令登录后重新设置自己的口令,这样用户就具有了一个只有他自己知道的秘密口令。一般情况下,用户的口令经过加密处理后存放于 /etc/passwd 文件中。用户登录时,登录服务程序提示用户输入其用户名和口令,然后将口令加密并与 /etc/passwd 文件中对应帐号的加密口令进行比较,如果口令相匹配,说明用户的身份属实并允许此用户访问系统。这种思想基于只有用户自己知道他的口令,所以输入的口令是 正确的话,那么系统就认定他是所声称的那个人。

后来,还采用了许多其他的鉴别用户的方法,如用于网络环境的 Kerberos 以及基于智能卡的鉴别系统等。但是这些鉴别方案有一个通病:实现鉴别功能的代码通常作为应用程序的一部分而一起编译,这样问题就来了——如果发现 所用算法存在某些缺陷或想采用另一种鉴别方法时,用户不得不重写(修改或替换)然后重新编译原程序。很明显,我们原先的鉴别方案缺乏灵活性,这里的牵一发 而动全身的情形很是让人恼火。

鉴于以上原因,人们开始寻找一种更佳的替代方案:一方面,将鉴别功能从应用中独立出来,单独进行模块化设计,实现和维护; 另一方面,为这些鉴别模块建立标准 API,以便各应用程序能方便的使用它们提供的各种功能;同时,鉴别机制对其上层用户(包括应用程序和最终用户)是透明的。直到 1995 年,SUN 的研究人员提出了一种满足以上需求的方案–插件式鉴别模块(PAM)机制并首次在其操作系统 Solaris 2.3 上部分实现。插件式鉴别模块(PAM)机制采用模块化设计和插件功能,使得我们可以轻易地在应用程序中插入新的鉴别模块或替换原先的组件,而不必对应用程 序做任何修改,从而使软件的定制、维持和升级更加轻松–因为鉴别机制与应用程序之间相对独立。应用程序可以通过 PAM API 方便的使用 PAM 提供的各种鉴别功能,而不必了解太多的底层细节。此外,PAM的易用性也较强,主要表现在它对上层屏蔽了鉴别的具体细节,所以用户不必被迫学习各种各样的 鉴别方式,也不必记住多个口令;又由于它实现了多鉴别机制的集成问题,所以单个程序可以轻易集成多种鉴别机制如 Kerberos 鉴别机制和 Diffie – Hellman 鉴别机制等,但用户仍可以用同一个口令登录而感觉不到采取了各种不同鉴别方法。

在广大开发人员的努力下,各版本的 UNIX 系统陆续提供对 PAM 的支持。其中,Linux-PAM 是专门为 Linux 机器实现的,包括 Caldera 1.3、2.2、Debian 2.2、Turbo Linux 3.6、Red Hat 5.0 以及 SuSE 6.2 及它们的后续版本都提供对 PAM 的支持。FreeBSD 从 3.1 版开始支持 PAM。需要注意的是,除了具体实现不同外,各种版本 Unix 系统上的 PAM 的框架是相同的,所以我们在这里介绍的 Linux-PAM 框架知识具有普遍性。因此在下文介绍其框架的过程中可以看到,我们并没有刻意区分 PAM 与 Linux-PAM 这两个术语。


二、PAM 的分层体系结构

PAM 为了实现其插件功能和易用性,它采取了分层设计思想:让各鉴别模块从应用程序中独立出来,然后通过PAM API作为两者联系的纽带,这样应用程序就可以根据需要灵活地在其中"插入"所需鉴别功能模块,从而真正实现了"鉴别功能,随需应变"。实际上,这一思路 非常符合软件设计中的"高内聚,低耦合"这一重要思想,PAM 的体系如下简图所示:

图1 PAM体系结构

从 上图可以看出,PAM API 起着承上启下的作用,它是应用程序和鉴别模块之间联系的纽带:当应用程序调用 PAM API 时,应用接口层按照配置文件 pam.conf 的规定,加载相应的鉴别模块。然后把请求(即从应用程序那里得到的参数)传递给底层的鉴别模块,这时鉴别模块就可以根据要求执行具体的鉴别操作了。当鉴别 模块执行完相应操作后,将结果返回给应用接口层,然后由接口层根据配置的具体情况将来自鉴别模块的应答返回给应用程序。

上面描述了 PAM 的各个组成部分,以及它们作为整体的运作机理。下面将对 PAM 的关键的低二层分别加以介绍。


三、第一层:模块层

模 块层处于整个结构的最底层,它向上为接口层提供用户鉴别等服务,也就是说所有具体的鉴别工作都是由该层的模块来完成的。对于应用程序,有些不但需要验证用 户的口令,还可能要求验证用户的帐户是否已经过期。此外,有些应用程序也许还会要求记录当前会话的有关信息或改变口令等,所以 PAM 在模块层除了提供鉴别模块外,同时提供了支持帐户管理、会话管理以及口令管理功能的模块。当然,这四种模块并不是所有应用程序所必需的,而是根据需要灵活 取舍,比如虽然 login 可能要求访问所有四种模块,但是 su 可能仅仅需要使用鉴别组件即可。至于如何取舍则涉及到接口层的 PAM API和配置文件,这部分内容将在下文中加以介绍。

四、第二层:应用接口层

应用接口层位于 PAM 结构的中间部分,它向上为应用程序屏蔽了用户鉴别等过程的具体细节,向下调用模块层中的具体模块所提供的特定服务。由图1可以看出,它主要由 PAM API 和配置文件两部分组成,下面将逐一介绍。

PAM API 可以分为两类,一类是用于调用下层特定模块的接口,这类接口与底层的模块相对应:

  1. 鉴别类接口:pam_authenticate()用于鉴别用户,pam_setcred()用于修改用户的秘密信息。
  2. 帐号类接口:pam_acct_mgmt()检查受鉴别的用户所持帐户是否有权登陆系统,以及该帐户是否已过期等。
  3. 会话类接口:包括用于会话管理和记帐的 pam_open_session()和 pam_close_session()函数。
  4. 口令类接口:包括用于修改用户口令的 pam_chauthtok()。

第二类接口通常并不与底层模块一一对应,它们的作用是对底层模块提供支持以及实现应用程序与模块之间的通信等。具体如下:

  1. 管理性接口
    每组 PAM 事务从 pam_start()开始,结束于 pam_end()函数。接口 pam_get_item()和 pam_set_item()用来读写与 PAM 事务有关的状态信息。同时,能够用 pam_str()输出 PAM 接口的出错信息。
  2. 应用程序与模块间的通讯接口
    在 应用程序初始化期间,某些诸如用户名之类的数据可以通过 pam_start()将其存放在PAM接口层中,以备将来底层模块使用。另外,底层模块还可以使用 pam_putenv()向应用程序传递特定的环境变量,然后应用程序利用 pam_getenv() 和 pam_getenvlist() 读取这些变量。
  3. 用户与模块间的通讯接口
    pam_start()函数可以通过会话式的回调函数,让底层模块通过它们读写模块相关的鉴别信息,比如以应用程序所规定的方式提示用户输入口令。
  4. 模块间通讯接口
    尽管各模块是独立的,但是他们仍然能够通过 pam_get_item()和 pam_set_item()接口共享某些与鉴别会话有关的公用信息,诸如用户名、服务名、口令等。此外,这些API还可以用于在调用 pam_start()之后,让应用程序修改状态信息。
  5. 读写模块状态信息的接口
    接口 pam_get_data()和 pam_set_data()用以按照PAM句柄要求访问和更新特定模块的信息。此外,还可以在这些模块后附加一个清除数据函数,以便当调用 pam_end()时清除现场。

由于 PAM 模块随需加载,所以各模块始化任务在第一次调用时完成。如果某些模块的清除任务必须在鉴别会话结束时完成,则它们应该使用 pam_set_data()规定清除函数,这些执行清除任务的函数将在应用程序调用 pam_end()接口时被调用。

五、配置文件

我们注意到,配置文件也放在了在应用接口层中,它与 PAM API 配合使用,从而达到了在应用中灵活插入所需鉴别模块的目的。它的作用主要是为应用选定具体的鉴别模块,模块间的组合以及规定模块的行为。下面是一个示例配置文件:

图2.示例配置文件

我们可以看到,配置文件有许多登记项(每行对应一个登记项)组成,每一行又分为五列(每列对应一栏),详细解释如下:

第一栏,service表示使用PAM的应用程序,比如login、passwd、rlogin等。这一栏中的OTHER表 示所有没在该文件中显式列出的应用。也就是说,如果所有程序具有相同的需求,整个配置文件只需要一行即可,并且该行的第一栏为OTHER。本例中,因为所 有应用程序使用相同的会话模块,所以实际上可以用单行,即

" OTHER   session        required     pam_unix_session.so"


来代替文件中的这些行:

"login   session     required     pam_unix_session.so
ftp session required pam_unix_session.so
telnet session required pam_unix_session.so"。


第二栏,module_type指明程序所用PAM底 层模块的类型:auth表示鉴别类模块;account表示帐户类模块;session表示会话类模块;password表示口令类模块。注意,每行只能 指定一种类型模块,如果程序需要多种模块的话,可在多行中分别规定。

第三栏,control_flag规定如何处理模块的成功和失败情况。单个应用程序可以调用多种底层模块,这通常称为"堆 叠",对应于某程序的按照配置文件中出现顺序执行的所有模块成为"堆",堆中的各模块的地位与出错时的处理由control_flag栏的取值决定,它的 五种可能的取值分别为required、Requisite、sufficient或_optional,现介绍如下:

required--它表示该模块的成功是用户通过鉴别的必要条件,换句话说,只有当对应于应用程序的所有带 required标记的模块全部成功后,该程序才能通过鉴别。同时,如果任何带required标记的模块出现了错误,PAM并不立刻将错误消息返回给应 用程序,而是在所有模块都调用完毕后才将错误消息返回调用它的程序。

Requisite--它与required相仿,只有带此标记的模块返回成功后,用户才能通过鉴别,不同之处在于其一旦失败就不再执行堆中后面的其它模块,并且鉴别过程到此结束。

optional--它表示即便该模块失败,用户仍能通过鉴别。在PAM体系中,带有该标记的模块失败后将继续处理下一模块。

sufficient--它表示该模块取得成功是用户通过鉴别的充分条件,也就是说只要标记为sufficient的模块一 旦成功,那么PAM便立即向应用程序返回成功而不必尝试任何其他模块。当标记为sufficient的模块失败时,sufficient模块当做 optional对待。

第四栏,module_path指出PAM模块的位置。

第五栏,options用于向特定模块传递相关的选项,然后由模块分析解释这些任选项。比如使用此栏打开模块调试,或向某模块传递诸如超时值之类的参数等。另外,它还用于支持下文所述的口令映射技术。

如果任一栏出现错误,或某模块没有找到,那么所在行被忽略并将其作为严重错误进行记录。

本例中,login程序使用UNIX口令模块进行鉴别,而ftp程序却使用S/Key模块进行鉴别。如我们想改变ftp程序的鉴别方法,比如也用UNIX口令模块进行鉴别,那么我们不必改动源程序,只需将配置文件中的

ftp     auth        required     pam_skey_auth.so    debug


改为

ftp     auth        required     pam_unix_auth.so    debug


这样,当用户使用ftp时,将用传统的UNIX口令鉴 别方式来验证其身份。由此可见,在PAM体制下为应用程序改变鉴别机制是一件轻松的事情。另外,PAM体制的堆叠功能还使得应用程序能够支持多种鉴别机 制,如下例中的login程序在配置文件中先后出现了三项与鉴别有关的登记项:

图3.示例配置文件

当login 程序执行时先用pam_unix.so模块即传统的UNIX口令方式鉴别用户,然后再调用pam_kerb.so模块即Kerberos对用户进行鉴别, 最后用pam_rsa.so模块即RSA方式鉴别用户。在按上述顺序鉴别用户的过程中,如果pam_unix.so模块鉴别失败,它将继续调用下面的模块 进行鉴别而非立刻向login程序返回错误消息;pam_kerb.so模块也按同样方式处理,直到顺序处理完最后一个pam_rsa.so模块后, PAM才将前面出现的错误信息返回给login程序。对于该配置,即使pam_rsa.so模块顺利通过,只要pam_unix.so模块和 pam_kerb.so模块中有一个出现错误,用户就不能通过鉴别;相反,即使pam_rsa.so模块失败,只要pam_unix.so模块和 pam_kerb.so模块都通过了,用户也能通过鉴别。

六、口令映射

在 同一个机器上使用多个鉴别机制,尤其是一个应用程序集成多种鉴别机制可能导致用户需要记忆多个口令,这会让用户觉得很不舒服。虽然可以让所有机制使用相同 的口令来获取易用性,但是这将削弱系统的安全性--如果其中任何一个机制的口令泄露了,则所有机制都会受到牵累。此外,不同的鉴别机制在口令长度、容许的 字符、更新间隔、有效期等方面可能具有他们特有的要求,这些要求也是为多鉴别机制使用同一个口令必须考虑的一个问题。

PAM为我们提供了这样一种解决方案,它不排除为所有鉴别机制共用一个口令,同时允许通过口令映射技术让每个机制使用不同 的口令。该方案用用户的"主口令"加密其他的"副口令",并且将这些经过加密的副口令存放在一个用户能访问的地方。主口令一旦经过验证,鉴别模块就能用它 解密那些加密的副口令从而获得相应口令,然后将所需口令传递给鉴别模块。这称为"口令映射"。如果口令映射出现错误,或如果映射不存在,那么各鉴别模块应 该提示用户输入口令。为支持口令映射,主口令应保存在PAM第二层并且在需要时由其提供给堆叠的各个鉴别模块。同时,口令要在 pam_authenticate函数返回之前清除。为了保障口令映射的安全,主口令必须足够强壮,可以考虑使其的长度更长、组成口令字符的类型多样化并 使用混合类型的字符组成口令等有效措施。

口令如何加密及其存储完全取决于具体的实现:它能够将加密的副口令(也称作"映射口令")存储在可靠或不可靠的地方,诸如智能卡、本地文件或目录服务。当然,如果加密的口令保存在一个不可靠的允许公共访问的地方,会留下受到字典攻击的隐患。

为实现口令映射,所有鉴别模块应支持以下四个映射选项∶

  1. use_first_pass∶它表示当该模块执行时不提示用户输入口令,而将该模块之前的提示用户输入的主口令作为它们的公共口令进行验证。如果用户没能通过主口令的鉴别,则该模块不提示用户输入口令。此选项一般说来在系统管理员想强制用同一个口令通过多模块时使用。
  2. try_first_pass∶除了如果主口令不正确,将提示用户输入口令之外,它的用法与use_first_pass相同。
  3. use_mapped_pass∶它表示使用口令映射技术得到此模块的有效口令。也就是说,该模块执行时不提示用户 输入口令,而是用映射口令即用主口令解密得到的该模块的副口令作为本模块的口令输入进行验证。如果在此之前用户没能通过主口令的鉴别,则该模块也不会提示 输入口令。
  4. try_mapped_pass∶除了如果主口令不正确,它将提示用户输入口令之外,该项与use_mapped_pass用法相同。

当口令更换后,PAM会保存所有新旧口令,并且使有关模块能够访问到它们。其他模块能够使用此信息更新加密的口令而不必强制用户再次输入口令。

现以下面的配置文件为例讲解口令映射:

图4. 示例配置文件

在 这里login程序集成了三种鉴别方式:传统UNIX口令鉴别、Kerberos和RSA鉴别,但通常情况下用户仅输入一次口令便能通过鉴别了。当程序调 用pam_unix.so模块时,PAM提示用户输入他们的UNIX口令,然后由pam_kerb.so模块对用户输入的UNIX口令进行鉴别。继而调用 pam_kerb.so模块,由于该模块的选项为use_mapped_pass,它将利用口令映射机制进行认证,也就是说,如果UNIX口令鉴别通过的 话,就将其作为pam_kerb.so模块的主口令来解密其对应的映射口令从而进行Kerberos鉴别。如果pam_unix.so模块所需口令没能通 过验证,则无法进行口令映射,那么PAM将直接调用下一鉴别模块而不提示用户输入其Kerberos口令。最后一个模块的选项为 use_first_pass,所以pam_rsa.so模块将使用前边输入的主口令来鉴别用户,如果口令错误也不提示用户输入RSA口令。所以,只要第 一次输入的口令是正确的,并且映射口令存在,则一个口令便足以通过鉴别。

七、结束语

Linux-PAM是一种使用灵活功能强大的用户鉴别机制,本文对它的组成结构以及各部分之间的关系进行了相应的分析,希望对读者理解PAM的机制有所帮助。

参考资料

1. 想了解更多的FLTK的知识和下载FLTK源代码等可以到 www.fltk.org 网站。 FLTK的编程手册你想了解FLTK构件的事件方法等都在里面。OpenGL

2. 还是参考一下 www.opengl.org上的资料吧,有文档说明还有教学和源代码。


关于作者

韩波,自由撰稿人,有近十年的C语言编程经验,主要感兴趣的领域为TCP/IP协议,Linux内核以及信息安全技术。作为自由撰稿人,其力求在不影响问题实质的前提下,尽量将要表达的内容以通俗易懂的形式摆在读者的面前。您可以通过 hbzzx2001@yahoo.com.cn与他联系。

Posted in PAM | Tagged , | 4 Comments

The table of equivalents / replacements / analogs of Windows software in Linux.

windows, linux软件对照表
http://www.linuxrsp.ru/win-lin-soft/table-eng.html

The Linux Equivalent Project
http://www.linuxeq.com/

Posted in GNU/Linux | Tagged | Leave a comment