一.Linux身份验证

1.用户与系统管理员

    >用户分为系统管理员与普通管理用户两大类。

           >每个用户在系统中都有唯一的用户名,是用户使用系统的凭证。

    >系统管理员(System Manager) 又称之为超级用户,账号为"root",也叫根用户,拥有系统操作最高行使权。

        >在系统中具有最高权限,主要负责系统管理工作。

    >普通用户的账号可以随意取,通常的要求是不能以数字和下划线作为第一个字符。

    >每个用户除了有个人用户身份外,多个用户可以组成用户组。

        >同一个用户组的用户都享有组的权限

    >无论是用户还是用户组,Linux系统都会分配一个唯一的识别码。

        >用户识别码为UserID,用户组识别码为GroupID。

2.进入与退出系统

    >用户通过用户帐号和用户密码进入操作系统。
    >进入系统有两种方式远程登录进入和本地直接进入。

    >无论哪种方式当Linux准备好可以允许登入时用户屏幕显示系统提示符“login:”此时用户在“login”后输入用户帐号。

    >在用户正确输入用户帐号后出现“passwd:”此时用户在“passwd:”后输入用户密码。

    >如果用户帐号和用户密码准确无误则成功进入系统出现系统提示符“$”或“%”
    >如果是超级用户则出现系统提示符“#”

    >Linux不会给出候选用户,以免别人猜测你的密码。

    >Linux不会显示密码输入的反馈,这样其他人看不到你输入了多少位的密码。

    >处于安全考虑,如果你是远程连接,不正确的登录次数太多,大部分系统会断开连接。

    >用户名和密码必须区分大小写。

    >在Linux系统中每支持一个用户远程登录会消耗系统1MB左右的内存,

    >用户退出系统可以将消耗的内存归还,还可以避免系统记帐日志继续记录,以及用户帐号被他人利用用     户文件遭到破坏等现象的发生。
    >退出系统的方法:
       > "exit"、"logout"或"Ctrl-D键"
       >用户退出系统后出现“login:”供用户再次进入系统使用。
       >注意exit、logout、Ctrl-D三种退出方式的区别是logout是用户这次使用环境注销exit和Ctrl-D是退出这次特定的Shell进程


/etc/passwd用户数据文件格式详解:
Linux用户安全及Linux PAM验证机制_用户名

/etc/passwd的影子文件/etc/shadow文件格式详解:

1.“登录名”是与/etc/passwd文件中的登录名相一致的用户账号
2.
“口令”字段存放的是加密后的用户口令字长度为13个字符。如果为空则对应用户没有口令登录时不需要口令,如果含有不属于集合{./0-9A-Za-z}中的字符则对应的用户不能登录。
3.“最后一次修改时间”表示的是从某个时刻起到用户最后一次修改口令时的天数。时间起点对不同的系统可能不一样。例如在Linux中这个时间起点是1970年1月1日。
4.“最小时间间隔”指的是两次修改口令之间所需的最小天数。
5.“最大时间间隔”指的是口令保持有效的最大天数。
6.“警告时间”字段表示的是从系统开始警告用户到用户密码正式失效之间的天数。
7.“不活动时间”表示的是用户没有登录活动但账号仍能保持有效的最大天数。
8.“失效时间”字段给出的是一个绝对的天数如果使用了这个字段那么就给出相应账号的生存期。期满后该账号就不再是一个合法的账号也就不能再用来登录了。


Linux PAM验证机制

        UNIX环境下的身份验证机制一直就是简单地把用户和他们在/etc/passwd文件里的配置项关联起来而已。很多鉴别功能模块都有一个缺陷实现鉴别功能的代码通常作为应用程序的一部分而编译。这就直接导致了一个问题如果发现所用算法存在某些缺陷或者想用另一种鉴别方法时,用户将不得不重写(修改或者替换)然后重新编译源程序。为了改善这些问题人们开始思考其他的方法。至此嵌入式认证模块(Pluggable Authentication Modules)应运而生了。PAM即(Pluggable Authentication-Modules)可插入式身份验证模块最初是由Sun公司发明的Sun把它作为一种验证用户身份的灵活方法。Linux-PAM是一组共享库使用这些模块系统管理者可以自由选择应用程序使用的验证机制。也就是说勿需重新编译应用程序就可以切换应用程序使用的验证机制。甚至不必触动应用程序就可以完全升级系统使用的验证机制。

Linux-PAM的分层体系结构:

Linux用户安全及Linux PAM验证机制_管理员_02

