linux account 信息,鸟哥的 Linux 私房菜 -- Linux 账号管理

谈完了配置文件的语法后,现在让我们来查阅一下 CentOS 5.x 提供的 PAM 默认文件的内容是啥吧!

由于我们常常需要透过各种方式登陆 (login) 系统,因此就来看看登陆所需要的 PAM 流程为何:

[root@www ~]# cat /etc/pam.d/login

#%PAM-1.0

auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so

auth include system-auth

account required pam_nologin.so

account include system-auth

password include system-auth

# pam_selinux.so close should be the first session rule

session required pam_selinux.so close

session include system-auth

session required pam_loginuid.so

session optional pam_console.so

# pam_selinux.so open should only be followed by sessions...

session required pam_selinux.so open

session optional pam_keyinit.so force revoke

# 我们可以看到,其实 login 也呼叫多次的 system-auth ,所以底下列出该配置文件

[root@www ~]# cat /etc/pam.d/system-auth

#%PAM-1.0

# This file is auto-generated.

# User changes will be destroyed the next time authconfig is run.

auth required pam_env.so

auth sufficient pam_unix.so nullok try_first_pass

auth requisite pam_succeed_if.so uid >= 500 quiet

auth required pam_deny.so

account required pam_unix.so

account sufficient pam_succeed_if.so uid < 500 quiet

account required pam_permit.so

password requisite pam_cracklib.so try_first_pass retry=3

password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok

password required pam_deny.so

session optional pam_keyinit.so revoke

session required pam_limits.so

session [success=1 default=ignore] pam_succeed_if.so service in crond quiet \

use_uid

session required pam_unix.so

上面这个表格当中使用到非常多的 PAM 模块,每个模块的功能都不太相同,详细的模块情报可以在你的系统中找到:

/etc/pam.d/*:每个程序个别的 PAM 配置文件;

/lib/security/*:PAM 模块文件的实际放置目录;

/etc/security/*:其他 PAM 环境的配置文件;

/usr/share/doc/pam-*/:详细的 PAM 说明文件。

例如鸟哥使用未 update 过的 CentOS 5.2 ,pam_nologin 说明文件档在:

/usr/share/doc/pam-0.99.6.2/txts/README.pam_nologin。你可以自行查阅一下该模块的功能。

鸟哥这里仅简单介绍几个较常使用的模块,详细的信息还得要您努力查阅参考书呢! ^_^

pam_securetty.so:

限制系统管理员 (root) 只能够从安全的 (secure) 终端机登陆;那什么是终端机?例如

tty1, tty2 等就是传统的终端机装置名称。那么安全的终端机配置呢?

就写在 /etc/securetty 这个文件中。你可以查阅一下该文件,

就知道为什么 root 可以从 tty1~tty7 登陆,但却无法透过 telnet 登陆 Linux 主机了!

pam_nologin.so:

这个模块可以限制一般用户是否能够登陆主机之用。当 /etc/nologin

这个文件存在时,则所有一般使用者均无法再登陆系统了!若 /etc/nologin 存在,则一般使用者在登陆时,

在他们的终端机上会将该文件的内容显示出来!所以,正常的情况下,这个文件应该是不能存在系统中的。

但这个模块对 root 以及已经登陆系统中的一般账号并没有影响。

pam_selinux.so:

SELinux 是个针对程序来进行细部管理权限的功能,SELinux 这玩意儿我们会在第十七章的时候再来详细谈论。由于 SELinux

会影响到用户运行程序的权限,因此我们利用 PAM 模块,将 SELinux 暂时关闭,等到验证通过后,

再予以启动!

pam_console.so:

当系统出现某些问题,或者是某些时刻你需要使用特殊的终端接口 (例如 RS232 之类的终端联机设备) 登陆主机时,

这个模块可以帮助处理一些文件权限的问题,让使用者可以透过特殊终端接口 (console) 顺利的登陆系统。

pam_loginuid.so:

我们知道系统账号与一般账号的 UID 是不同的!一般账号 UID 均大于 500 才合理。

