Ubuntu 22.04下配置root通过su切换用户时跳过密码过期强制修改提示的方法
Ubuntu 22.04下配置root通过su切换用户时跳过密码过期强制修改提示的方法
我完全理解你的困扰——在Ubuntu 22.04上,哪怕是root用户用su - user1切换到密码过期的账号,都会被强制要求改密码,但CentOS下就没这个问题。确实这是两者PAM(Pluggable Authentication Modules)配置的差异导致的,下面我一步步带你调整配置,实现你想要的效果:
步骤1:备份配置文件(重要)
首先,我们先备份su的PAM配置文件,避免修改出错后无法恢复:
sudo cp /etc/pam.d/su /etc/pam.d/su.bak
步骤2:编辑su的PAM配置
打开su的配置文件进行编辑:
sudo nano /etc/pam.d/su
在文件中找到account include common-account这一行,在它之前添加如下配置:
account [success=1 default=ignore] pam_succeed_if.so quiet ruser eq root
解释一下这行的作用:
pam_succeed_if.so是PAM的一个条件判断模块,这里用来检查发起su操作的原始用户(ruser)是不是root。success=1表示如果条件满足(发起者是root),就跳过后面的1个模块——也就是common-account里负责检查密码过期的模块。quiet参数是为了避免输出不必要的日志信息。
这样配置后,root切换到过期账号时会跳过密码过期检查,但依然会执行账号有效性的其他必要验证(比如用户是否存在、是否被锁定等),而普通用户登录该过期账号时,还是会被正常要求修改密码,完全符合你的需求。
步骤3:保存配置并测试
在nano编辑器中按Ctrl+O保存文件,回车确认后按Ctrl+X退出。
现在测试一下效果:用root执行su - user1,你会发现直接进入了user1的会话,不会再弹出修改密码的提示了。
备选方案
如果你觉得上述条件判断的方式不够直观,也可以直接使用pam_expire.so模块的rootok参数,同样在account include common-account之前添加:
account required pam_expire.so rootok
rootok参数会让pam_expire.so模块直接跳过root发起的密码过期检查,效果和前面的方法一致。
备注:内容来源于stack exchange,提问作者Utz
相关产品推荐
相关产品推荐

