Chinaunix首页 | 论坛 | 博客
  • 博客访问: 307241
  • 博文数量: 26
  • 博客积分: 2052
  • 博客等级: 大尉
  • 技术积分: 686
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-23 22:02
文章分类

全部博文(26)

文章存档

2013年(1)

2011年(1)

2010年(12)

2009年(2)

2008年(10)

我的朋友

分类: LINUX

2010-11-22 13:55:03

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 \
           on
err=succeed item=user sense=deny file=/etc/ftpusers


6.10.6. 开发者

pam_ftp was written by Andrew G. Morgan .
阅读(2713) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~