因此,为了验证使用者的 UID 真的是我们所需要的数值,可以使用这个模块来进行规范!

pam_env.so:

用来配置环境变量的一个模块,如果你有需要额外的环境变量配置,可以参考

/etc/security/pam_env.conf 这个文件的详细说明。

pam_unix.so:

这是个很复杂且重要的模块,这个模块可以用在验证阶段的认证功能,可以用在授权阶段的账号许可证管理,

可以用在会议阶段的登录文件记录等,甚至也可以用在口令升级阶段的检验!非常丰富的功能!

这个模块在早期使用得相当频繁喔!

pam_cracklib.so:

可以用来检验口令的强度!包括口令是否在字典中,口令输入几次都失败就断掉此次联机等功能,都是这模块提供的!

这玩意儿很重要!

pam_limits.so:

还记得我们在十一章谈到的 ulimit 吗?

其实那就是这个模块提供的能力!还有更多细部的配置可以参考:

/etc/security/limits.conf 内的说明。

了解了这些模块的大致功能后,言归正传,讨论一下 login 的 PAM 验证机制流程是这样的:

验证阶段 (auth):首先,(a)会先经过 pam_securetty.so 判断,如果使用者是 root 时,则会参考 /etc/securetty 的配置;

接下来(b)经过 pam_env.so 配置额外的环境变量;再(c)透过 pam_unix.so 检验口令,若通过则回报 login

程序;若不通过则(d)继续往下以 pam_succeed_if.so 判断 UID 是否大于 500 ,若小于 500则回报失败,否则再往下

(e)以 pam_deny.so 拒绝联机。

授权阶段 (account):(a)先以 pam_nologin.so 判断 /etc/nologin 是否存在,若存在则不许一般使用者登陆;

(b)接下来以 pam_unix 进行账号管理,再以 (c) pam_succeed_if.so 判断 UID 是否小于 500 ,若小于 500

则不记录登录信息。(d)最后以 pam_permit.so 允许该账号登陆。

口令阶段 (password):(a)先以 pam_cracklib.so 配置口令仅能尝试错误 3 次;(b)接下来以

pam_unix.so 透过 md5, shadow 等功能进行口令检验,若通过则回报 login 程序,若不通过则 (c)以 pam_deny.so

拒绝登陆。

会议阶段 (session):(a)先以 pam_selinux.so 暂时关闭 SELinux;(b)使用 pam_limits.so

配置好用户能够操作的系统资源; (c)登陆成功后开始记录相关信息在登录文件中; (d)以 pam_loginuid.so

规范不同的 UID 权限;(e)开启 pam_selinux.so 的功能。

总之,就是依据验证类别 (type) 来看,然后先由 login 的配置值去查阅,如果出现『 include system-auth 』

就转到 system-auth 文件中的相同类别,去取得额外的验证流程就是了。然后再到下一个验证类别,最终将所有的验证跑完!

就结束这次的 PAM 验证啦!

经过这样的验证流程,现在你知道为啥 /etc/nologin 存在会有问题,也会知道为何你使用一些远程联机机制时,

老是无法使用 root 登陆的问题了吧?没错!这都是 PAM 模块提供的功能啦!

例题:

为什么 root 无法以 telnet 直接登陆系统,但是却能够使用 ssh 直接登陆?

答:

一般来说, telnet 会引用 login 的 PAM 模块,而 login 的验证阶段会有 /etc/securetty 的限制!

由于远程联机属于 pts/n (n 为数字) 的动态终端机接口装置名称,并没有写入到 /etc/securetty ,

因此 root 无法以 telnet 登陆远程主机。至于 ssh 使用的是 /etc/pam.d/sshd 这个模块,

你可以查阅一下该模块,由于该模块的验证阶段并没有加入 pam_securetty ,因此就没有 /etc/securetty

的限制!故可以从远程直接联机到服务器端。

另外,关于 telnet 与 ssh 的细部说明,请参考鸟哥的 Linux 私房菜服务器篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值