问题背景,软件开发过程,VNC/SHELL登陆,经常遇到输错密码账号锁定的问题,每次都要等待若干时间才能解锁。
  就个人而言,服务器是专用,或者团队公用,没有必要设置严格的密码策略,保护好ROOT用户,其他用户各自维护自己的数据,就能满足需求。严格的密码策略,无法使用简单密码、定期更换、锁屏、超时断开连接等等,对于程序员来说都是打断思路的障碍。
  Linux使用pam模块(Pluggable Authentication Module插入式验证模块)进行鉴权管理,不同的应用程序——ssh、Telnet、login等,根据配置文件进行鉴权管理。
  修改配置文件需要注意,不同的程序使用的配置文件是不同的,并不是修改system-auth后就万事大吉,只修改system-auth系统的密码策略变化,但是ssh、Telnet的登陆需求并没有变化。配置文件例举如下:

[xi@CS-Allen ~]$ ls /etc/pam.d/
atd               fingerprint-auth-ac     kcheckpass    password-auth     remote             smtp.postfix      system-auth
chfn              gdm-autologin           kscreensaver  password-auth-ac  runuser            sshd              system-auth-ac
chsh              gdm-fingerprint         ksu           pluto             runuser-l          sssd-shadowutils  systemd-user
config-util       gdm-launch-environment  liveinst      polkit-1          setup              su                vlock
crond             gdm-password            login         postlogin         smartcard-auth     sudo              vmtoolsd
cups              gdm-pin                 other         postlogin-ac      smartcard-auth-ac  sudo-i            vsftpd
fingerprint-auth  gdm-smartcard           passwd        ppp               smtp               su-l              xserver

PAM 配置文件中的字段包括:
Service_name 将指定服务/应用程序的名称(默认值为 OTHER)。
Module_type 将为 Service_name 字段中的相应服务指定模块类型(auth/account/session/passwd)。
Control_flag 将指定模块的堆栈行为。它可以获取诸如 requisite、required、sufficient 和 optional 之类的值。
Module_path 将指定实现模块的库对象的路径名称。默认情况下,它将被设为 /lib/security。
Module_options/module_args(可选字段)将指定可以传递给服务模块的选项或实参。以ssh会话鉴权为例,配置如下:

[xi@CS-Allen ~]$ cat /etc/pam.d/sshd
#%PAM-1.0
auth       required     pam_sepermit.so
auth       substack     password-auth
auth       include      postlogin
# Used with polkit to reauthorize users in remote sessions
-auth      optional     pam_reauthorize.so prepare
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      password-auth
session    include      postlogin
# Used with polkit to reauthorize users in remote sessions
-session   optional     pam_reauthorize.so prepare

PS: 密码策略有多个配置工具,chage是可选工具,也可以修改密码策略,且优先级较高。

[xi@CS-Allen ~]$ chage -l xi
Last password change                                    : Jan 08, 2020
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7

陈霁
1 声望1 粉丝