如何在管理员级别在 Debian Squeeze 中打开 PAM 调试?
我已经检查了我能找到的所有资源。谷歌,联机帮助页,等等。我还没有尝试过的唯一一件事(我根本不敢尝试,我有没有提到我讨厌 PAM?)是深入研究 PAM 的库源。
我试图谷歌寻找解决方案,什么都没有。到目前为止我发现了什么:
http://www.bitbull.ch/wiki/index.php/Pam_debugging_funktion(/etc/pam_debug)和
http://nixdoc.net/man-pages/HP-UX/man4/pam.conf.4.html(debug对PAM项选项在/etc/pam.d/)。
不,不起作用。 没有 PAM 输出,什么都没有,绝对安静。
在寻找解决方案时,我什至点击了 Pam 的链接,即德国的加油站。嗯,是的,也许在所有这些十亿次点击中可能隐藏着一个线索,但是开枪打我我会在我发现之前就死了。
休息是仅供参考:
我遇到了什么问题?
升级到 Debian Squeeze 后,有些东西变得很奇怪(好吧,嘿,它曾经是,呃,Etch 上的东西……啊,是的,Woody)。所以这可能不是 Debian 的错,只是一个长期存在的错误设置。我立刻有印象它必须与 PAM 做一些事情,但我真的不知道发生了什么。我完全在黑暗中,独自一人,像婴儿一样无助,YKWIM。有些 ssh 登录有效,有些则无效。这有点好笑。没有线索ssh -v,没有线索/var/log/*,什么都没有。只是“身份验证成功”或“身份验证失败”,有时同一用户同时登录一个会话成功,而另一个会话失败。没有什么是你真正可以掌握的。
在挖掘了大量其他选项后,我能够找到答案。有nullok和nullok_secure,这是Debian 的特色。某些事情搞砸了/etc/securetty,取决于tty(有点随机)登录是否被拒绝。真的很好,呸!
修复很容易,现在一切都很好了。
然而,这给我留下了一个问题,未来如何调试这样的烂摊子。这不是 PAM 第一次让我发疯。所以我想看到一个最终的解决方案。“已解决”中的最终结果,而不是“世界末日”中的最终结果。谢谢。
啊,顺便说一句,这再次坚定了我的信念,即自从 PAM 出现以来,讨厌它是件好事。我提到过吗?
小智 27
您可以尝试以下几件事:
您是否在 syslog 中启用了调试消息的日志记录?
cp /etc/syslog.conf /etc/syslog.conf.original
vi /etc/syslog.conf
Run Code Online (Sandbox Code Playgroud)
添加以下行:
*.debug /var/log/debug.log
Run Code Online (Sandbox Code Playgroud)
退出:wq!。
touch /var/log/debug.log
service syslog restart
Run Code Online (Sandbox Code Playgroud)
您可以为所有模块启用调试,如下所示:
touch /etc/pam_debug
Run Code Online (Sandbox Code Playgroud)
或者,您可以通过在相关行的末尾/etc/pam.d/system-auth或其他/etc/pam.d/*文件中添加“调试”来仅为您感兴趣的模块启用调试:
login auth required pam_unix.so debug
Run Code Online (Sandbox Code Playgroud)
然后调试消息应该开始出现在/var/log/debug.log. 希望这可以帮助你!
Oth*_*eus 11
至少在 CentOS 6.4 上,/etc/pam_debug不使用。
如果安装了 pam_warn.so 模块,您可以通过以下方式获得一些日志输出:
auth required pam_warn.so
success required pam_warn.so
Run Code Online (Sandbox Code Playgroud)
等等。这个模块确保它不会在任何时候干扰身份验证过程,但它通过系统日志记录有意义的东西。
在检查代码并进行一些编译之后,我发现 (1) 可以通过源代码启用此调试模式,并且 (2) RHEL 补丁使该功能几乎无法使用(至少是 pam_unix 模块)和 (3)无论如何,最好修补代码。
要使其适用于 RHEL,您可以获取 Linux-PAM ... src.rpm(适用于任何 1.1 版本)并按如下方式更改规范文件:
找到以开头的行
%配置 \
在它之后,添加 --enable-debug \
然后构建 rpm 并安装(强制覆盖现有包)。现在创建文件 /var/run/pam-debug.log:
install -m 622 /dev/null /var/run/pam-debug.log
Run Code Online (Sandbox Code Playgroud)
如果文件不存在,调试输出将发送到 stderr。
在我看来,这种发送到 stderr 是愚蠢的,并且是导致补丁冲突的原因。您可以通过进入文件libpam/include/security/_pam_macros.h并替换以下 4 行来更改该行为
日志文件 = 标准错误;
和
return;
Run Code Online (Sandbox Code Playgroud)
在构建时,您会收到有关无法访问语句的警告,但可以忽略它们。您可以在 sed 脚本中进行此更改(并在补丁后将其放在 RPM 的 %prep 部分)...
sed -i 's/logfile = stderr;$/return;/' libpam/include/security/_pam_macros.h
Run Code Online (Sandbox Code Playgroud)
如果你做了这个小补丁,你可以恢复 %patch2,因为它应该再次正常工作。
我碰巧花了几个小时试图找出如何在 CentOS 6.4 上的 PAM 中启用调试日志。虽然这个问题是针对Debian的,但我还是会写下在CentOS上怎么做的,希望其他人不要把我已有的时间投入进去。
最终证明,在pamCentOS 软件包中启用调试日志非常简单。困难源于它涉及重新编译包的事实。所以,首先pam-1.1.1-13.el6.src.rpm从这里找到 SRPM(例如)。不了解从 SRPM 编译包的人,可以参考设置 RPM 构建环境的步骤。
这是主要步骤。打开规范文件并添加--enable-debug到调用中的%build部分configure。重新编译!重新安装新创建的包。最后,创建将写入调试日志的文件。
$ sudo touch /var/run/pam-debug.log
Run Code Online (Sandbox Code Playgroud)
如果您不创建文件,那么终端上会飞来很多日志,这可能不是很有用。
Debian 和 Ubuntu(可能还有其他发行版)有一个特殊的日志文件,其中记录了所有 pam 输出:
/var/log/auth.log
我一直在与 pam 相关的问题苦苦挣扎了一天半,终于找到了这个日志文件,并使自己免于精神错乱。
这是当事情没有按计划进行时此文件的内容示例。
Jul 10 09:31:14 vagrant-ubuntu-trusty-64 pamtester: pam_userdb(vsftpd:auth): user_lookup: could not open database `/etc/vsftpd_users.db': No such file or directory
Jul 10 09:36:20 vagrant-ubuntu-trusty-64 sudo: vagrant : TTY=pts/1 ; PWD=/home/vagrant ; USER=root ; COMMAND=/bin/cat /var/log/auth.log
Run Code Online (Sandbox Code Playgroud)
这是它工作时的样子:
Jul 10 09:47:00 vagrant-ubuntu-trusty-64 sshd[5222]: pam_unix(sshd:session): session closed for user vagrant
Jul 10 09:50:58 vagrant-ubuntu-trusty-64 sshd[5584]: error: Could not load host key: /etc/ssh/ssh_host_ed25519_key
Jul 10 09:50:58 vagrant-ubuntu-trusty-64 sshd[5584]: Accepted publickey for vagrant from 10.0.2.2 port 54652 ssh2: RSA dd:3b:b8:2e:85:04:06:e9:ab:ff:a8:0a:c0:04:6e:d6
Jul 10 09:50:58 vagrant-ubuntu-trusty-64 sshd[5584]: pam_unix(sshd:session): session opened for user vagrant by (uid=0)
Jul 10 09:51:13 vagrant-ubuntu-trusty-64 sudo: vagrant : TTY=pts/1 ; PWD=/home/vagrant ; USER=root ; COMMAND=/bin/cat /var/log/auth.log
Jul 10 09:51:13 vagrant-ubuntu-trusty-64 sudo: pam_unix(sudo:session): session opened for user root by vagrant(uid=0)
Jul 10 09:51:13 vagrant-ubuntu-trusty-64 sudo: pam_unix(sudo:session): session closed for user root
Jul 10 09:51:41 vagrant-ubuntu-trusty-64 pamtester: pam_userdb(vsftpd:auth): user 'foo' granted access
Jul 10 09:51:44 vagrant-ubuntu-trusty-64 sudo: vagrant : TTY=pts/1 ; PWD=/home/vagrant ; USER=root ; COMMAND=/bin/cat /var/log/auth.log
Jul 10 09:51:44 vagrant-ubuntu-trusty-64 sudo: pam_unix(sudo:session): session opened for user root by vagrant(uid=0)
Run Code Online (Sandbox Code Playgroud)
请注意,启用 pam 调试日志记录的其他可能性都不适合我。
| 归档时间: |
|
| 查看次数: |
92090 次 |
| 最近记录: |