/etc/pam.d/sshd 下 新增 password requisite pam_pwquality.so minlen=8 dcredit=-1 ocredit=-1
时间: 2024-09-13 11:12:02 浏览: 72
在Linux系统中,`/etc/pam.d/sshd` 是一个PAM(Pluggable Authentication Modules)配置文件,用于配置`sshd`服务的安全策略。PAM是一种用于实现认证、授权、记账和密码管理的灵活机制,允许系统管理员通过配置文件来定制认证过程,而无需修改服务的源代码。
在`/etc/pam.d/sshd`文件中新增以下行:
```
password requisite pam_pwquality.so minlen=8 dcredit=-1 ocredit=-1
```
这行配置的作用是增强系统对用户密码强度的要求,具体含义如下:
- `password`: 指明这个模块是在密码改变时被调用的。
- `requisite`: 表示这是一个必要条件,如果这个模块认证失败,将立即返回失败,不会继续执行后续的认证步骤。
- `pam_pwquality.so`: 是一个PAM模块,用于增强密码的质量检查。
- `minlen=8`: 设置密码的最小长度为8个字符。
- `dcredit=-1`: 表示至少需要包含一个数字字符,`-1`表示需要的数字字符数量至少比最小长度少一个。
- `ocredit=-1`: 表示至少需要包含一个非字母字符,同样`-1`表示需要的非字母字符数量至少比最小长度少一个。
这样的配置提高了密码的安全性,要求用户在创建或更改密码时必须使用至少8个字符,并且至少包含一个数字和一个特殊字符,从而增加了密码破解的难度。
相关问题
/etc/pam.d/sshd 下 新增 password requisite pam_pwquality.so minlen=8 dcredit=-1 ocredit=-1 我该如何验证配置
`/etc/pam.d/sshd` 是PAM(Pluggable Authentication Modules)配置文件之一,用于控制通过sshd服务进行的认证过程。PAM是一种灵活和强大的认证机制,它允许系统管理员通过编辑配置文件来设定各种认证策略。
您提到的配置项 `password requisite pam_pwquality.so minlen=8 dcredit=-1 ocredit=-1` 是用来增强密码安全性的,具体含义如下:
- `password`: 表示这个模块是用于密码更改过程中的。
- `requisite`: 表示如果此模块失败,则立即返回失败,并且停止后续模块的执行。
- `pam_pwquality.so`: 这是PAM的一个模块,用于检查密码的质量。
- `minlen=8`: 设置密码最小长度为8个字符。
- `dcredit=-1`: 表示至少包含一个数字字符。
- `ocredit=-1`: 表示至少包含一个非数字字符。
要验证PAM配置的生效情况,您可以通过以下步骤进行:
1. 使用`pamtester`工具:这是一个用于测试PAM配置的工具。您可以使用它来模拟用户认证过程,并检查配置是否按预期工作。
首先安装`pamtester`(如果尚未安装):
```bash
sudo yum install pamtester # 在基于RPM的系统中
sudo apt-get install pamtester # 在基于Debian的系统中
```
然后使用以下命令测试sshd服务的密码更改:
```bash
sudo pamtester sshd [username] password
```
您需要替换`[username]`为一个有效的系统用户名。在提示输入密码时,尝试使用一个不符合密码策略的密码,如长度小于8或者没有包含数字的密码,`pamtester`应该会返回一个错误消息,说明密码不符合策略。
2. 尝试更改密码:您可以实际尝试更改系统用户的密码,并看是否按照PAM配置拒绝不符合策略的密码。
3. 检查日志文件:查看`/var/log/auth.log`(或系统对应的认证日志文件)来确认密码更改的尝试是否被记录,并检查是否有相关的错误信息。
if [ -f "/etc/pam.d/system-auth" ];then if grep -q "password requisite pam_cracklib.so retry=3 minlen=8 minclass=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1" /etc/pam.d/system-auth then sed -i '/password requisite pam_cracklib.so retry=3 minlen=8 minclass=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1/s/^#//' /etc/pam.d/system-auth else echo 'password requisite pam_cracklib.so retry=3 minlen=8 minclass=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1' >> /etc/pam.d/system-auth fi if grep -q "password required pam_unix.so remember=5 use_authtok md5 shadow" /etc/pam.d/system-auth then sed -i '/password required pam_unix.so remember=5 use_authtok md5 shadow/s/^#//' /etc/pam.d/system-auth else echo 'password required pam_unix.so remember=5 use_authtok md5 shadow' >> /etc/pam.d/system-auth fi fi if [ -f "/etc/pam.d/password-auth-ac" ];then if grep -q "password requisite pam_cracklib.so retry=3 minlen=8 minclass=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1" /etc/pam.d/password-auth-ac then sed -i '/password requisite pam_cracklib.so retry=3 minlen=8 minclass=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1/s/^#//' /etc/pam.d/password-auth-ac else echo 'password requisite pam_cracklib.so retry=3 minlen=8 minclass=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1' >> /etc/pam.d/password-auth-ac fi if grep -q "password required pam_unix.so remember=5 use_authtok md5 shadow" /etc/pam.d/password-auth-ac then sed -i '/password required pam_unix.so remember=5 use_authtok md5 shadow/s/^#//' /etc/pam.d/password-auth-ac else echo 'password required pam_unix.so remember=5 use_authtok md5 shadow' >> /etc/pam.d/password-auth-ac fi fi
以下是将这些命令转换为Python代码的示例:
```python
import subprocess
system_auth_file = '/etc/pam.d/system-auth'
password_auth_ac_file = '/etc/pam.d/password-auth-ac'
# Update system-auth file
if subprocess.call('[ -f "/etc/pam.d/system-auth" ]', shell=True) == 0:
if subprocess.call('grep -q "password requisite pam_cracklib.so retry=3 minlen=8 minclass=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1" /etc/pam.d/system-auth', shell=True) == 0:
subprocess.call("sed -i '/password requisite pam_cracklib.so retry=3 minlen=8 minclass=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1/s/^#//' /etc/pam.d/system-auth", shell=True)
else:
subprocess.call("echo 'password requisite pam_cracklib.so retry=3 minlen=8 minclass=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1' >> /etc/pam.d/system-auth", shell=True)
if subprocess.call('grep -q "password required pam_unix.so remember=5 use_authtok md5 shadow" /etc/pam.d/system-auth', shell=True) == 0:
subprocess.call("sed -i '/password required pam_unix.so remember=5 use_authtok md5 shadow/s/^#//' /etc/pam.d/system-auth", shell=True)
else:
subprocess.call("echo 'password required pam_unix.so remember=5 use_authtok md5 shadow' >> /etc/pam.d/system-auth", shell=True)
# Update password-auth-ac file
if subprocess.call('[ -f "/etc/pam.d/password-auth-ac" ]', shell=True) == 0:
if subprocess.call('grep -q "password requisite pam_cracklib.so retry=3 minlen=8 minclass=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1" /etc/pam.d/password-auth-ac', shell=True) == 0:
subprocess.call("sed -i '/password requisite pam_cracklib.so retry=3 minlen=8 minclass=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1/s/^#//' /etc/pam.d/password-auth-ac", shell=True)
else:
subprocess.call("echo 'password requisite pam_cracklib.so retry=3 minlen=8 minclass=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1' >> /etc/pam.d/password-auth-ac", shell=True)
if subprocess.call('grep -q "password required pam_unix.so remember=5 use_authtok md5 shadow" /etc/pam.d/password-auth-ac', shell=True) == 0:
subprocess.call("sed -i '/password required pam_unix.so remember=5 use_authtok md5 shadow/s/^#//' /etc/pam.d/password-auth-ac", shell=True)
else:
subprocess.call("echo 'password required pam_unix.so remember=5 use_authtok md5 shadow' >> /etc/pam.d/password-auth-ac", shell=True)
```
上面的代码首先检查是否存在`/etc/pam.d/system-auth`文件,如果存在则更新该文件。如果文件中存在`password requisite pam_cracklib.so retry=3 minlen=8 minclass=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1`行,则将其注释去除,否则将该行添加到文件末尾。接着,检查文件中是否存在`password required pam_unix.so remember=5 use_authtok md5 shadow`行,如果不存在则添加该行到文件末尾。
然后,检查是否存在`/etc/pam.d/password-auth-ac`文件,如果存在则更新该文件。如果文件中存在`password requisite pam_cracklib.so retry=3 minlen=8 minclass=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1`行,则将其注释去除,否则将该行添加到文件末尾。接着,检查文件中是否存在`password required pam_unix.so remember=5 use_authtok md5 shadow`行,如果不存在则添加该行到文件末尾。
请确保你具有足够的权限来执行这些操作,并将需要修改的文件路径正确添加到`system_auth_file`和`password_auth_ac_file`变量中。运行代码后,命令将被执行。
阅读全文