私の考えでは最後の繰り返しこの質問はちょっとした絨毯爆弾の質問なので、人々の気分を傷つける可能性があるので(ほとんど削除マークになるほど)、人々がより簡単に時間を過ごすことができることを願いながら、新しい質問を始めましょう。
基本的に私の全体的な関心は、監査証跡に関連する内容をlogname
理解することです。getlogin()
分析方法は次のとおりです。
1)私が理解したことは、両方のlogname
意志を示すことがgetlogin()
最終auid
的にセッションの監査ログに表示されることです。そうですか?私はauid
不変のプロセス属性であることを知っていますが、2つが必ずしも同じか通常は同じかどうかを知りたいです。これは、当時のアイデンティティや変更可能な環境変数だけでなく、ユーザーの元のアイデンティティに基づいてアクセス制御を決定できるスクリプト/ヘルパーを作成するのに役立ちます。
2) まだどうなるのか理解できません。開発する~のCVE 2003-0388表示された内容が有効でなければなりません。誰かが私にこれを説明することができれば良いでしょう。
しかし私の主な関心は最初のポイントです。
ベストアンサー1
getlogin()
そしてlogname
(callのみgetlogin()
)現在のttyを検索しutmp
、そのレコードで見つかったログイン名を報告してutmp
ログインユーザー名を取得します。これは、複数のユーザー名が同じuidにマップできるシステムで動作するように設計されているためです(通常、これらの慣行は眩しいですが、時には複数のrootアカウントを作成したり、カスタムシェルを起動したりするために使用されます)。他のログインですが、すべて同じデフォルトのuidにマップされます)。これらのアカウントと一緒に使用すると、passwdデータベースは最初の一致のみを報告し、getpwuid(getuid())
実際getlogin()
にログインに使用されているアカウントを検索します。
ただし、その関数は書き込み可能なファイルの内容に依存するため、それと比較する価値はありませんgetpwuid(getuid())
。実際には、権限のあるプロセスのみを書き込むことができるはずですutmp
が、通常は書き込むように構成された「追加」プログラムがあります。 (通常setgid-を介してutmp
)GNU screenのようなプログラムを信頼したくないでしょう。私は歴史的にutmp
時々破損しやすいいくつかのSysVシステムを管理してきたことを知っています。