PAM 时间戳 - 如何检查 /var/run/sudo/文件?

PAM 时间戳 - 如何检查 /var/run/sudo/文件?

森托斯文档指出:

...在 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

相关内容