我看到以下错误:
$ journalctl -b -p3
-- Logs begin at Mon 2016-05-16 21:40:56 EDT, end at Wed 2016-07-27 22:30:13 EDT. --
Jul 27 22:22:26 x99 kcheckpass[5682]: pam_tally(kde:auth): Error opening /var/log/faillog for update
Jul 27 22:22:26 x99 kcheckpass[5682]: pam_tally(kde:auth): Error opening /var/log/faillog for read
Jul 27 22:22:26 x99 kcheckpass[5682]: pam_tally(kde:auth): Error opening /var/log/faillog for update
Jul 27 22:22:26 x99 kcheckpass[5682]: pam_tally(kde:auth): Error opening /var/log/faillog for read
Jul 27 22:22:26 x99 kcheckpass[5682]: pam_tally(kde:setcred): Error opening /var/log/faillog for update
Jul 27 22:22:26 x99 kcheckpass[5682]: pam_tally(kde:setcred): Error opening /var/log/faillog for update
kcheckpass 的手册页显示:
kcheckpass - KDE 的身份验证程序
任何需要验证用户身份的程序(例如带有锁定选项的屏幕保护程序)都可以使用 kcheckpass。 kcheckpass 是一个简单的 setuid 程序,如果用户已通过身份验证,则返回 0,否则返回 1。其他需要用户认证的程序可以使用kcheckpass而不需要setuid状态,从而简化程序并增强系统安全性。
SECURITY kcheckpass must be setuid on systems that use shadow passwords.
据我了解,setuid 权限位告诉 Linux 使用所有者的有效用户 ID(而不是执行者)运行程序。
但是,我不明白在这种情况下如何实施该解决方案。我到底需要做什么?
以下是 /var/log/faillog 上的现有权限
$ ls -la /var/log/faillog
-rw------- 1 root root 32096 Aug 9 12:56 /var/log/faillog
答案1
来自Arch Linux 论坛,有一个更好的答案:
编辑此文件并进行如下 2 项更改(删除一行并插入新行):
sudo nano /etc/pam.d/system-login
删除整行:
auth required pam_tally.so onerr=succeed file=/var/log/faillog
在其位置插入这一行:
auth required pam_tally2.so
创建日志文件:
touch /var/log/tallylog
chmod 600 /var/log/tallylog
查看更多详细信息拱门论坛解释为什么这可能是更好的解决方案。
答案2
您可以运行此命令:
sudo chmod +s /usr/lib/kcheckpass
根据您使用的发行版,它可能位于另一个目录中,因此它可能是/usr/libexec/kcheckpass
.