Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4733
  • 博文数量: 5
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 70
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-03 15:51
文章分类
文章存档

2013年(5)

我的朋友

分类: 其他平台

2013-08-12 15:30:04

概述:

     本文介绍常见的PAM认证模块,包括每一个模块的所属类型、功能描述以及可识别的参数,有配置文件的,我们给出了配置文件的简单说明,其中一部分模块,我们还给出了配置实例。希望通过我们的介绍,使读者对常用的PAM认证模块有一定的了解。本文的介绍是基于RedHat7.x系统。水平有限,不足之处请读者批评指正。


1.pam_access认证模块
所属类型:account
功能描述:该模块提供基于登录用户名、客户ip/主机名、网络号以及登录终端号的访问控制。缺省的,该模块的配置文件是/etc/security/access.conf,可以使用accessfile参数指定自定义的配置文件。
可带参数:accessfile=/path/to/file.conf
配置文件说明: 该文件的每一行由如下三个字段构成,中间使用冒号分割: 权限 : 用户 : 来源 权限字段可以是”+”(即允许访问),”-”(禁止访问); 用户字段可以是用户名、组名以及诸如
user@host
格式的用户名,ALL表示任何人, 具有多个值时,可以用空格分开。 字段可以是tty名称(本地登录时)、主机名、域名(以”.”开始),主机ip地址,网络号(以”.”结束)。ALL表示任何主机,LOCAL表示本地登录。 可以使用EXCEPT操作符来表示除了…之外。
配置实例: 只有bye2000可以从本地登录主机。 编辑/etc/pam.d/login如下所示:
#%PAM-1.0
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_stack.so service=system-auth
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_stack.so service=system-auth
account required /lib/security/pam_access.so
password required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_stack.so service=system-auth
session optional /lib/security/pam_console.so
也即加上 account required /lib/security/pam_access.so 然后在/etc/security/access.conf中加上: -:ALL EXCEPT bye2000 : LOCAL 假如禁止root以外的任何人从任何地方登录,可以在/etc/security/access.conf中加上: -:ALL EXCEPT root: ALL


2.pam_chroot认证模块

所属类型:session
    为了加强linux服务器的安全性,要求指定的用户从ssh登录后只能在指定的目录下工作并只能运行指定的命令或脚本

解决:
修改ssh的登录验证方法
[root@localhost ~]# vi /etc/pam.d/sshd
#%PAM-1.0
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
session include system-auth
session required pam_loginuid.so
session required pam_chroot.so (这是我们手动加入的一行)

设置用户目录
[root@localhost ~]# mkdir /virtual_root/chroot/lib -p
[root@localhost ~]# mkdir /virtual_root/chroot/etc -p
[root@localhost ~]# mkdir /virtual_root/chroot/bin -p
[root@localhost ~]# mkdir /virtual_root/chroot/home/ziyang -p
(你的/etc/passwd中应该有一个名为ziyang的用户)
[root@localhost ~]# chown ziyang.ziyang /virtual_root/chroot/home/ziyang

修改chroot配置文件
[root@localhost ~]# vi /etc/security/chroot.conf
ziyang /virtual_root/chroot (手动加入此行,ziyang就只能被限定在/virtual_root/chroot目录下了。

注:是通过ssh登录的用户,对本地控制台登录的用户无效。但是可以有方法去实现)

设置用户权限和可用命令
[root@localhost ~]# cp /lib/ld-linux.so.2 /lib/libc.so.6 /lib/libdl.so.2 /lib/libtermcap.so.2 /virtual_root/chroot/lib
[root@localhost ~]# cp /bin/bash /virtual_root/chroot/bin
[root@localhost ~]# grep ziyang < /etc/passwd > /virtual_root/chroot/etc/passwd

应用测试
使用ssh从其他的主机登录你的linux服务器,你会发现ziyang这个用户登录后被限定在了/virtual_root/chroot目录下,并且没有可以使用的shell命令。


