linux 账户锁与解锁
,sudo passwd -l user
锁住user帐号,su 已经不能切换到user下。
2,sudo passwd -u user
解锁user帐号,su可以切换到user下。
3,如果不小心把root锁住了,可以通过下面的指令获得root权限
sudo -s -H
Password: <输入root密码>
设置Linux用户连续N次登陆失败时,自动锁定X分钟(pam_tally)
http://www.edward-han.com/166.html
[RHCE笔记3-6-1]Auth Services PAM
PAM
基于Pluggable Authentication Modules(可插入验证模块,简称PAM)的验证机制,可以系统特定应用程序的使用限制于root账户。不同的Module可以实现系统管理员按照用户、密码或者登入位置设置访问控制策略。
PAM
所有的认证函数库存放于/lib/security/pam_*.so,并由/etc/pam.d/目录下对应的文件进行调用。在验证请求时,应用程序通
过libpam函数库来提供服务。具体使用哪些PAM函数库进行验证,则由/etc/pam.d/目录下对应的设置文件决定。libpam
提供函数共享服务,而且可以动态载入。
1 PAM工作机制
/lib/security
目录下的每一个认证模块都会返回pass或者fail结果,部分程序使用/etc/security目录下的设置文件决定认证方式。应用程序调用PAM模
块认证的配置,存放于/etc/pam.d,文件名与应用程序名对应,文件中的每一行都会返回一个成验证功还是失败的控制标志,以决定用户是否拥有访问权
限。
2 PAM验证类型
* auth 验证使用者身份,提示输入账号和密码
* account 基于用户表、时间或者密码有效期来决定是否允许访问
* password 禁止用户反复尝试登录,在变更密码时进行密码复杂性控制
* session 进行日志记录,或者限制用户登录的次数
libpam函数库会可以调用以上一种服务或者全部。
3 PAM验证控制类型(Control Values)
验证控制类型也可以称做Control Flags,用于PAM验证类型的返回结果。
* required 验证失败时仍然继续,但返回Fail(用户不会知道哪里失败)
* requisite 验证失败则立即结束整个验证过程,返回Fail
* sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续
* optional 无论验证结果如何,均不会影响(通常用于session类型)
验证结果对照表
┌──────────┬──────┬─────────────┬────────────────┐
│ │Result│Keep testing?│ Affect │
├──────────┼──────┼─────────────┼────────────────┤
│ │Pass │ Y │Define by system│
│Required │Fail │ Y │Fail │
├──────────┼──────┼─────────────┼────────────────┤
│Requisite │Pass │ Y │Define by system│
│ │Fail │ N │Fail │
├──────────┼──────┼─────────────┼────────────────┤
│Sufficient│Pass │ N │Define by system│
│ │Fail │ Y │Ignore │
└──────────┴──────┴─────────────┴────────────────┘
验证示例1
┌─────┬────────┬───────┬─────┬─────┬─────┐
│ │ │ │user1│user2│user3│
├─────┼────────┼───────┼─────┼─────┼─────┤
│Auth │Required│Module1│Pass │Fail │Pass │
├─────┼────────┼───────┼─────┼─────┼─────┤
│Auth │Required│Module2│Pass │Pass │Fail │
├─────┼────────┼───────┼─────┼─────┼─────┤
│Auth │Required│Module3│Pass │Pass │Fail │
├─────┴────────┴───────┼─────┼─────┼─────┤
│ Result │Pass │Fail │Fail │
└──────────────────────┴─────┴─────┴─────┘
验证示例2
┌─────┬──────────┬───────┬─────┬─────┬─────┐
│ │ │ │user1│user2│user3│
├─────┼──────────┼───────┼─────┼─────┼─────┤
│Auth │Required │Module1│Pass │Fail │Pass │
├─────┼──────────┼───────┼─────┼─────┼─────┤
│Auth │Sufficient│Module2│Pass │Pass │Fail │
├─────┼──────────┼───────┼─────┼─────┼─────┤
│Auth │Required │Module3│ N/A │ N/A │Pass │
├─────┴──────────┴───────┼─────┼─────┼─────┤
│ Result │ T │ F │ T │
└────────────────────────┴─────┴─────┴─────┘
4 /etc/pam.d目录中的配置文件
每一个配置文件均有四栏:第一栏验证类型,第二栏验证控制标准,第三栏调用的PAM模块,第四栏为使用的参数。
module_type control_flag module_location arguments
每一行记录均是一个阶段性的测试。
[root@wardking ~]# 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
auth与account调用的模块直接影响到用户是否可以执行程序。
password是在用户更改密码时使用。
session用于记录用户验证成功以后的操作记录。
5 pam_stack特殊模块
当有多个应用程序需要使用相同的验证模块时,可以编辑一个pam设置文件,定义共同调用的模块,存储于/etc/pam.d目录中,供应用程序调用。例如system-auth设置文件,可以供不同的应用程序调用,如果对其进行修改,可以变更系统验证策略。
6 pam_unix模块
可
以调用传统的NSS系统,即libnss函数库。可以用于PAM的四种验证方式,使用auth方式可以取得用户的密码,使用accont方式检查用户的密
码是否已经过期,,使用password方式可以检查用户在修改密码时进行控制,使用session方式记录用户登录登出日志。
7 网络验证
可以通过网络登录方式来验证用户
* pam_krb5(Kerberos V tickets)
* pam_ldap(LDAP binds)
* pam_smb_auth(old SMB authentication)
* pam_winbind(SMB throuth winbind)
某些名称服务也可以通过pam_unix调用libnss函数库中的模块进行验证(NIS, Some LDAP configurations),而不一定使用以上的四个模块
8 认证模块
pam_security模块只会对root有影响。当root账户登录时,pam_security会参考/etc/securetty目录中的console列表,以决定root是否可以登录,避免用户从不安全的终端登录。
pam_nologin模块会确认/etc/nologin文件是否存在,如果存在,普通用户则会验证失败,只允许root用户登录。
pam_listfile模块会确认要求登录的用户账号与允许的账号名单是否冲突,必须建立一个允许登录或者拒绝登录的名单。
auth required pam_listfile item=user sense=deny file=/etc/vsftpd/ftpusers nerr=succeed
9 增强用户密码安全性
pam_unix有两个参数,可以增强用户密码安全性
* pam_unix MD5 passwords 使用MD5编码进行加密
* pam_unix shadow passwords 将加密后的密码存放于/etc/shadow文件中,并且限制普通用户访问,而且限制用户密码有效期
还有其它的模块可以起到类似作用,比如pam_krb5
10 密码安全性原则
可以定义普通用户设置密码时必须遵行一定的策略。
* password history记录用户曾经使用过的密码
pam_unix with remember=N (记录用户使用过的前N个密码,并且禁止再次使用这些密码)
* pasword length 密码长度及复杂性
pam_cracklib模块规定用户必须使用大小写字母、数字、特殊符号做为密码,而且不能是字典中的单词
pam_passwdqc模块与cracklib类似,只是不检查字典中的单词
* failed login monitoring 监控用户登录失败的次数
pam_taily登录失败次数过多,则锁定账号
11 pam_limit
pam_limit 限制用户可以使用的系统资源,调用 /etc/security/limits.conf文件,限制用户使用的内存、可以启用多少线程
#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4
可以使用ulimit覆盖soft设置项,但是仍然受限于hard
12 pam_console
pam_console模块:当用户登录到console后,将拥有部分特别权限。这些权限在/etc/security/console.apps目录中定义。
例如:用户登录后拥有重新启动计算机的权限
[root@wardking ~]# cat /etc/security/console.apps/reboot
FALLBACK=true
也可以用在auth验证类型中,用户在本地成功登录后,就会拒绝其它远程登录请求。
13 其它程序调用PAM
除用户登录验证以外,在普通用户使用系统管理工具时,也需要提供验证,例如su, reboot, system-*工具等。
pam_rootok模块用来确认用户是否是root身份
pam_timestamp模块用于记录用户执行sudo的时间间隔,如果在5分钟之内验证成功,则直接通过验证,而不再需要输入密码
pam_xauth模块用于将验证的临时文件转发给其它程序
14 实例分析
[root@wardking ~]# cd /etc/pam.d
[root@wardking pam.d]# cat config-util
#%PAM-1.0
auth sufficient pam_rootok.so
auth sufficient pam_timestamp.so
auth include system-auth
account required pam_permit.so
session required pam_permit.so
session optional pam_xauth.so
session optional pam_timestamp.so
/etc/pam.d/config-util是一个pam_stack类型的特殊模块,提供给system-config-*等多个应用程序共同调用。
auth sufficient pam_rootok.so
这一条命令将检查用户的身份,调用pam_rootok.so模块,如果被验证的用户是root,则返回Pass。如果不是root用户,则返回Fail。由于此条命令使用sufficient控制标志,即使验证失败也将执行后续命令。
auth sufficient pam_timestamp.so
如
果第一条命令验证失败,则可以断定当前被验证用户是普通用户。因此在第二条命令中使用pam_timestamp.so模块,检查该用户是否在5
分钟之内成功运行了sudo命令,如果是返回Pass,否则返回Fail。这条命令同样使用了sufficient控制标志,因此在验证失败时仍将执行后
续命令。
auth include system-auth
第三条命令使用pam_stack.so模块,调用当前目录下的system-auth配置文件。system-auth定义了较多的PAM命令语句,其主要作用是提示普通用户输入root账号的密码。
account required pam_permit.so
第四条命令以account类型调用pam_permit.so模块,基于当前账户的有效性(账户是否禁用或者过期)来允许或者拒绝访问。由于该条命令以required控制标志执行,如果验证结果仍然Fail,则整个过程验证失败。
最后三条session命令,将对整个验证过程进行日志记录,写入到/var/log/secure中。
15 故障检测
当
系统验证出现问题时,首先应当检查/var/log/messages或者/var/log/secure中的输出信息,根据这些信息判断用户账号的有效
性。如果是因为PAM验证故障,而引起root也无法登录,只能使用single user或者rescue模式进行排错。
linux 账户锁与解锁的更多相关文章
- 在Linux下锁住键盘和鼠标而不锁屏
假如在你正看着屏幕上的某些重要的事情时,你不想让你的小猫或者小狗在你的键盘上行走,或者让你的孩子在键盘上瞎搞一气,那我建议你试试 xtrlock 这个工具. 假如在你正看着屏幕上的某些重要的事情时,你 ...
- Linux互斥锁、条件变量和信号量
Linux互斥锁.条件变量和信号量 来自http://kongweile.iteye.com/blog/1155490 http://www.cnblogs.com/qingxia/archive/ ...
- 调整Kali Linux的锁屏时间
调整Kali Linux的锁屏时间 锁屏是保护隐私的一种重要机制.当用户不操作电脑一段时间后,系统会进入锁屏状态.用户需要输入口令,才能重新进入系统.避免因为操作人员离开电脑后,被其他人员利用现有 ...
- oracle查询锁表解锁语句
--oracle查询锁表解锁语句--首先要用dba权限的用户登录,建议用system,然后直接看sql吧 --1. 如下语句 查询锁定的表: SELECT l.session_id sid, s.se ...
- linux RCU锁机制分析
openVswitch(OVS)源代码之linux RCU锁机制分析 分类: linux内核 | 标签: 云计算,openVswitch,linux内核,RCU锁机制 | 作者: yuzhih ...
- 服务器配置多版本CUDA、CUdnn(不同Linux账户使用不同CUDA、CUdnn版本)
一.由于实验室大家使用的CUDA.CUdnn不同,所以需要在同一台服务器安装多个版本,而且要不引起冲突,方法如下: 1.一般来说CUDA安装在 /usr/local 目录下(当然你可以通过“echo ...
- Linux内核锁与中断处理
Linux内核锁 在Linux内核里面,一般采用了如下几种锁的机制,来保证多线程的同步与互斥: (1)原子操作 atomic_t v: void atomic_set(atomic_t *v, int ...
- [Swift通天遁地]四、网络和线程-(1)线程的锁和解锁
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- 【shell脚本】通过位置变量创建Linux账户及密码===addUser.sh
通过位置变量创建Linux账户及密码 脚本内容 [root@VM_0_10_centos shellScript]# vi addUser.sh #!/bin/bash # 通过位置变量创建系统账户及 ...
随机推荐
- 百度面试题——top K算法
需求 从一亿个数据中,找出其中最小的10个数. 分析 最笨的方法就是将这一亿个数据,按从小到大进行排序,然后取前10个.这样的话,即使使用时间复杂度为nlogn的快排或堆排,由于元素会频繁的移动,效率 ...
- linux USB HOST之EHCI和OHCI【转】
转自:http://blog.csdn.net/ljzcom/article/details/8186914 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 2 关键数据结 ...
- linux内核分析笔记----中断和中断处理程序【转】
转自:http://www.cnblogs.com/hanyan225/archive/2011/07/17/2108609.html 中断还是中断,我讲了很多次的中断了,今天还是要讲中断,为啥呢?因 ...
- Vmware中安装和卸载Linux 16.04.3
1.先去这个链接 https://www.ubuntu.com/download ,下载ubuntu镜像,也就是下图的download选项 2.下载后到虚拟机里创建一个新的虚拟机,然后按照博客 htt ...
- 用java实现word转html
由于项目需要,要完成将上传的word文件转成html文件的功能.在网上搜了一下,大致有3种方法:1.用jacob实现 2.用poi实现 3.用openoffice实现. 从网上来看好像jacob用的人 ...
- 在 C# 中通过 P/Invoke 调用Win32 DLL
在 C# 中通过 P/Invoke 调用Win32 DLL 发布日期 : 1/13/2005 | 更新日期 : 1/13/2005 Jason Clark 下载本文的代码: NET0307.exe ( ...
- JavaScript变量、数据类型、函数
#转载请留言联系 说在前面: JavaScript 是一种弱类型语言,javascript的变量类型由它的值来决定. JavaScript语句的末尾用 ; 结束.空格没有特殊意义. 1.JavaScr ...
- idea打包jar的多种方式,用IDEA自带的打包形式,用IDEA自带的打包形式 用Maven插件maven-shade-plugin打包,用Maven插件maven-assembly-plugin打包
这里总结出用IDEA打包jar包的多种方式,以后的项目打包Jar包可以参考如下形式: 用IDEA自带的打包形式 用Maven插件maven-shade-plugin打包 用Maven插件maven-a ...
- brew安装mysql
1. 安装mysql5.7版本,不指定版本就默认安装最新的,目前最新是8 brew install mysql@5.7 2. 安装完进入/usr/local/Cellar/mysql@5.7目录,可以 ...
- Go语言,互斥锁使用
package main import ( "fmt" "runtime" "sync" ) var ( counter int wg sy ...