- 论坛徽章:
- 0
|
6.11 The last login module
概要
模块名:
pam_lastlog
作者:
Andrew G. Morgan ;
维护者:
作者.
提供的管理组:
auth
Cryptographically sensitive:
安全等级:
代码清洁度:
系统依赖:
用到/var/log/lastlog里保存的信息.
网络接口:
概述
此模块用于维护/var/log/lastlog 文件. 当程序呼叫pam_open_session()函数时写入一个条目并且在呼叫
pam_close_session()时完成此条目. 这函数还可以显示一条关于最后一次登录的信息. 如果应用程序已经有此功能, 则
没有必要使用此模块.
Authentication component
识别的参数:
debug; nodate; noterm; nohost; silent; never
描述:
此模块用于无论用户从何种支援PAM的应用程序登录系统都提供"Last login on ..." 这样的信息. 此外, 此模块还
维护/var/log/lastlog 档.
可有一下旗标改变此模块的行为:
* debug - 往syslog(3)里写入更多的信息.
* nodate - 当显示最后登录的信息时隐藏具体日期.
* noterm - 当显示最后登录的信息时隐藏终端名称.
* nohost - 当显示最后登录的信息时隐藏客户机名称.
* silent - 不显示任何最后登录信息: 仅仅更新/var/log/lastlog .
* never - 如果/var/log/lastlog 没有包含此用户的任何曾经登录的信息, 则显示用户从未登录的信息:
``welcome..." .
范本/建议用法:
此模块可以用来在用户login后显示是否有新邮件. 下面是一个以/etc/pam.conf配置的样本:
#
# do we have any mail?
#
login session optional pam_lastlog.so
注意, 有些应用程序也许自己会实现这些功能. 这种情况下就不必使用此模块了.
6.12 资源限制模块
概要
模块名:
pam_limits
Authors:
Cristian Gafton ;
Thanks are also due to Elliot Lee ; for his comments on improving this module.
维护者:
Cristian Gafton - 1996/11/20
提供的管理组:
session
Cryptographically sensitive:
安全等级:
代码清洁度:
系统依赖:
需要有/etc/security/limits.conf 设定档并且内核要支持资源限制. 也使用libpwdb 库.
网络接口:
概述
此模块通过Linux-PAM 的 开启-会话的钩子来设定用户会话能够获取的资源的限制. 由下面会讨论的设定档来更精确的支
配动作.
Session component
识别的参数:
debug; conf=/path/to/file.conf
描述:
通过设定设定档/etc/security/limits.conf 的内容来设定用户会话的资源限制. uid=0 的用户不受此约束.
以下旗标可以用来改变此模块的行为:
* debug - 往syslog(3)写入冗长的记录.
* conf=/path/to/file.conf - 指定一个替换的limits设定档.
范本/建议用法:
为使用此模块, 系统管理员必须首先建立一个 root只读 的文件(默认是 /etc/security/limits.conf). 这文件描述
了superuser想强迫用户和用户组的资源限制. uid=0的帐号不会受限制.
设定档的每一行描述了一个用户的限制,以下面的格式:
; ; ; ;
上面列出的栏位可以填下面的值:...
; 可以是:
* 一个用户名
* 一个组名,语法是@group
* 通配符*, 定义默认条目
; 可以有一下两个值:
* hard 为施行硬 资源限制. 这些限制由superuser设定,由Linux内核施行. 用户不能提升他对资源的需求到大
于此值.
* soft 为施行软 资源限制. 用户的限制能在软硬限制之间上下浮动. 这种限制在普通用法下可以看成是默认值
.
; 可以是以下之一:
* core - 限制core文件的大小(KB)
* data - 最大的资料大小 (KB)
* fsize - 最大的文件尺寸 (KB)
* memlock - 最大能锁定的内存空间(KB)
* nofile - 最多能打开的文件
* rss - 最大的驻留程序大小(KB)
* stack - 最大的堆栈尺寸(KB)
* cpu - 最大的CPU 时间(分钟)
* nproc - 最多的进程数
* as - 地址空间的限制
* maxlogins - 用户的最多登录数
* priority - 用户进程执行时的优先级
要完全不限制用户(或组), 可以用一个(-)(例如: ``bin -'',
[email=%60%60@admin]``@admin[/email]
-''). 注意,个体的限制比组限制的优先级
高, 所以如果你设定admin组不受限制, 但是组中的某个成员被设定档中某行限制, 那么此用户就会依据这样被限制.
还应该注意, 所有的限制设定只是每个登录的设定. 他们际不是全局的,也不是永久的 ; 之存在于会话期间.
在limits 的设定档中, ``#'' 开头的行为注解.
pam_limits 模块会通过syslog(3)报告它从设定档中找到的问题.
下面是个设定档的样本:
# EXAMPLE /etc/security/limits.conf file:
# =======================================
# ; ; ; ;
* soft core 0
* hard rss 10000
@student hard nproc 20
@faculty soft nproc 20
@faculty hard nproc 50
ftp hard nproc 0
@student - maxlogins 4
注意, 对同一个资源(见@faculty)的软限制和硬限制 - 这建立了用户可以从指定服务会话中得到的默认和最大允许
的资源数.
对于需要进行资源限制的服务例程(如login), 把下面一行放在/etc/pam.conf 里此服务的设定的最后一行(通常在
pam_unix session后面):
#
# Resource limits imposed on login sessions via pam_limits
#
login session required pam_limits.so
6.13 The list-file module
概要
模块名:
pam_listfile
作者:
Elliot Lee ;
维护者:
Red Hat Software:
Michael K. Johnson ; 1996/11/18
(if unavailable, contact Elliot Lee ;).
提供的管理组:
authentication
Cryptographically sensitive:
安全等级:
代码清洁度:
clean
系统依赖:
网络接口:
概述
list-file模块提供基于任意文件的对服务例程的拒绝或允许的设定
Authentication component
识别的参数:
onerr=succeed|fail; sense=allow|deny; file=filename; item=user|tty|rhost|ruser|group|shell
[email=apply=user%7C@group]apply=user|@group[/email]
描述:
这模块先获取指定类型的项目 -- user 指定用户名, PAM_USER; tty 指定请求建立时的获取的终端名, PAM_TTY;
rhost 指定请求建立的主机 (如果有), PAM_RHOST; ruser指定对方主机中发起连接请求的用户名(如果可以), PAM_RUSER
-- 然后寻找这些项目是否出现在filename中. filename每行包含一个项目. 如果找到对应项目, 那么如果 sense=allow,
则返回PAM_SUCCESS, 认证请求成功; 否则如果 sense=deny, 就返回PAM_AUTH_ERR, 认证请求失败.
如果有错误发生(比方, 如果 filename 不存在, 或者参数不完整), 那么如果onerr=succeed, 就返回PAM_SUCCESS ,
否则如果onerr=fail, 就返回PAM_AUTH_ERR 或者 PAM_SERVICE_ERR.
附加的参数, apply=, 能够限制应用程序只对指定的用户 (apply=username)或指定的组(
[email=apply=@groupname]apply=@groupname[/email]
)适用本
规则. 这个附加的限制只对tty,rhost 和shell有意义.
除了这最后一个参数外, all arguments should be specified; do not count on any default behavior, as it
is subject to change.
此模块不授予任何证书.
范本/建议用法:
传统的``ftpusers'' 认证可以由/etc/pam.conf下面的条目实现:
#
# deny ftp-access to users listed in the /etc/ftpusers file
#
ftp auth required pam_listfile.so \
onerr=succeed item=user sense=deny file=/etc/ftpusers
注意,列在/etc/ftpusers 里的用户将不允许访问ftp服务.
要只允许指定的用户可以登录, 你可以在pam.conf里设定以下的条目:
#
# permit login to users listed in /etc/loginusers
#
login auth required pam_listfile.so \
onerr=fail item=user sense=allow file=/etc/loginusers
要什这正常工作, 所有允许登录的用户都应该列在/etc/loginusers. 除非你明确的要试着把root所在门外, 否则在
你这样设定好, 登出之前最好确认: 要么root列在/etc/loginusers, 要么列表里有用户可以su 成root.
6.14 The mail module
概要
模块名:
pam_mail
作者:
Andrew G. Morgan ;
维护者:
Author
提供的管理组:
Authentication (credential) Session (open)
Cryptographically sensitive:
安全等级:
代码清洁度:
系统依赖:
默认的邮件目录:/var/spool/mail/
网络接口:
概述
此模块查看用户的邮件目录并指示里面是否有邮件. whether the user has any mail in it.
Session component
识别的参数:
debug; dir=direcory-name; nopen; close; noenv; empty; hash=hashcount; standard; quiet;
描述:
此模块给用户提供"you have new mail" 的服务. 它可以嵌入到任何有凭证钩子的应用程序里. 它给一个信息指示用
户的邮件目录中是否有最新的邮件. 此模块还设定Linux-PAM的环境变量 MAIL 为用户的邮件目录.
以下旗标可以用来改变此模块的行为:
* debug - 往syslog(3)里写入更多信息.
* dir=pathname - 从给定的pathname查找用户的邮件. 默认的邮件位置是/var/spool/mail. 注意,如果提供的
pathname 以`~'开头, 意指目录是在用户的家目录里.
* nopen - 指示当用户获取证书时不要打印任何信息, 这旗标用来设定MAIL环境变量而不用显示任何信息.
* close - 指示模块当用户被撤回证书时检查是否有邮件.
* noenv - 不要设定MAIL 环境变量.
* empty - 当用户的邮箱是空的时候显示这状态.
* hash=hashcount - 邮件目录的hash深度. 比如, hashcount = 2 意味着邮箱是/var/spool/mail/u/s/user.
* standard - 旧的 "You have..." 格式, 不显示具体的邮箱位置. 同样实现"empty".
* quiet - 只在有新邮件时才报告.
范本/建议用法:
此模块用来当用户登录到系统是提示他有新邮件. 下面是/etc/pam.conf 的样本:
#
# do we have any mail?
#
login session optional pam_mail.so
注意,有些应用程序会自己实现这功能, 这种情形下,就不必使用此模块了.
Authentication compent
authentication 部件和session部件一样运作, 除了他在pam_setcred()阶段被激活.
6.15 在首次登录是创建用户家目录
概要
模块名:
pam_mkhomedir
作者:
Jason Gunthorpe ;
维护者:
Ben Collins ;
提供的管理组:
Session
Cryptographically sensitive:
安全等级:
代码清洁度:
系统依赖:
网络接口:
概述
为通过认证的用户按需创建家目录.
Session component
识别的参数:
debug; skel=skeleton-dir; umask=octal-umask;
描述:
此模块对于帐号集中管理(NIS,NIS+,或LDAP)并且多系统访问的分布式系统有用处. 它不需要管理员在每个系统都去
建用户的家目录,而是当用户第一次成功登录时自动创建. skeleton目录(通常是/etc/skel/)用来拷贝默认文件, 这模块
也为创建的文件设定umask.
以下旗标可以用来改变此模块的行为:
* skel - 从skeleton目录处拷贝默认文件到新创建的家目录.
* umask - 和你在shell下设umask同样格式的八进制数.
范本/建议用法:
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
6.16 输出motd文件
概要
模块名:
pam_motd
作者:
Ben Collins ;
维护者:
Author
提供的管理组:
Session (open)
Cryptographically sensitive:
安全等级:
代码清洁度:
系统依赖:
网络接口:
概述
此模块在成功登录时输出motd文件 (默认是/etc/motd) .
Session component
识别的参数:
debug; motd=motd-file-name;
描述:
此模块允许你当成功登录后有任意的motd(当日消息)输出. 默认的文件是 /etc/motd, 但是可以设定为任意文件.
以下旗标可以用来改变此模块的行为:
* motd - 如果不打算用默认文件, 这里指定文件.
范本/建议用法:
login session pam_motd.so motd=/etc/motd
6.17 The no-login module
概要
模块名:
pam_nologin
作者:
Written by Michael K. Johnson ;
(based on code taken from a module written by Andrew G. Morgan ;).
维护者:
Michael K. Johnson ;
提供的管理组:
authentication
Cryptographically sensitive:
安全等级:
代码清洁度:
1个关于dropping const的警告
系统依赖:
网络接口:
概述
提供标准的Unix nologin的认证.
Authentication component
识别的参数:
描述:
提供标准的Unix nologin的认证. 如果存在/etc/nologin 文件, 则只有root允许登录; 其他用户会得到一个错误信
息并且不能登入. 所有用户(root 或 其它用户) 会显示/etc/nologin里的内容.
如果不存在/etc/nologin , 此模块返回成功.
范本/建议用法:
为使此模块生效, 所有登录方法都要由此模块来把关. 为和传统UNIX的nologin相同作用, 它应该被作为required方
法, 并且放在任何sufficient之前.
6.18 The promiscuous module
概要
模块名:
pam_permit
作者:
Andrew G. Morgan, ;
维护者:
Linux-PAM 维护者.
提供的管理组:
account; authentication; password; session
Cryptographically sensitive:
安全等级:
非常低. 极度小心的使用.
代码清洁度:
Clean.
系统依赖:
网络接口:
概述
此模块非常不安全. 必须谨慎使用. 它的动作是永远允许访问. 不做任何其它事情.
Account+Authentication+Password+Session components
识别的参数:
描述:
不管用在哪种管理组, 这模块的动作只是简单的返回 PAM_SUCCESS -- 操作成功.
在认证部件里, 用户名会被获取. 很多应用程序在不知道用户名时会觉得不合理.
范本/建议用法:
很难找到应用此模块的正当理由. 可是, 它还是有些合理的应用. 比如, 系统管理员想要关闭工作站的帐号管理, 同
时又要允许登录, 那么她可以用下面的配置条目设定ligin:
#
# add this line to your other login entries to disable account
# management, but continue to permit users to log in...
#
login account required pam_permit.so
6.19 The Password-Database module
概要
模块名:
pam_pwdb
作者:
Cristian Gafton ;
and Andrew G. Morgan ;
维护者:
作者.
提供的管理组:
account; authentication; password; session
Cryptographically sensitive:
安全等级:
代码清洁度:
系统依赖:
需要正确的配置libpwdb
网络接口:
概述
此模块是pam_unix_..的可插入式的替代品. 它使用Password Database的通用接口.
http://linux.kernel.org/morgan/libpwdb/index.html
.
Account component
识别的参数:
debug
描述:
参数 debug 令此模块的帐号管理功能在动作时syslog(3)更多的信息. (由别的功能支持的参数被忽略掉, 但是会在
syslog(3) 记录下错误信息.
基于以下的 pwdb_元件: expire; last_change; max_change; defer_change; warn_change, 此模块执行确认帐号和
密码状态的任务. 至于后来, 它可以给用户提出修改密码的建议或者, 通过PAM_AUTHTOKEN_REQD的返回, 延迟为用户提供
服务直到他创建了一个新密码. 以上列出的条目在Password Database Library Guide里有解释. documented in the
Password Database Library Guide (见上面的链接). 如果用户记录不包含一个或者更多这些条目, 对应的shadow 检查
不被执行.
范本/建议用法:
在帐号管理模式, 这模块可以象下面的用法:
#
# 确保用户帐号和密码依然有效
#
login account required pam_pwdb.so
Authentication component
识别的参数:
debug; use_first_pass; try_first_pass; nullok; nodelay; likeauth
描述:
参数 debug 令模块的认证功能写入syslog(3)更多的信息.
如果用户的official密码为空, 此模块的默认动作是不允许用户访问服务. 参数nullok 用来使此默认失效.
当给出参数try_first_pass, 在提示用户输入密码之前, 模块会拿通过之前堆叠的 auth模块认证的密码来试. 参数
use_first_pass 迫使模块使用上述的密码并且永远不会提示用户 - 如果没有可用的密码或密码不能通过认证, 用户将被
禁止访问.
参数 nodelay 用来阻止认证部件在认证失败时的延时请求. 默认动作是请求一个一秒钟以上的失败-延迟.
由别的功能支持的参数被忽略掉, 但是会在syslog(3) 记录下错误信息.
有个帮手程序, pwdb_chkpwd, 用来检查用户的密码(当密码报存在一个只读数据库时). 此程序非常简单,只检查当前
用户的密码. 它被此模块的认证部件以当前用户的身份显式的呼叫. 这样象xlock这样的程序就不需被设成setuid-root而
可以工作.
The likeauth argument makes the module return the same value when called as a credential setting
module and an authentication module. This will help libpam take a sane path through the auth component of
your configuration file.
范本/建议用法:
此模块的完整功能由一个恰当的/etc/pwdb.conf来控制, 指定的用户数据库控制用户认证的来源.
Password component
识别的参数:
debug; nullok; not_set_pass; use_authtok; try_first_pass; use_first_pass; md5; bigcrypt; shadow;
radius; unix
描述:
pam_pwdb模块的这一部分执行更新用户密码的任务. 受惠于libpwdb的灵活性, 此模块可以把用户密码从一个数据库
搬到另一个去, 也许以动态的方式使用户密码记录安全 (此时还处于初期ALPHA阶段!) - 这正是shadow, radius 和 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 使此模块的password功能syslog(3)更多的动作的信息. 其它参数会往syslog(3) 写进错误信息.
范本/建议用法:
有关如何将此模块与可插入式密码检查模块,pam_cracklib一起堆叠的例子, 请见上面的pam_cracklib一节.
Session component
识别的参数:
描述:
模块的此部件没有参数. 它的作用就是在用户会话开始和结束时往syslog(3) 里记录用户名和服务类别.
范本/建议用法:
session部件的用法是单纯的:
#
# pwdb - unix like session opening and closing
#
login session required pam_pwdb.so
6.20 The RADIUS session module
概要
模块名:
pam_radius
作者:
Cristian Gafton ;
维护者:
作者.
提供的管理组:
session
Cryptographically sensitive:
此模块不用来处理密码
安全等级:
代码清洁度:
在编译 /usr/include/rpc/clnt.h时gcc报告一个警告. Hey, is not my fault !
系统依赖:
网络接口:
是的; 这是个网络模块(独立于应用程序).
概述
此模块用来提供用户从RADIUS服务器认证的会话服务. 目前阶段, 唯一提供的功能是以RADIUS服务器当一个帐号服务器来
使用.
Session component
识别的参数:
debug - 冗余的信息写进syslog(3).
描述:
此模块用来提供用户从RADIUS服务器认证的会话服务. 目前阶段, 唯一提供的功能是以RADIUS服务器当一个帐号服务
器来使用.
(There are few things which needs to be cleared out first in the PAM project until one will be able to
use this module and expect it to magically start pppd in response to a RADIUS server command to use PPP
for this user, or to initiate a telnet connection to another host, or to hang and call back the user using
parameters provided in the RADIUS server response. Most of these things are better suited for the radius
login application. I hope to make available Real Soon (tm) patches for the login apps to make it work this
way.)
当开启一个会话时, 此模块发送一个``Accounting-Start'' 消息给RADIUS服务器, 服务器将会记录/更新此用户的有
关记录. 而当会话关闭时, 一个``Accounting-Stop'' 消息会发给RADIUS服务器.
此模块无须其它的必要条件以使其工作. 兴趣所致, 你要安装一个RADIUS服务器, 然后以此服务器为一个集中的帐号
管理服务器, 忘掉wtmp/last/sac这些东西.
范本/建议用法:
为使服务(例如login)使用此模块, 把下面一行加入/etc/pam.conf, 放在此服务的最后一行(通常在session段的
pam_unix之后):
login session required pam_radius.so
把login替换成你想要的其它服务名.
此模块大量使用了libpwdb0.54preB或其后版本的API. 默认情况下, 它会从 /etc/raddb/server读取RADIUS服务器的
设定(主机名和加密方法). 这是libpwdb默认编译时的设定, 目前没有办法不经重编译libpwdb来改变这个默认设定. 我正
在为libpwdb的radius支持进行扩展以使其提供运行时可设定功能.
还请注意libpwdb还需要你提供RADIUS的目录(/etc/raddb/dictionary).
6.21 The rhosts module
概要
模块名:
pam_rhosts_auth
作者:
Al Longyear ;
维护者:
提供的管理组:
authentication
Cryptographically sensitive:
安全等级:
代码清洁度:
干净.
系统依赖:
网络接口:
呼叫标准的inet_addr(), gethostbyname() 函数.
概述
此模块为传统的如rlogin和rsh的服务提供基于网络的认证.
Authentication component
识别的参数:
no_hosts_equiv; no_rhosts; debug; no_warn; privategroup; promiscuous; suppress
描述:
此模块的认证机制基于两个文件: /etc/hosts.equiv (或为_PATH_HEQUIV 定意在#include ;) 和
~/.rhosts. 首先, 列在前一个文件里的主机会被当成localhost一般对待. 第二, 后一个用户自己的文件的条目用来对照
"远程主机 远程用户"到当前主机的帐号. 如果远程主机列在/etc/hosts.equiv,并且远程用户的帐号和本机用户一致或者
远程用户的帐号在个人设定档中有登记则访问被允许.
用户的私人设定档会有些限制:它必须是一个常规文件(POSIX.1定意为S_ISREG(x)) ; 它必须属于superuser或本用户
;出了所有者之外其它用户必须不可写.
此模块认证从远程主机(内部用PAM_RHOST指定)连线的远端用户 (内部用PAM_RUSER指定). 因此, 应用程序如果要兼
容此认证模块, 它们必须在呼叫pam_authenticate()之前设定好这些条目. 模块本生没有能力去独立的侦测这些网络连接
信息.
至于root的访问, 除非使用hosts_equiv_rootok选项, /etc/host.equiv将被忽略. 替代的是, superuser必须有设定
正确的私人设定档.
此模块的动作可有一下旗标修改:
* debug - 记录冗余的信息到syslog(3). (XXX - 事实上, 此模块目前不记录任何信息, 请自愿的修复它!)
* no_warn - 不要给用户发送更多的有关失败的警告信息. (XXX - 此模块当前不会发布任何警告信息, 请自愿
的修复它!)
* no_hosts_equiv - 忽略/etc/hosts.equiv .
* hosts_equiv_rootok - 允许superuser也使用 /etc/hosts.equiv. 如果没有这选项,/etc/hosts.equiv 不被
superuser帐号考虑. 如果同时有no_hosts_equiv, 此选项会失效.
* no_rhosts - 忽略所有用户的私人设定档:~/.rhosts.
* privategroup - 通常, ~/.rhosts 必须不能为除了所有者之外的任何人可写. 此选项针对组所有者和进行认
证的拥有者同名的文件放宽组写的权限. 为减小此选项可能带来的安全隐患, 此模块还检查用户是否为那个组的唯一成员
.
* promiscuous - 有此选项, 以`+' 作为主机名将导致所有的主机都被赋予访问权限. 没有此选项, `+'的记录
会被忽略, debug选项会往syslog里记录一个警告.
* suppress - 这将阻止模块在当认证失败时syslog(3) 警告信息. 这选项主要用来使日志免于无意义的错误记
录, 尤其是当模块被当成sufficient模式所用时.
范本/建议用法:
为允许用户从信任的远程主机登录, 你得把下面一行加入你的/etc/pam.conf, 并且在其他会提示用户输入密码的模
块之前 :
#
# No passwords required for users from hosts listed above.
#
login auth sufficient pam_rhosts_auth.so no_rhosts
注意, 在这个例子里, 系统管理员关闭了所有个人的 rhosts设定档. 还请注意, 此模块可用来设定成只允许
在/etc/host.equiv文件里指定的远程主机登录, 只要把sufficient改成required.
6.22 The root access module
概要
模块名:
pam_rootok
作者:
Andrew G. Morgan ;
维护者:
Linux-PAM maintainer
提供的管理组:
authentication
Cryptographically sensitive:
安全等级:
代码清洁度:
Clean.
系统依赖:
网络接口:
概述
此模块用在superuser希望不需要输入密码就能获取访问权限的情形.
Authentication component
识别的参数:
debug
描述:
此模块认证uid是0的用户. 创建成setuid-root的应用程序通常保留用户的uid但是以有效的-uid的权限执行. 真实的
uid会被检查.
范本/建
--------------------------------------------------------------------------------
ipod 回复于:2004-08-19 15:14:34
完全版?谢谢楼主先
--------------------------------------------------------------------------------
gentoo 回复于:2004-08-19 15:46:27
谢谢!
--------------------------------------------------------------------------------
thomassun 回复于:2004-08-20 11:12:39
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 ;
维护者:
Red Hat Software:
currently Michael K. Johnson ;
(if unavailable, contact Elliot Lee ;).
提供的管理组:
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 ;
维护者:
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 ;
维护者:
作者.
提供的管理组:
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 ;
维护者:
作者.
提供的管理组:
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 ;
维护者:
作者.
提供的管理组:
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: ;
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 $
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/22330/showart_247900.html |
|