2015-09-08 11 views
50

私はすでに実ユーザIDを認識しています。これは、システム内のユーザーの一意の番号です。私のシステムでは、私のuidは実ユーザIDと実効ユーザIDと保存ユーザIDの差

です。
$ echo $UID 
1014 
$     

他の2つのIDの略語は何ですか?また、有効なユーザーIDと保存されたユーザーIDの使用方法、およびシステムで使用する場所

+0

FYI - ウィキペディアのページに概説されているように、ファイルシステムのユーザーIDもあります。https://en.wikipedia.org/wiki/User_identifier –

答えて

75

実際のユーザーIDと有効なユーザーIDの区別は、別のユーザーのIDを一時的に取得する必要があるためです(ほとんどの場合、rootですが、どのユーザーでもかまいません)。 1人のユーザーIDしか持っていなかった場合は、元のユーザーIDに変更する方法はありません(当然のことながら、あなたがrootの場合は、rootの権限を使用して任意のユーザーに変更できます) 。

実際のユーザーIDはあなたが本当に誰(プロセス所有者)であり、有効なユーザーIDはオペレーティングシステムがあなたが何かをすることが許可されているかどうかを判断するためのものですほとんどの場合、いくつかの例外があります)。

ログインすると、ログインシェルは実パスワードと実効ユーザーIDの両方を、パスワードファイルで指定されているのと同じ値(実際のユーザーID)に設定します。

さて、また、あなたがsetuidプログラムを実行することを発生し、他のユーザ(例えば、root)として実行されている以外のsetuidプログラムは、あなたに代わって何かを行うことになってです。これはどのように作動しますか?
setuidプログラムを実行すると、setuidであるため、実際のID(プロセス所有者であるため)とファイル所有者の実効ユーザーID(たとえば、root)を持ちます。

プログラムは、スーパーユーザー権限で行う必要のある魔法を実行し、あなたの代わりに何かをしたいと考えています。つまり、を行うことができないものを実行しようとすると、は失敗します。それはどうですか?さて、実際のユーザIDを実際のユーザIDに変更することで明らかです!

setuidプログラムは、すべてのカーネルが自分のIDであることを知っているので、スイッチバックする方法がありません。あなたのID。バン、あなたは死んでいる。

これは、保存された設定ユーザーIDのためのものです。

+0

保存されたユーザーIDの最後のポイントについては、 [Wikipedia。](https://en.wikipedia.org/wiki/User_identifier#Saved_user_ID) – GDP2

+0

実際のUIDを確認するsys呼び出しを見つけることができる読書を教えてください。ありがとうございました – mik1904

+0

@ mik1904:あなたが実際に使用する可能性のある最も重要なものは、実際のUIDは 'アクセス'です。それは99.9%です。また、 'setfsuid'(しかしまれにしか必要ありません)といくつかの非常に低レベルの関数があり、優先度やスケジューラを取得/設定するための実際のユーザIDとシグナルハンドラに渡されたID、または返されたIDが必要です「待ち」など。 _are_実際のID。 'execve'はチェックしませんが、実際のユーザIDを変更した場合は失敗します。また、 'fork'はチェックしませんが、実際のUIDの最大プロセス・クォータに達すると失敗します。 Googleの 'site:man7.org'はあなたの友人です。 – Damon

関連する問題