森托斯文档指出:
...在 PAM 时间戳方案中,图形管理应用程序在启动时提示用户输入 root 密码。当用户通过身份验证后,pam_timestamp.so 模块会创建一个时间戳文件。默认情况下,它是在 /var/run/sudo/ 目录中创建的。如果时间戳文件已存在,图形管理程序不会提示输入密码。相反,pam_timestamp.so 模块会刷新时间戳文件,为用户保留额外五分钟的不受挑战的管理访问权限。
您可以通过检查 /var/run/sudo/ 文件来验证时间戳文件的实际状态。对于桌面,相关文件未知:root。如果它存在并且其时间戳小于五分钟,则凭据有效。 ...
然后我检查该文件,它是二进制格式:
[xiaobai@xiaobai note]$ sudo cat /var/run/sudo/ts/xiaobai
(�r�3�+�[xiaobai@xiaobai note]$
[xiaobai@xiaobai note]$ sudo hexdump -C /var/run/sudo/ts/xiaobai
00000000 01 00 28 00 02 00 00 00 e8 03 00 00 72 17 00 00 |..(.........r...|
00000010 06 34 00 00 00 00 00 00 4e a7 c9 3a 00 00 00 00 |.4......N..:....|
00000020 01 88 00 00 00 00 00 00 |........|
00000028
[xiaobai@xiaobai note]$
...
[xiaobai@xiaobai note]$
(�ry5S�V�[xiaobai@xiaobasudo hexdump -C /var/run/sudo/ts/xiaobai
00000000 01 00 28 00 02 00 00 00 e8 03 00 00 72 17 00 00 |..(.........r...|
00000010 af 35 00 00 00 00 00 00 5d 1a 24 07 00 00 00 00 |.5......].$.....|
00000020 01 88 00 00 00 00 00 00 |........|
00000028
[xiaobai@xiaobai note]$
数字从 4 到 5 慢慢增加,尽管它很小。我可能是错的,因为我注意到当它达到 9 时,它似乎比 1 分钟长。 9点之后,它变得越来越难以阅读:
xiaobai@xiaobai note]$ sudo hexdump -C /var/run/sudo/ts/xiaobai
00000000 01 00 28 00 02 00 00 00 e8 03 00 00 72 17 00 00 |..(.........r...|
00000010 30 3b 00 00 00 00 00 00 59 f9 63 32 00 00 00 00 |0;......Y.c2....|
00000020 01 88 00 00 00 00 00 00 |........|
00000028
[xiaobai@xiaobai note]$ sudo hexdump -C /var/run/sudo/ts/xiaobai
00000000 01 00 28 00 02 00 00 00 e8 03 00 00 72 17 00 00 |..(.........r...|
00000010 32 3b 00 00 00 00 00 00 ad 72 8f 1b 00 00 00 00 |2;.......r......|
00000020 01 88 00 00 00 00 00 00 |........|
00000028
[xiaobai@xiaobai note]$
所以我的第一个问题是,我应该如何检查 /var/run/sudo/user 文件二进制格式?该医生指出“如果它存在并且它的时间戳是不到五分钟,凭证有效。”这怎么办<5分钟以这种二进制格式表示的信息?
我的第二个问题是PAM 时间戳(pam_timestamp.so)和时间戳超时(/etc/sudoers) 是同一件事吗?
p/s: 我在 Fedora 21 中测试过。
答案1
如果您点击文档页面上的下一个链接:http://www.centos.org/docs/5/html/5.2/Deployment_Guide/s2-pam-timestamp-remove.html您可以找到对 pam_timestamp_check 实用程序的引用。
该pam_timestamp_check
实用程序将检查文件的有效性,并且可以检查返回值。
另请参阅man pam_timestamp_check
详细信息。
在我的系统(Linux Mint)上,我还发现 pam_timestamp_check 总是返回退出代码 7 - 时间戳无效。用于strace pam_timestamp_check
调试进程时会返回退出代码 2 - 二进制文件不是 setuid root。使用二进制 setuid 后,chmod u+s /usr/bin/strace
我能够跟踪该过程:
lambert # strace pam_timestamp_check root
.
.
lstat("/var/run/sudo/lambert/9:root", {st_mode=S_IFREG|0600, st_size=57, ...}) = 0
access("/var/run/utmpx", F_OK) = -1 ENOENT (No such file or directory)
open("/var/run/utmp", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
access("/var/run/utmpx", F_OK) = -1 ENOENT (No such file or directory)
open("/var/run/utmp", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
exit_group(7) = ?
+++ exited with 7 +++
从这个输出中我可以看到它/var/run/utmp
已被检查并且无法找到。
在我的文件系统上搜索发现该utmp
文件位于/run/utmp
而不是/var/run/utmp
.创建文件后使用:
touch /var/run/utmp
chmod 664 /var/run/utmp
chown root:utmp /var/run/utmp
我能够启动一个新的 sudo 会话(从新终端):
lambert $ sudo su
lambert # ls -l /var/run/utmp
-rw-rw-r-- 1 root utmp 384 mei 12 21:59 /var/run/utmp
#logout
lambert $ pam_timestamp_check root
lambert $ echo $?
0