web-dev-qa-db-ja.com

PAMタイムスタンプ-/ var / run / Sudo / <user>ファイルを検査する方法は?

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でテストしました。

2
林果皞

ドキュメントページの次のリンクをたどると: 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
3
Lambert