/etc/pam.d/
在Linux系统中,/etc/pam.d目录包含了许多与PAM(Pluggable Authentication Modules)相关的配置文件。PAM是一种用于统一管理用户认证的机制,它允许不同的应用程序使用不同的认证方法。
在/etc/pam.d目录中,每个文件都代表一个特定的PAM服务,文件名就是服务的名称。这些文件包含了针对该服务的PAM配置,用于定义该服务如何进行用户认证。例如,/etc/pam.d/su文件是针对su命令的PAM服务配置,/etc/pam.d/login文件是针对登录命令的PAM服务配置。
这些文件的语法相同,只是包含了针对不同服务的特定配置。每个文件的格式大致相同,一般包括以下几部分:
在/etc/pam.d目录中,还有一些以system-auth等命名的通用配置文件,它们可以被其他配置文件引用。这些通用配置文件包含了针对系统级服务的PAM配置,可以在需要时被其他配置文件继承和覆盖。
总之,/etc/pam.d目录是Linux系统中管理PAM机制的重要目录之一,它包含了针对不同服务和应用程序的PAM配置文件。
/etc/pam.d/system-auth
system-auth
是一个PAM(Pluggable Authentication Modules)配置文件,它位于/etc/pam.d/
目录下。PAM是Linux系统中用于统一管理用户认证的机制,它允许系统管理员为各种应用程序和系统服务配置一致的认证方式。
system-auth
文件用于统一管理系统的用户认证,它包含了多个PAM模块的配置,这些模块按照从上往下的顺序依次调用。每个模块都有其特定的功能,例如身份验证、密码检查、账户管理等。
具体来说,system-auth
中的每个认证过程都由一个PAM模块完成,每个模块都有其特定的功能和参数设置。以下是一些常见的PAM模块和其功能:
auth
模块:用于身份验证,可以要求用户输入密码或其他身份信息。account
模块:用于账户管理,可以检查账户是否过期、是否允许登录等。password
模块:用于密码管理,可以要求用户设置或更改密码。session
模块:用于管理会话,可以设置会话的初始化和结束操作。在system-auth
文件中,每个模块的配置都以行为单位进行定义,每行的格式如下:
module-type control-flag module-name arguments
其中,module-type
指定模块类型,如auth
、account
等;control-flag
指定模块的行为,如required
、sufficient
等;module-name
指定模块的名称,如pam_unix.so
、pam_env.so
等;arguments
指定传递给模块的参数。
#%PAM-1.0
# 这一行指定了PAM配置文件格式的版本。
# 身份验证,必需的模块:pam_env.so,读取环境变量。
auth required pam_env.so readenv=1
# 身份验证,必需的模块:pam_env.so,读取环境变量,从指定文件(/etc/default/locale)中读取。
# 这允许系统对不同用户使用不同的语言设置。
auth required pam_env.so readenv=1 envfile=/etc/default/locale
# 账户管理,必需的模块:pam_permit.so,允许所有用户登录系统。
account required pam_permit.so
# 账户管理,必要的模块:pam_cap.so,检查用户帐户的权限。
account requisite pam_cap.so
# 账户管理,充分的模块:pam_unix.so,尝试使用第一次通过的密码或认证令牌进行身份验证。
account sufficient pam_unix.so try_first_pass use_authtok
# 身份验证,包含system-auth文件,该文件包含其他身份验证要求的额外PAM配置。
# 这允许通过分割不同的身份验证要求到单独的文件中来配置更加模块化和可扩展的配置。
auth include system-auth
介绍示例
找到同时有 “password” 和 “pam_unix.so” 字段并且附加有 “remember=5” 的那行,它表示禁止使用最近用过的5个密码(己使用过的密码会被保存在 /etc/security/opasswd 下面)。
password sufficient pamunix.so sha512 shadow nullok tryfirstpass useauthtok remember=5
#password:这是PAM模块的名称,表明这是一个密码验证的配置。
#sufficient:这个关键字表示如果这个模块验证成功,那么认证就算是成功了,后续的模块将不再被执行。
#pam_unix.so:这是用于密码验证的模块。它使用SHA-512哈希算法对密码进行加密,并允许空密码(nullok)。它会首先尝试使用用户提供的密码(tryfirstpass),并使用自动提供的密码(useauthtok)。
#Sha512:这是密码加密的算法,表示密码会被SHA-512哈希算法加密。
#shadow:这个关键字表示密码存储在影子密码文件中(/etc/shadow)。
#nullok:这个关键字表示允许空密码。
#tryfirstpass:这个关键字表示在调用此模块之前,先尝试使用用户提供的密码。
#useauthtok:这个关键字表示使用自动提供的密码。
#remember=5:这个参数表示保存最近用过的5个密码,这些密码会被保存在/etc/security/opasswd文件中。