3.pam_cracklib认证模块
所属类型:password
pam_cracklib是一个PAM模块,用来检查密码是否违反密码字典,这个验证模块可以通过插入password堆 栈,为特殊的应用提供可插入式密码强度性检测。 它的工作方式就是先提示用户输入密码,然后使用一个系统字典和一套规则来检测输入的密码是否不能满足强壮性要求。密码的强度检测分二次进行,第一次只是检测密码是否是提供的对比字典中的一部分,如果检测结果是否定的,那么就会提供一些附加的检测来进一步检测其强度,例如新密码中的字符占旧密码字符的比例,密码的长度,所用字符大小写状况,以及是否使用了特殊字符等等。(libpam-cracklib)

         下面是cracklib模块的一些参数:

          debug:将debug信息写入syslog

          type=XXX:提示输入密码的文本内容。默认是"New UNIX password: " and "Retype UNIX password: ",可自定

          retry=N:用户最多可以几次输入密码后报错。默认是1次。

          difok=N:新密码有几个字符不能和旧密码相同,默认是5个。另外如果新密码有1/2的字符于旧不同,也会被接受。

          diginore=N:默认当新密码有23个字符时,difok选项会被忽略。

          minlen=N:最小密码长度。

          dcredit=N:当N>=0时,N代表新密码最多可以有多少个阿拉伯数字。当N<0时,N代表新密码最少要有多少个阿拉伯数字。

           ucredit=N:和dcredit差不多,但是这里说的是大写字母。

           lcredit=N:和dcredit差不多,但是这里说的是小写字母。

           ocredit=N:和dcredit差不多,但是这里说的是特殊字符。

           use_authtok:在某个与密码相关的验证模块后使用此选项,例如pam_unix.so验证模块

           pam_cracklib 模块式PAM配置接口的基本模块,在Debian系统中配置文件是 /etc/pam.d/common-password 但是在Redhat系统中配置文件是 /etc/pam.d/system-auth 他的配置看起来像以下这样:

           password required pam_cracklib.so retry=3 minlen=6 difok=3

           password required pam_unix.so md5 use_authtok

           第一行是 pam_cracklib模块和设置的几个模块参数

           第二行是 pam_unix模块,MD5表示采用MD5加密

           pam_cracklib可以记录用户使用的历史密码,并且不允许用户重复使用旧的密码,实际上存储用户旧密码的是通过pam_unix模块实现的。


          第一步是建立一个空文件用来存储旧密码/etc/security/opasswd,如果你没有建立文件却使用了历史密码记录功能的话,所有的密码更新都会失败,因为pam_unix模块会报错。

         opasswd就像/etc/shadow文件,因为他记录用户密码的哈希

         touch /etc/security/opasswd

         chown root:root /etc/security/opasswd

         chmod 600 /etc/security/opasswd

          一旦建立了opasswd文件,就可以在pam_unix模块后面加上参数remember=N来开始记录旧密码,remember参数记录你想记录多少旧密码,他的最大值是400,如果你设置的值超过400会当做400来对待,例如:

         password required pam_cracklib.so retry=3 minlen=12 difok=4

         password required pam_unix.so md5 remember=12 use_authtok

         opasswd文件内容格式如下:

         hal:1000::,,...,

         以‘:’分割,第一列是用户名,第二列是用户ID,第三列是目前记录了该用户多少个旧密码,hashN是每次密码的MD5值,opasswd在某些系统安装PAM模块时会自动建立。

        密码字典检查

               pam_cracklib 也可以检查用户设置的密码是不是违反系统内部的密码字典,在Debian系统中pam_cracklib的密码字典在/var/cache/cracklib目录下,而且每天晚上update-cracklib脚本会自动的rebuild密码字典。

          /etc/login.defs 文件设置密码过期时间等一系列参数,注意login.defs中设置的参数只有是用系统的useradd程序新建的一个用户时才会有login.defs中设置的属性,如果是用其他机器新建的用户,则没有以上属性,不过可以试用chage命令手动添加相关属性。

        chage参数如下:

-m 密码可更改的最小天数。 为零时代表任何时候都可以更改密码。

        -M 密码保持有效的最大天数。

        -W 用户密码到期前,提前收到警告信息的天数。

        -E 帐号到期的日期。过了这天,此帐号将不可用。

        -d 上一次更改的日期

        -i 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。

        -l 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。


4.pam_deny认证模块
所属类型:account, session, auth,password
功能描述:该模块仅仅返回一个错误。用来拒绝用户访问。通常该模块被用来作为缺省的验证规则。
可带参数:无
配置实例: 请参考/etc/pam.d/system-auth文件


5.pam_env认证模块

所属类型: auth
功能描述:该模块可以用来设置任意的环境变量,缺省的,该模块的配置文件是/etc/security/pam_env.conf,可以使用conffile参数指定自定义的配置文件。
配置文件说明:该配置文件每一行(一个条目)的语法如下: 变量名 [DEFAULT=[值]] [OVERRIDE=[值]] 选项DEFAULT说明这是一个缺省值;OVERRIDE则说明可以覆盖缺省值。在该配置文件中,可以使用${变量名}的形式应用变量。除此之外,该模块还可以从/etc/environment文件中读入形如“变量名=值”的环境变量,当然该文件也可以用readenv参数自己指定。需要注意的是,该文件的读入的值,将覆盖conffile文件中的缺省值。
可带参数: debug:将调试信息写入日志 conffile=filename:指定自定义的配置文件; readenv=filename:指定自定义包含“变量名=值”形式的环境变量配置文件; readenv=1/0:设置是否从readenv中读入环境变量,缺省是1,也即读入。
配置实例: 请参考/etc/pam.d/system-auth文件


