2009-09-08 追风
6.6. pam_env - 配置环境变量模块
pam_env.so [ debug ] [ conffile=conf-file ] [ envfile=env-file ] [ readenv=0|1
] [ user_envfile=env-file ] [ user_readenv=0|1 ]
6.6.1. 综述
这个PAM模块允许对环境变量进行设置。缺省情况下,通过配置文件/etc/security/pam_env.conf设置变量。
除
此之外,该模块还可以从/etc/environment文件中读入形如“变量名=值”的环境变量。当然,你可以通过设置envfile标志位指定自己的
文件,也可以通过设置标志位readenv为1或0,来启用或者关闭该文件。需要注意的是,该文件的读入的值,将覆盖conffile文件中的缺省值。
6.6.2. 描述
pam_env模块通过/etc/security/pam_env.conf来决定环境变量是否应该被设置,或者是取消设置,或者是更改设置。当用户登录时,模块就通过读取这个文件把环境变量设置好了。
文
件中每一行都是以变量名开头,每个变量有两个选项,DEFAULT 和 OVERRIDE。DEFAULT
是用来设置变量的默认值的,如果DEFAULT选项没有指定具体值,则将会用空字符串代替。OVERRIDE选项用来告诉pam_env模块,使用
OVERRIDE的值来覆盖DEFAULT的值。
在/etc/security/pam_env.conf中也有相关的说明。
VARIABLE [DEFAULT=[value]] [OVERRIDE=[value]]
环境变量有可能是${string}的形式,PAM_ITEM有可能是@{string}的形式。不论是$还是@,都需要用反斜杠“\”进行字符转换。
“#”开头的行为注释
6.6.3. 选项参数
conffile=/path/to/pam_env.conf
指定配置文件路径,默认为/etc/security/pam_env.con。在不同服务需要不同环境变量时,可以使用该参数为不同的服务指定不同的配置文件
debug
通过syslog打印调式信息
envfile=/path/to/environment
指定配置文件路径,默认路径是/etc/environment。该文件的用途看6.6.1节。在不同服务需要不同环境变量时,可以使用该参数为不同的服务指定不同的配置文件
readenv=0|1
使能或关闭对envfile指定文件的读取,0为关闭, 1为使能。默认使能。
user_envfile=filename
指定文件.pam_environment来覆盖默认的环境变量。该文件必须在用户的home目录下,例如$HOME/.pam_environment
user_readenv=0|1
使能或关闭对user_envfile指定文件的读取,0为关闭, 1为使能。默认使能。
6.6.4. 模块所支持的类型
auth session
6.6.5. 返回值
PAM_ABORT
无法得到所有相关数据和参数
PAM_BUF_ERR
内存缓冲区错误
PAM_IGNORE
没有找到文件pam_env.conf和文件environment
PAM_SUCCESS
成功设置环境变量
6.6.6. 文件
/etc/security/pam_env.conf
默认配置文件
/etc/environment
默认环境文件
$HOME/.pam_environment
用户特定的环境文件
6.6.7. 例子
这些例子在/etc/security/pam_env.conf.都可以找到。
设置远程主机变量REMOTEHOST,默认为"localhost",而不是不设置。
REMOTEHOST DEFAULT=localhost OVERRIDE=@{PAM_RHOST}
设置变量DISPLAY
DISPLAY DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY}
其他一些简单的变量
PAGER DEFAULT=less
MANPAGER DEFAULT=less
LESS DEFAULT="M q e h15 z23 b80"
NNTPSERVER DEFAULT=localhost
PATH DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
:/usr/bin:/usr/local/bin/X11:/usr/bin/X11
一些特殊的变量,注意加转意字符“\”
DOLLAR DEFAULT=\$
DOLLARDOLLAR DEFAULT= OVERRIDE=\$${DOLLAR}
DOLLARPLUS DEFAULT=\${REMOTEHOST}${REMOTEHOST}
ATSIGN DEFAULT="" OVERRIDE=\@
6.6.8. 开发者
pam_env was written by Dave Kinchlea
.
6.7. pam_exec - 外部命令调用模块
pam_exec.so [ debug ] [ expose_authtok ] [ seteuid ] [ quiet ] [ log=file ]
command [ ... ]
6.7.1. 描述
顾名思义,pam_exec这个模块可以用来调用外部命令。
6.7.2. 选项参数
debug
打印调试信息
expose_authtok
During authentication the calling command can read the password from stdin
(3).
log=file
被调用命令执行时的输出信息被记录到file中。
quiet
默认情况下如果外部命令执行失败,则pam_exec模块会输出外部命令的状态。使用这个quiet选项后,则不会输出外部命令的状态,保持安静。
seteuid
默认情况下,pam_exec模块将会以调用进程的真实用户ID来执行外部命令。使用这个选项后,外部命令将会以另外一个有效的用户ID执行。(不知道这个ID是不是随机的)
6.7.3. 模块所支持的类型
auth, account, password and session
6.7.4. 返回值
PAM_SUCCESS
外部命令执行成功
PAM_SERVICE_ERR
外部命令参数错误
PAM_SYSTEM_ERR
发生系统错误或者外部命令执行失败
PAM_IGNORE
调用了pam_setcred,外部命令将不会被执行
6.7.5. 例子
将下面一行加入/etc/pam.d/passwd中,当某个本地用户密码发生变化后,重新编译NIS数据库。
passwd optional pam_exec.so seteuid make -C /var/yp
执行的外部命令是:
make -C /var/yp
with effective user ID.
6.7.6. 开发者
pam_exec was written by Thorsten Kukuk .
6.9. pam_filter - 输入输出流过滤模块
pam_filter.so [ debug ] [ new_term ] [ non_term ] run1|run2 filter [ ... ]
6.9.1. 描述
该模块为用户和应用程序之间的输入输出提供一个平台。只适用于tty-base和标准输入输出程序。
为了使用这个模块的功能,需要在系统中安装一个过滤器。模块中的过滤器只提供对输入流字符的大小写转换,然后输出到输出流。(为某个程序重新编写过滤代码实现过滤功能是不太现实的)
该模块的每一个组件都可能调用所需要的过滤器。过滤程序是以调用的程序的权限运行的,而不是以用户的权限运行。因此,普通用户只能关闭他们的会话过程才能杀死过滤进程。
6.9.2. 选项参数
debug
打印调试信息
new_term
默认情况下,过滤器会设置一个PAM_TTY选项来指示用户与应用程序连接的终端。这个参数表示过滤器应该把PAM_TTY设置为被过滤的伪终端。
non_term
不必设置PAM_TTY选项。
runX
为了使这个模块能够执行一个过滤程序,应该让它知道何时执行。可以使用这个参数实现上述目的。这个参数紧跟过滤程序的路径名以及其命令行参数。
X的值可以是1也可以是2。这指明了过滤器运行的确切时间。请察看pam(3)的手册以获得更多信息。对于每个管理组来说,都有两种方法调用模块的函数。
在authentication和session两个组件中,实际上都是分成了两个函数。在authentication组件
中,这两个函数是pam_authenticate 和
pam_setcred,此处run1,就表示执行函数pam_authenticate中的过滤器,run2就表示执行函数pam_setcred中的
过滤器。在sesson组件中,run1表示过滤程序从pam_open_session函数运行,run2
表示从pam_close_session函数运行。
对于account组件,run1和run2都可能被用到
对于password管理组组件,run1表示过滤程序在pam_chauthtok函数首次运行时(PAM_PRELIM_CHECK阶段)执行;而
run2表示过滤程序是在pam_chauthtok第二次运行时(PAM_UPDATE_AUTHOK阶段)执行。
filter
过滤器的全路径,已经过滤器的命令行参数。
6.9.3. 支持的模块类型
auth, account, password and session
6.9.4. 返回值
PAM_SUCCESS
过滤器设置成功
PAM_ABORT
严重错误,立即中断
6.9.5. 例子
将下面一行添加到/etc/pam.d/login中,实际尝试一下这个模块的应用 :
session required pam_filter.so run1 /lib/security/pam_filter/upperLOWER
6.9.6. 开发者
pam_filter was written by Andrew G. Morgan .
6.10. pam_ftp - 匿名访问模块
pam_ftp.so [ debug ] [ ignore ] [ users=XXX,YYY, ...]
6.10.1. 描述
pam_ftp模块提供插入式的匿名ftp访问模式。
该
模块可以截获用户的用户名和密码。如果用户名为ftp或者anonymous,而用户的密码是以@分割的,它就会把@前后两部分分别设置为
PAM_RUSER和PAM_RHOST选项的值;用户名(PAM_USER)被设置为ftp。模块验证成功。在其它情况下,这个模块就会通过
PAM_AUTHTOK选项返回需要输入密码和验证失败的信息。
该模块并不安全而且容易被利用。
6.10.2. 选项参数
debug
打印调试信息
ignore
忽略用户的email地址
ftp=XXX,YYY,...
使用等号之后给出的用户名代替ftp或者anonymous,作为匿名FTP的用户名。匿名访问者需使用列表中的用户名进行匿名访问,返回的用户名是列表中的第一个,即XXX。
6.10.3. 支持的模块类型
auth
6.10.4. 返回值
PAM_SUCCESS
认证成功
PAM_USER_UNKNOWN
未知的用户名
6.10.5. 例子
将如下一行添加到/etc/pam.d/ftpd中,实现ftp类型的匿名登录:
#
# ftpd; add ftp-specifics. These lines enable anonymous ftp over
# standard UN*X access (the listfile entry blocks access to
# users listed in /etc/ftpusers)
#
auth sufficient pam_ftp.so
auth required pam_unix.so use_first_pass
auth required pam_listfile.so \
onerr=succeed item=user sense=deny file=/etc/ftpusers
6.10.6. 开发者
pam_ftp was written by Andrew G. Morgan .
阅读(1557) | 评论(0) | 转发(0) |