Part 2: 议用法:
对于su的传统的用法是允许superuser不经输入密码的变更为其它次要的用户的身份. 为在Linux-PAM里实现这种行为, 下面两行需要加入设定档:
# # su authentication. Root is granted access by default. # su auth sufficient pam_rootok.so su auth required pam_unix_auth.so
注意. 对于以superuser执行(或者在系统开机时被开启)的程序, 应该不要用此模块去认证用户.
6.23 The securetty module 概要
模块名:
pam_securetty 作者:
Elliot Lee <sopwith@cuc.edu>; 维护者:
Red Hat Software: currently Michael K. Johnson <johnsonm@redhat.com>; (if unavailable, contact Elliot Lee <sopwith@cuc.edu>. 提供的管理组:
authentication Cryptographically sensitive: 安全等级: 代码清洁度: 系统依赖:
/etc/securetty file 网络接口:
为使此有意义的, 需要应用程序设定正确的PAM_TTY.
概述
提供标准的UNIX的安全的tty的认证. Authentication component
识别的参数: 描述:
提供标准的Unix安全tty的检查, 除非PAM_TTY的值列在 /etc/securetty里, 对root的认证将会失败. 对所有其他用户, 则为成功. 范本/建议用法:
规范的用法, 这模块应该作为required的认证方法出现在任何 sufficient 的认证之前.
6.24 Time control 概要
模块名:
pam_time 作者:
Andrew G. Morgan <morgan@parc.power.net>; 维护者:
Author 提供的管理组:
account Cryptographically sensitive: 安全等级: 代码清洁度: 系统依赖:
需要一个设定档:/etc/security/time.conf 网络接口:
仅通过PAM_TTY
概述
运行一个规范得很好的系统偶尔也会包含对特定服务的有选择的限制访问. 此模块提供了对系统服务的时间上的访问控制. 它的行为由一个设定档决定. 此模块可以设定成基于用户名, 时间, 星期, 具体服务和请求服务时的终端名的对(单个)用户的拒绝访问. Account component
识别的参数: 描述:
此模块基于设定档中的制定的规则进行动作:/etc/security/time.conf. m每个规则有如下格式,
services;ttys;users;times
每个规则占一行, 结束于换行符或者注解的开始:`#'. 由分号`;' 分隔成四个栏位. 这些栏位是:
* services - 由此规则影响的服务名的逻辑列. * ttys - 指示受此规则保护的终端名字的逻辑列表逻辑列表. * user - 此规则作用到的用户的逻辑列表.
逻辑列表意味一串符号(和适当的PAM_相关), 包含不超过一个的通配符:`*', 和可选的非操作符的前置:`!'. 这一串表达式由两个逻辑操作符连接:& (逻辑与)和| 逻辑或). 两个例子:!morgan&!root, 表示此规则不会应用到用户morgan和root;tty*&!ttyp*, 表示此规则仅对控制台终端而不是伪终端适用. * times - 此规则的适用时间的逻辑列表. 每个元件的格式是周/时间-范围. 周由两个字符指定.比如, MoTuSa, 表示周一 周二和周六. 注意重复的周被 复位; MoTuMo 表示周二, MoWk 意为除了周一的所有工作日. 两个字符的组合可以是,
Mo Tu We Th Fr Sa Su Wk Wd Al
最后两个词是周末和 每周的整个7天.
时间范围部分是一对24时制的时间, HHMM, 以一个连字符隔开 -- 表示开始和结束的时间. 如果结束时间早于开始时间, 就假定是到第二天的这个结束时间. 例如, Mo1800-0300 表示允许的时间是从周一的晚上6点到第二天早上3点.
注意, 时间的限制只有在当前3个栏位都满足用户请求服务的应用时才适用.
为了便利和可读性, 一条规则可以由`\换行符'结尾以超过一行. 范本/建议用法:
要使用此模块可以在Linux-PAM的设定档里加入下面的行:
# # apply pam_time accounting to login requests # login account required pam_time.so
这里, 我们把这模块应用在login的服务.
可以放在/etc/security/time.conf里的规则举例如下:
login ; tty* & ; !ttyp* ; !root ; !Al0000-2400
除了root,禁止所有用户在任何时间从控制台登录. games ; * ; !waster ; Wd0000-2400 | Wk1800-0800
games (使用Linux-PAM的某游戏) 只在非工作时间可以访问. 此规则不限制用户waster.
注意, 目前还没有一个后台进程去强制终止一个超过时间范围的会话. 这要有个对策.
错误格式的规则会作为错误记录在 syslog(3).
6.25 The Unix Password module 概要
模块名:
pam_unix 作者: 维护者:
作者. 提供的管理组:
account; authentication; password; session Cryptographically sensitive: 安全等级: 代码清洁度: 系统依赖: 网络接口:
概述
这是标准Unix的认证模块. 它从系统库呼叫标准的调用来获取和设定帐号信息以及认证信息. 通常这些从/etc/passwd和/etc/shadow文件(如果开启了shadow功能)获得. Account component
识别的参数:
debug; audit 描述:
参数debug 使此模块的帐户相关的函数syslog(3)更多的它的动作的信息 (属于此模块的其它功能的参数会被直接忽略掉, 但是别的参数会当成错误而被 syslog(3)). 参数audit会丢出更多的信息.
基于以下的shadow 元素: expire; last_change; max_change; min_change; warn_change, 此模块执行确认帐号和密码状态的工作. 至於后面, 它可以建议用户改变密码或, 通过返回PAM_AUTHTOKEN_REQD, 延迟给用户提供服务直到其生成一个新密码. 列在上面的那些元素在GNU Libc的info文档里有解释. 如果用户的记录里没有包含一个或者更多的这些元素, 相对的shadow检查将不被执行. 范本/建议用法:
在帐号管理模式下, 可以这样来安装此模块:
# # Ensure users account and password are still active # login account required pam_unix.so
Authentication component
识别的参数:
debug; audit; use_first_pass; try_first_pass; nullok; nodelay 描述:
参数debug 使此模块的帐户相关的函数syslog(3)更多的它的动作的信息. 参数audit会丢出更多的信息.
此模块的默认设定是如果正式的密码为空则不允许用户访问服务. 参数nullok 用来使此默认设定无效.
当给出参数try_first_pass, 在提示用户输入密码之前, 模块会拿通过之前堆叠的 auth模块认证的密码来试. 参数use_first_pass 迫使模块使用上述的密码并且永远不会提示用户 - 如果没有可用的密码或密码不能通过认证, 用户将被禁止访问.
参数 nodelay 用来阻止认证部件在认证失败时的延时请求. 默认动作是请求一个一秒钟以上的失败-延迟.
属于此模块的其它功能的参数会被直接忽略掉, 但是别的参数会当成错误而被 syslog(3).
一个帮手程序, unix_chkpwd, 在当用户的密码报存在一个读保护的数据库里时提供对用户密码的检查. 这个程序非常简单, 它仅仅检查呼叫它的用户的密码. 它被此模块的认证部件以用户的名义来透明的呼叫. 如此象xlock这样的程序就不需被设成setuid-root而可以工作. 范本/建议用法:
此模块的正确功能可以由一个适当的/etc/nsswitch.conf 来支配, 那里指定的用户数据库确定用来认证的用户记录的来源.
在帐号管理模式下, 可以这样来安装此模块:
# # Authenticate the user # login auth required pam_unix.so
Password component
识别的参数:
debug; audit; nullok; not_set_pass; use_authtok; try_first_pass; use_first_pass; md5; bigcrypt; shadow; nis; min; max; obscure; remember 描述:
pam_unix 模块的这一部分执行更新用户密码的任务.
对于传统的UNIX用户数据库(同时保存用户密码), 参数md5 用来采用MD5的加密法以对抗不安全的传统的 crypt(3)调用. 还有种选择, 参数 bigcrypt 采用DEC(数字设备公司)的对标准UNIX的crypt()的算法进行 `C2'扩展的算法以加密超过8位长的密码.
参数nullok 用来允许改变一个原先为空的密码. 如果没有此参数, 空的密码会当成是被锁住的帐号.
参数use_first_pass 用来阻止选择旧的和新的密码,而是采用password里此模块之前的模块所保留的密码. 参数try_first_pass用来防止当pam_pwdb 跟随另一个password模块时用户重复输入也许是共享的旧密码 - 如果旧密码不正确, 再提示用户输入. 参数use_authok 用来迫使 此模块设定新密码时采用 password堆叠里先前的模块提供的值. (这用法在先前介绍的Cracklib一节里有个范本).
参数 not_set_pass 用来告诉模块不去关心给/从其它(堆叠的)密码模块提供/获取可用的旧密码或新密码.
参数debug 使此模块的密码相关的函数syslog(3)更多的它的动作的信息. 其它参数会被当成错误信息记录在syslog(3). 参数audit会丢出更多的信息.
通过设定nis 参数, pam_unix 会试图采用NIS RPC来设定新密码.
参数remember 带有一个值. 这值是为每个用户保存的最近使用的密码的个数. 它们被保存在/etc/security/opasswd 以防止用户频繁的交替使用同样的一组密码.
参数min 和 max 允许控制密码的常度. 有个固定的默认值是1到8. 这些值本身算在内.
参数obscure 允许一些额外的密码检查. 这效仿原始的shadow包里的含糊检查, 这过程和pam_cracklib模块非常相像(不做字典检查), 它执行以下一些检查:
* Palindrome - 新密码是否为旧密码的回文? 回文是指顺着读和反着读都一样的词(比如madam和radar). * Case Change Only - 新密码是否只是拿旧密码改了些大小写? * Similar - 新密码是否太像旧密码? * Simple - 新密码是否太简单? 这决定于密码的长度和采用不同种字符的个数(比如,字母, 数字...). * Rotated - 新密码是否为旧密码的轮转?(比如,"billy"和"illyb"
范本/建议用法:
标准用法:
# # Change the users password # passwd password required pam_unix.so
和可插入式密码检查模块,pam_cracklib 关联堆叠的例子:
# # Change the users password # passwd password required pam_cracklib.so retry=3 minlen=6 difok=3 passwd password required pam_unix.so use_authtok nullok md5
Session component
识别的参数: 描述:
模块的此部件没有参数. 它的作用就是在用户会话开始和结束时往syslog(3) 里记录用户名和服务类别. 范本/建议用法:
session部件的用法是单纯的:
# # session opening and closing # login session required pam_unix.so
6.26 The userdb module 概要
模块名:
pam_userdb 作者:
Cristian Gafton <gafton@redhat.com>; 维护者:
作者. 提供的管理组:
authentication Cryptographically sensitive: 安全等级: 代码清洁度: 系统依赖:
需要有 Berkeley DB. 网络接口:
概述
在一个.db数据库里查找用户并且与报存在这数据库中的密码进行比对. Authentication component
识别的参数:
debug; icase; dump; db=XXXX; 描述:
此模块用来与储存在BerkeleyDB数据库里的资料对用户/密码进行验证. 数据库以用户名为索引, 和用户名对应的栏位是以明码形式保存的密码, so caution must be exercised over the access rights to the DB database itself.. 模块以交互机制从用户端获取输入的密码. 如果此密码用在其他认证模块(象pam_unix )的前面, 那么你得要告诉那些模块从PAM_AUTHTOK(由此模块设定)处读取输入的密码.
模块的默认动作可以由以下的参数改变:
* debug - 给syslog(3)提供更多的调信息. * icase - 忽略大小写的密码比对. * dump - 往log里下载数据库里所有的的记录.(呀, 默认情况下不要这样做!) * db=XXXX - 使用XXXX这个数据库文件. 注意, Berkeley DB通常会在文件名后面加上扩展名, 所以你得像 /etc/foodata 这样指定文件而不是/etc/foodata.db.
范本/建议用法:
这是一个ftp服务的设定档(通常是 /etc/pam.d/ftp ), 会接受用户名/密码对存放在/tmp/dbtest.db中的用户登入.
#%PAM-1.0 auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed auth sufficient pam_userdb.so icase db=/tmp/dbtest auth required pam_unix.so shadow nullok try_first_pass auth required pam_shells.so account required pam_unix.so session required pam_unix.so
6.27 Warning logger module 概要
模块名:
pam_warn 作者:
Andrew G. Morgan <morgan@parc.power.net>; 维护者:
作者. 提供的管理组:
authentication; password Cryptographically sensitive: 安全等级: 代码清洁度: 系统依赖: 网络接口:
记录远程用户和远程主机的信息(如果可以知道相关的pam-items)
概述
此模块主要用来记录试图进行认证或者更新密码的动作. Authentication+Password component
识别的参数: 描述:
往syslog(3)里记录服务名,终端名,用户名,远端用户名和远程主机. 不是所有的项目都能侦测到, but instead obtained from the standard pam-items. 范本/建议用法:
在设定档一节 above有一个范本 .
6.28 The wheel module 概要
模块名:
pam_wheel 作者:
Cristian Gafton <gafton@redhat.com>; 维护者:
作者. 提供的管理组:
authentication Cryptographically sensitive: 安全等级: 代码清洁度: 系统依赖: 网络接口:
概述
只给属于whell(gid=0)群组的用户授予root的访问权限. Authentication component
识别的参数:
debug; trust; deny; group=XXXX 描述:
此模块用来实现所谓的重要人物 群组. 默认设定时, 如果请求的用户是wheel 的组成员就赋予其root的的访问权限. (首先, 模块检查组wheel是否存在. 如果不存在,那么id=0的组被当作wheel.
模块的默认动作可以通过在/etc/pam.conf里设定以下参数来改变:
* debug - 提供更多的调试信息给syslog(3). * trust - 此选项指示模块当一个请求root权限的用户是wheel组的成员时返回PAM_SUCCESS. 这种情况的默认动作是返回 PAM_IGNORE . 使用trust 选项可以使 wheel的组成员未经输入密码就能成为root. 小心使用. * deny - 这选项用来推翻模块的行为逻辑. 如果一个属于wheel组的用户试图得到uid=0 的权限时, 就禁止访问(wheel这个词也许就变得毫无意义!): 其目的是为了接下来的group= 参数而为. * group=XXXX - 代替对gid=0的组的眷顾, 而使用用户自己定意XXXX组. 这里的XXXX是组的名字而不是组的ID.
范本/建议用法:
为把能取得superuser权限的用户限制在wheel里, 使用下面的设定:
# # 默认给root赋权限(rootok), 只有wheel的组成员有可能成为root( wheel), 但仍然必须 # 通过unix_auth的认证. # # su auth sufficient pam_rootok.so su auth required pam_wheel.so su auth required pam_unix_auth.so
7. 文件
/usr/lib/libpam.so.*
提供给应用程序访问Linux-PAM API的共享库. /etc/pam.conf
Linux-PAM的设定档. /usr/lib/security/pam_*.so
Linux-PAM 的动态可装载目标文件(模块)的主要所在位置.
8. See also
* Linux-PAM 应用程序开发者指南 * Linux-PAM 模块开发者指南 * The V. Samar and R. Schemers (SunSoft), ``UNIFIED LOGIN WITH PLUGGABLE AUTHENTICATION MODULES'', Open Software Foundation Request For Comments 86.0, October 1995. See this url: http://www.pilgrim.umass.edu/pub/osf_dce/RFC/rfc86.0.txt
9. Notes
I intend to put development comments here... like ``at the moment this isn't actually supported''. At release time what ever is in this section will be placed in the Bugs section below!
我们是否打算支持模块的use_mapped_pass 呢? 有人认识佣金低廉(免费)的好律师吗?! argument? Anyone know a cheap (free) good lawyer?!
* This issue may go away, as Sun have investigated adding a new management group for mappings. In this way, libpam would have mapping modules that could securely store passwords using strong cryptography and in such a way that they need not be distributed with Linux-PAM.
10. Author/acknowledgments
This document was written by Andrew G. Morgan (morgan@linux.kernel.org) with many contributions from Chris Adams, Peter Allgeyer, Tim Baverstock, Tim Berger, Craig S. Bell, Derrick J. Brashear, Ben Buxton, Seth Chaiklin, Oliver Crow, Chris Dent, Marc Ewing, Cristian Gafton, Emmanuel Galanos, Brad M. Garcia, Eric Hester, Roger Hu, Eric Jacksch, Michael K. Johnson, David Kinchlea, Olaf Kirch, Marcin Korzonek, Stephen Langasek, Nicolai Langfeldt, Elliot Lee, Luke Kenneth Casson Leighton, Al Longyear, Ingo Luetkebohle, Marek Michalkiewicz, Robert Milkowski, Aleph One, Martin Pool, Sean Reifschneider, Jan Rekorajski, Erik Troan, Theodore Ts'o, Jeff Uphoff, Myles Uyema, Savochkin Andrey Vladimirovich, Ronald Wahl, David Wood, John Wilmes, Joseph S. D. Yao and Alex O. Yuriev.
Thanks are also due to Sun Microsystems, especially to Vipin Samar and Charlie Lai for their advice. At an early stage in the development of Linux-PAM, Sun graciously made the documentation for their implementation of PAM available. This act greatly accelerated the development of Linux-PAM. 11. 翻译/联系方法这份档案由孙国清(thomassun@yeah.net)翻译,历时N个月,这是我首次翻译英文资料, 欢迎指正.本译文以GNU GPL版权发布. 请在引用时附属译者以及版权说明. 12. Bugs/omissions
More PAM modules are being developed all the time. It is unlikely that this document will ever be truely up to date!
This manual is unfinished. Only a partial list of people is credited for all the good work they have done. 13. Copyright information for this document
Copyright (c) Andrew G. Morgan 1996-9. All rights reserved. Email: <morgan@linux.kernel.org>;
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice, and the entire permission notice in its entirety, including the disclaimer of warranties. * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.
Alternatively, this product may be distributed under the terms of the GNU General Public License (GPL), in which case the provisions of the GNU GPL are required instead of the above restrictions. (This clause is necessary due to a potential bad interaction between the GNU GPL and the restrictions contained in a BSD-style copyright.)
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
$Id: pam_source.sgml,v 1.9 1999/11/08 05:09:17 morgan Exp $
|