您的位置:首页 > 运维架构 > Shell

22. 用户身份切换&用户的特殊 shell与 PAM模块

2017-02-15 23:48 477 查看
su [-lm] [-c 命令] [username]
参数:
- :若单纯使用 - ,如 "su -",代表使用 login-shell 的变量文件读取方式来登录系统;若用户名没加,则表示 root 身份
-l : 与 - 类似,但后面需要加欲切换的用户账号,也是login-shell方式
-m : -m 与 -p 是一样的,表示使用目前的环境设置,而不读取新用户的配置文件
-c : 仅进行一次命令,所以 -c 后面可以加上命令








sudo 可以让你以其他身份只想命令(通常是 root),仅/etc/sudoers 内的用户才能执行 sudo 这个命令。

sudo [-b] [-u 新用户账号]
参数:
-b:将后续的命令让系统自行执行,而不与目前的shell产生影响
-u:后面可以接欲切换的用户,若无此项则代表切换身份为root




sudo 默认仅有 root 能使用,sudo 执行流程:

1. 当用户执行sudo 时,系统于/etc/sudoers 文件中查找该用户是否有执行 sudo 的权限
2. 若用户有执行sudo 的权限后,便让用户输入自己的密码来确认
3. 若密码输入成功,便开始sudo 后面的命令
4. 若欲切换的身份与执行者身份相同,也不需要输入密码


visudo 和 /etc/sudoers




账号名称 登陆者的来源主机名=(可切换的身份)  可执行的命令
root    ALL = (ALL)                   ALL<==这是默认值

1.用户账号:系统的哪个账号可以使用sudo 命令,默认为root
2.登陆者的来源主机名:这个账号由哪台主机连接到本Linux 主机,意思是这个账号可能由哪一台网络主机连接过来,这个设置值可以指定客户端机器。默认root可来自任何一台网络主机。
3.可切换的身份:这个账号可以切换成什么身份来执行后续的命令,默认root可以切换为任何人
4.可执行命令:这个命令请务必使用绝对路径编写




myuser1   ALL=(root)  /usr/bin/passwd  //要使用绝对路径
!/use/bin/passwd  // !不可执行的意思




特殊的 shell ,/sbin/nologn

所谓的无法登陆是指,这个用户无法使用bash 或者其他shell来登录系统


PAM 模块

PAM(Pluggable Authentication Modules 嵌入式模块),可以说是一套应用程序编程接口(API),
它提供了一连串的验证机制,只要用户将严重阶段的需求告知 PAM 后,PAM 就能够汇报用户验证的结果(成功或者失败)。


PAM 模块设置语法
PAM通过一个与程序相同文件名的配置文件来进行一连串的认证需求分析。
当你执行 passwd 时,流程如下:

1. 用户开始执行/usr/bin/passwd 这程序,并输入密码
2. passwd 调用 PAM 模块进行验证
3. PAM 模块会到 /etc/pam.d 中寻找与程序(passwd)同名的配置文件
4. 依据/etc/pam.d/passwd 内的设置,引用相关的PAM模块逐步进行验证分析
5. 将验证结果回传给 passwd 程序
6. passwd 程序会根据PAM回传的信息决定下一个操作




include 表示调用后面的文件来作为这个类别的验证,所以,上述的每一行都要重复调用
/etc/pam.d/system-auth 那个文件来验证。

验证类型(Type):
auth:
authentication(认证)的缩写,所以这种类型主要用来检验用户的身份验证,
这种类型通常需要密码来检验的,所以后续接的模块是用来检验用户的身份。

account:
账号则大部分是在进行authorization(授权),这种类型则主要在检验用户是否具有正确的权限,
举例来说,当你使用一个过期的密码来登录时,就无法登陆了

session:
session 是会话期间的意思,所以session管理的就是用户在这次登录(或者使用这个命令)期间PAM所给予的环境设置。
在这个类型通常用于记录用户登录与注销时间信息。例如,如果你经常使用su或者sudo命令,
那么应该可以在/var/log/secure 里面发现很多关于PAM说明,而记载的数据是"session open,session close"

passwd :
passwd 就是密码。所以这种类型主要用于提供验证的修订工作,举例来说,就是修改密码

这4个验证类型通常是有顺序的。不过也有例外就是了。会有顺序的原因是,我们总是得要先验证身份(auth)后,
系统才能够通过用户的身份给予适当的授权 与权限设置(account),而且登录与注销期间的环境才需要设置,
也才需要记录登录与注销的信息(session)。如果要在运行期间修改密码,才给予passwd的类型。


第二个字段:验证的控制标志(control flag):即验证通过的标准

required :
此验证成功则带有success标志,若失败则带有 failure的标志,但不论成功或者失败都会继续后续的验证流程。
由于后续的验证流程可以继续进行,因此相当有利于数据的登录日志,这也是 PAM 最经常使用 required 的原因。

requisite:
若验证失败立刻回报原程序 failure 标志,并终止后续的验证流程。若验证成功则带有 success
的标志并继续后续的验证流程。这个项目与 required 最大的区别就在于失败的时候还要不要继续验证下去。
由于 requisite 是失败就终止,因此失败时所产生的 PAM 信息就无法通过后续的模块来记录了。

sufficient:
若验证成功立刻回传 success 给原程序,并终止后续的验证流程。若验证失败则带有 failure
标志并继续后续的验证流程。与 requisite 相反。

optional:
这个模块控件目的大多是在显示信息而已,并不是在验证方面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  class