"logname"ユーティリティを正しく置き換えますか? [閉鎖]

議論したように、このlognameユーティリティはセキュリティ上の理由から意図的に破損したものに依存していたため、しばらく前から多くのユーザーが利用できなくなりました。ここ。ディスカッションの内容を読むと、その機能が復元される可能性はほとんどありません。

しばらく回避策を使用してきましたが、今は不快になり始めているようで、適切な長期ソリューションを探していますが、解決策が多くないようで驚きました。私しか。

最も一般的に接続されたソリューションを提示ここしかし、これは以下に由来します。ここSUDO_USER環境変数で提案されたソリューションには移植性がないというヒントもあります。

別の提案された解決策は、ユーザー名を含むファイルを生成し、ログ名機能をシミュレートするためにbashエイリアスまたは同様のものを作成することです。しかし、少なくとも環境制御の可能性についての知識を想定しているので、これを適切な代替手段と呼ぶことはありません。必ずしも可能なわけではありませんが、少なくとも場合には最もよく言います。

解決策はwho次のようになります。ここ興味深いが、関連する信頼性または移植性の制限があるかどうかに関する情報が見つかりません。

これらの方法に加えて、この分野の空気は非常に急速に希薄になっているので、このトピックに関する新しい意見とこれまでの私の考えを得るためにここに尋ねることにしました。

ベストアンサー1

TL、DR:動作が常に一致していない場合でも、そうしたい場合があります。ただし、すべてのディストリビューションでデフォルトで動作するわけではありません。私の答えはLinuxを想定しており、他のUnixバリアントでは機能しません。/proc/PID/loginuidlogname

これに対する明確な期待がないため、完全に満足のいく答えを見つけることはできないようですlogname。一方では現在lognameutmp レコードに基づくレコードを使用しています。このレコードはユーザーを端末に関連付け、端末エミュレータの要件に従って更新されます(多くの端末エミュレータではこれを行いません)。一方、「ユーザー名を変更する可能性はスーパーユーザーに制限する必要がある」と予想します。 utmpレコードの場合はそうではありません!説明どおりあなたが引用したコメントスレッドから、utmpレコードはほとんどの場合動作しますが、偽造される可能性があります。

「コンソールへのログインに使用されるユーザー名」を定義するのに問題があります。名目上の状況は明らかですが、多くの合併症があります。ユーザーが他のユーザーのスクリーンセッションに電話をかけて接続した場合はsuどうなりますか?ユーザーが他のユーザーのX11またはVNCセッションに接続するとどうなりますか?プロセスを端末に追跡する方法 - 制御端末を持たないプロセスはどうすればよいですか?

実際にLinuxする「ログインUID」という概念があります。すべてのプロセスに表示されます。この情報はカーネルによって追跡されますが、ログイン時にカーネルに通知するのはユーザーモードです。これは通常、次のように行われます。/proc/PID/loginuidpam_loginuid。後ろは書くことによって行われます/proc/self/loginuid。 LinuxのログインUIDはプロセスの祖先に従いますが、これは常に正しい定義ではありませんが、単純であるという利点があります。

プロセスのログインUIDが4294967295の場合、プロセスはそれを変更できます。初期化は、ログインUID 4294967295(32ビット値-1に等しい)で始まります。ログインセッションの一部ではないプロセスを示します。。ログインプロセスがログインUIDを正しく設定する限り(rootでログインユーザーに実際のUIDを設定する直前)、大丈夫です。ただし、ログインUIDを設定せずにログインする方法がある場合、ユーザーは自分が選択したログインUIDを宣言できます。したがって、この情報は、システムでプロセスを実行するすべての方法がログインUID設定ステップを経た場合にのみ信頼できます。一歩を忘れてしまうと情報が無駄になります。

実験的に、Debian jessieマシンでログインUID-1を使用して長時間実行されているすべてのプロセスはシステムサービスです。ただし、incronなどのログインUID-1でプロセスを実行する方法があります。私は他の多くの方法を知りません。 incronは最初に試したことで効果がありました。 Ubuntu 16.04システムでは、pam_loginuidlightdmエントリがコメントアウトされていますが、理由は調査していません。 Ubuntuのlightdmとincronはセキュリティバグと見なされる必要があるかもしれませんが、実際には今日の主要ディストリビューションではデフォルトでログインUIDを使用できません。

また、見ることができますLoginuid、変更を許可する必要があります(変更可能または不変)。これは、ルートがログインUIDを変更するのを防ぐカーネルオプションに関するものです。ただし、これはログインUIDが適切な値に設定されている場合にのみ機能することに注意してください。ユーザーがログインUIDをまだ-1に設定した状態でプロセスを実行している場合は、必要な値に設定できます。実際、initを別の値(-2など)に切り替えてpam_loginuidその値を上書きする方が安全です。この場合、-1 は絶対に発生せず、-2 は「不明」を意味します。

おすすめ記事