第一层模块层
模块层处于整个结构的最底层它向上为接口层提供
鉴别模块    auth         负责认证和授权
帐户管理    account    跟认证无关的账号检测机制
会话管理    session     建立之会之前或之后需要做一些侦测机制
口令管理    password 用户在修改密码时要完成的检测
第二层应用接口层
应用接口层位于PAM 结构的中间部分它向上为应用程序屏蔽了用户鉴别等过程的具体细节向下调用模块层中的具体模块所提供的特定服务。
一类是用于调用下层特定模块的接口这类接口与底层的模块相对应
鉴别类接口pam_authenticate用于鉴别用户pam_setcred用于修改用户的秘密信息。
帐号类接口pam_acct_mgmt检查受鉴别的用户所持帐户是否有权登陆系统以及该帐户是否已过期等。
会话类接口包括用于会话管理和记帐的pam_open_session和pam_close_session函数。
口令类接口包括用于修改用户口令的pam_chauthtok
第二类接口不与底层模块一一对应它们的作用是对底层模块提供支持及应用程序与模块之间的通信等。
管理性接口如事务从pam_start()开始结束于pam_end()函数。
应用程序与模块间的通讯接口:如:pam_putenv()
用户与模块间的通讯接:如:pam_start()。
模块间通讯接口尽管各模块是独立的,但是他们仍然能够通过pam_get_item()
读写模块状态信息的接口:如:接口pam_get_data()。


PAM配置文件:

>PAM库由本地的系统配置文件:

   >/etc/pam.d/目录下的一些配置文件来设置

>PAM文档的最详细的本地资料:

    >/usr/share/doc/pam-1.1.1/txts/    详细的模块说明

    ># /usr/share/doc/pam-1.1.1/html/ PAM相关的说明


应用程序使用pam
对于需要使用PAM的程序需要在/etc/pam.d目录中为其设置配置文件。比如系统ftp服务vsftpd,它的PAM配置文件是:

/etc/pam.d/vsftpd

Linux用户安全及Linux PAM验证机制_管理员_03


配置文件的语法
service-name module-type control-flag module-path arguments
Service-name为入口分配的服务名。常是给定应用程序的会话名。如vsftpd。
modle-type四种类型的模块auth account   session password
control-flag

required requisite sufficient optional
1、required

    当使用此控制标志时当验证失败时仍然会继续进行其下的验证过程,它会返回一个错误信息,但是由于它不会由于验证失败而停止继续验证过程;因此用户不会知道是哪个规则项验证失败。
2、requisite

    此控制标志与required的验证方式大体相似但只要某个规则项验证失败则立即结束整个验证过程并返回错误信息使用此关键字可以防止一些通过暴力猜解密码的攻击但是由于它会返回信息给用户它也有可能将系统的用户结构信息透露给攻击者配置
3、sufficient

    只要有此控制标志的一个规则项验证成功那么PAM构架将会立即终止其后所有的验证并且不论其前面的required标志的项没有成功验证它依然将被忽略然后验证通过。
4、optional

    表明对验证的成功或失败都是可有可无的所有的都会被忽略。(通常用于session类型)复杂的控制标志能够让管理员可以指定在验证过程中发生某种事件时可
以执行的动作。这些控制标志用方括号包括起来并由一系列的value=action 所构成每个值之间用空格分开。
第四列是Module-arguments

    用来为引用的模块指定特殊的选项多个选项之间可以通过空格隔开还可在选项中使用""来输入嵌套的命令或字串当选项超过一行时用“\”符号连接下一行。


常见PAM模块

pam_securetty该模块用来控制root用户只可以从包含在/etc/securetty文件中的终端登录系统。

pam_shell认证模块如果用户的shell在/etc/shells中列出则允许用户进行验证如果/etc/passwd中没有指定shell则缺省使用/bin/sh。


综合案例应用:

1./etc/pam.d/sshd限制用户hadoop使用172.16.0.1的登陆

配置过程:
# vim /etc/pam.d/login 
account    required     pam_access.so accessfile=/etc/system_login.conf
# vim /etc/system_login.conf
-:hadoop:172.16.0.1

2./etc/pam.d/suLinux系统下禁止非WHEEL用户使用su命令

配置过程:
方法1:wheel组也可指定为其它组,编辑/etc/pam.d/su添加如下两行
# vim /etc/pam.d/su
auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=wheel

方法2:编辑/etc/pam.d/su将如下行#符号去掉
# vim /etc/pam.d/su
auth required pam_wheel.so use_uid #去掉注释启用
# echo "SU_WHEEL_ONLY yes" >> /etc/login.defs #追加至最后一行

3./etc/pam.d/sshd禁止所有用户登陆系统

配置过程:
# vim /etc/pam.d/sshd
auth       required    pam_access.so    accessfile=/etc/sshd_login.conf
# vim /etc/sshd_login.conf 
-:ALL:ALL

4.综合应用案例实现:

(1)只允许root从本地登录
(2)并且只允许samlee用户从172.16.100.8远程登录
(3)其他用户不允许登录本系统

配置过程:
# vim /etc/pam.d/sshd
auth       required    pam_access.so    accessfile=/etc/sshd_login.conf
# vim /etc/sshd_login.conf 
+:root:LOCAL
+:samlee:172.16.100.8
-:ALL:ALL

以上是Linux用户安全及Linux PAM验证机制所有内容