6.pam_filter认证模块
所属类型:account, session, auth,password
功能描述:该模块提供对用户和应用程序交互内容的访问控制功能,目前仅仅具有大小写转换功能。该模块还有待完善。


7.pam_ftp认证模块
所属类型:auth
功能描述:该模块提供匿名ftp用户认证机制。
可带参数: debug:将调试信息写入日志 users=xxx,yyy:指定采用该模块进行认证的用户名,缺省为ftp和anonymous,可以用逗号进行分割;


8.pam_group认证模块
所属类型:auth
功能描述:该模块没有提供用户认证,而仅仅是授予该用户指定组的组权限。其缺省的配置文件为/etc/security/groups.conf。


9.pam_issue认证模块
所属类型:auth
功能描述:该模块在用户登录时,将/etc/issue文件的内容打印出来。
可带参数: issue=filename:指定其他配置文件,而不是缺省的/etc/issue. noesc:不对配置文件中的转移字符进行解释。
配置文件说明: 配置文件中可以使用形如x的转移字符来实现特定的功能。可以识别的转移字符有: d:打印当前日期 s:打印操作系统名称 l:打印当前tty名称 m:打印CPU类型(i686、sparc、powerpc等) :打印主机名 o:打印域名
:打印内核版本号 :打印当前系统时间 u:打印系统当前在线用户数 U:同u,但是在用户数后有users字样 v:打印系统安装的日期
配置文件实例: $ more /etc/issue
Welcome to
Time: d User online: U


10.pam_lastlog认证模块
所属类型:auth
功能描述:该模块在用户登录时,打印最后登录系统的信息(在/var/log/lastlog中),通常已经有其他程序在作这个工作了,所以没有必要使用该模块。


11.pam_limits认证模块
所属类型:session
功能描述:该模块限制用户会话过程中系统资源的使用率。缺省的,该模块的配置文件是/etc/security/limits.conf,可以使用conf参数指定自定义的配置文件。
可带参数: issue=filename:指定其他配置文件,而不是缺省的/etc/issue. noesc:不对配置文件中的转移字符进行解释。
配置文件说明: debug:将调试信息写入日志 conf=filename:指定配置文件
配置文件说明:该配置文件每一行(一个条目)的语法如下:
在这里 可以是 用户名 用户组名,采用@group的语法 通配符*,表示任何 可以是 soft-表示软限制,可以超过该限制 hard-表示硬限制,有root设定,内核执行,不可以超过该限制 可以是 core-core文件大小 (KB) data-最大数据大小(KB) fsize-最大文件大小(KB) memlock-最大可用内存空间(KB) nofile-最大可以打开的文件数量 rss-最大可驻留空间(KB) stack-最大堆栈空间(KB) cpu-最大CPU使用时间(MIN) nproc-最大运行进程数 as-地址空间限制 maxlogins-某一用户可以登录到系统的最多次数 locks-最大锁定文件数目 需要注意的是,如果无限制可以使用”-”号,并且针对用户限制的优先级要比针对组的 优先级高。
配置文件实例:

* soft core 0        

* hard rss 10000

@student hard nproc 20

@faculty soft nproc 20

@faculty hard nproc 50


12.pam_listfile认证模块
所属类型:auth
功能描述:该模块提供根据某种规则来对用户进行访问控制的功能。通常把访问控制规则放在一个文件中,可以用file参数指定该文件。使用pam_listfile.so模块配置的格式分为五个部分:分别是item、sense、file、onerr以及apply。 其中:

item=[tty|user|rhost|ruser|group|shell]:定义了对哪些列出的目标或者条件采用规则,显然,这里可以指定多种不同的条件。

onerr=succeed|fail:定义了当出现错误(比如无法打开配置文件)时的缺省返回值。

sense=allow|deny:定义了当在配置文件中找到符合条件的项目时的控制方式。如果没有找到符合条件的项目,则一般验证都会通过。

file=filename:用于指定配置文件的全路径名称。

apply=user|@group:定义规则适用的用户类型(用户或者组)。

而至于file文件的写法就简单了,每行一个用户或者组名称即可。

所以,当我们需要对其它服务进行类似的访问控制的时候,就可以照葫芦画瓢。例如现在需要在SSH服务器上对ssh客户端实现基于用户的访问控制,目的是不允许admin从通过ssh登录。

针对这种需求只需要更改/etc/pam.d/sshd文件,并在该文件中添加一行(添加到第一行):

双击代码全选1
  • 本稿件为独家原创稿件,版权所有,引用或转载请注明出处。
  • 文章出处:
阅读(379) | 评论(0) | 转发(0) |
0

上一篇:Linux tail 命令详解

下一篇:proc 的意义

给主人留下些什么吧!~~