CentOS ドキュメント は次のように述べています:
... PAMタイムスタンプスキームでは、グラフィカル管理アプリケーションは、起動時にrootパスワードの入力をユーザーに求めます。ユーザーが認証されると、pam_timestamp.soモジュールはタイムスタンプファイルを作成します。デフォルトでは、これは/ var/run/Sudo /ディレクトリに作成されます。タイムスタンプファイルがすでに存在する場合、グラフィカル管理プログラムはパスワードの入力を求めません。代わりに、pam_timestamp.soモジュールはタイムスタンプファイルを更新し、ユーザーに5分間のチャレンジされていない管理アクセスを予約します。
/ var/run/Sudo /ファイルを調べることにより、タイムスタンプファイルの実際の状態を確認できます。デスクトップの場合、関連するファイルは不明です:root。存在し、タイムスタンプが5分未満の場合、資格情報は有効です。 .。
次に、ファイルをチェックします。これはバイナリ形式です。
[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分未満の場合、資格情報は有効である」と記載されています。 この<5分情報はこのバイナリ形式でどのように表されますか?
そして私の2番目の質問は、PAMタイムスタンプ(pam_timestamp.so)とtimestamp_timeout(/ etc/sudoers)は同じものですか?
p/s:Fedora21でテストしました。
ドキュメントページの次のリンクをたどると: 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ルートではありません。 chmod u+s /usr/bin/strace
を使用してバイナリsetuidを作成した後、プロセスを追跡することができました。
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