linux中/etc/pam.d/system-auth文件详解

密码设置及登陆控制文件位置:/etc/pam.d/system-auth,
示例文件内容如下:

auth      required  pam_securetty.so
auth      required  pam_unix.so shadow nullok
auth      required  pam_nologin.so
account   required  pam_unix.so
password  required  pam_cracklib.so retry=3
password  required  pam_unix.so shadow nullok use_authtok
session   required  pam_unix.so

三个auth都会用来进行登陆检查,即使第一个模块失败,用来防止用户知道在哪个过程失败,主要目的是防止攻击。
auth 组件:认证接口,要求并验证密码
account组件:检测是否允许访问。检测账户是否过期或则在末端时间内能否登陆。
password组件:设置并验证密码
session组件:配置和管理用户sesison。


required:该模块必须success才能进行继续。即使失败用户也不会立刻获知,直到所有相关模块完成。
requisite:该模块必须success才能使认证继续进行。
suffifient:如果失败则忽略。
optinal:忽略结果,不管是否失败。

auth      required  pam_securetty.so

确保如果用户尝试以 root 身份登录, 则用户登录的 tty 将列在/etc/securetty 文件中, 如果该文件存在的话。

auth      required  pam_unix.so shadow nullok

提示登陆用户输入密码然后根据/etc/passwd中保存的对应密码进行验证,如果/etc/shadow存在的话。pam_unis.so模块会自动检测并使用密码验证用户。

auth      required  pam_nologin.so

认证最后的步骤,验证/etc/nologin文件是否存在,如果nologin存在并且用户身份不是root,则认证失败。

account   required  pam_unix.so

该模块执行必要的账户检验。如果enable shadow passwords,pam_unix.so模块会检验账号是否已经过期或则在宽限的时间内改过密码。

password  required  pam_cracklib.so retry=3

如果密码过期,pam_cracklib.so要求一个新密码,如果新密码复杂度不满足不要,会在给用户两次机会重新输入密码强度够的密码。一共三次。pam_cracklib.so支持的选项如下:
minlen=N:新密码的最小长度
dcredit=N:当N>0时表示新密码中数字出现的最多次数;当N<0时表示新密码中数字出现最少次数;
ucredit=N: 当N>0时表示新密码中大写字母出现的最多次数;当N<0时表示新密码中大写字母出现最少次数;
lcredit=N: 当N>0时表示新密码中小写字母出现的最多次数;当N<0时表示新密码中小写字母出现最少次数;
ocredit=N:当N>0时表示新密码中特殊字符出现的最多次数;当N<0时表示新密码中特殊字符出现最少次数;
maxrepeat=N:拒绝包含多于N个相同连续字符的密码。 默认值为0表示禁用此检查
maxsequence=N:拒绝包含长于N的单调字符序列的密码。默认值为0表示禁用此检查。实例是'12345'或'fedcb'。除非序列只是密码的一小部分,否则大多数此类密码都不会通过简单检查。
enforce_for_root: 如果用户更改密码是root,则模块将在失败检查时返回错误。默认情况下,此选项处于关闭状态,只打印有关失败检查的消息,但root仍可以更改密码。不要求root用户输入旧密码,因此不会执行比较旧密码和新密码的检查。

password  required  pam_unix.so shadow nullok use_authtok

如果需要更改用户的密码,则必须由pam_unix.so模块来操作。
shadow标识:当更新用户密码的时候创建shadow passwords
nullok标识:用户可以从空密码更改他们的密码否则空密码视为账户锁定。
user_authok标识:禁用请求新密码。接受任何由前一个功能模块创建的密码,但是改密码必须交由pam_cracklib.so检测。

session required pam_unix.so

pam_unix.so session组件,在/var/log/messages当中记录用户名和服务类型

你可能感兴趣的:(linux)