実際の効果的なユーザーIDはどのように機能しますか?


13

通常のユーザーがpasswdファイルに変更を加えたい場合、ユーザーはsetuidによって有効なユーザーアクセス権を与えられます。ユーザーは一時的にrootになり、passwdを編集できます。

ただし、パスワードを編集できるのはあなただけで、他の人は誰でも編集できませんか?ただし、有効なユーザーアクセスはルートです。それでは、どうしてあなた以外のパスワードを変更できないのですか?

setuidを使用してプログラムを実行する場合、実際のユーザーはrootですが、実際のユーザーIDはまだあなたの名前であるとはどういう意味ですか?

回答:


13

プログラムで許可されていないため、他のパスワードを変更することはできません。プログラムはとして実行されているため、必要なパスワードを変更するためのシステム権限がありますrootが、プログラムはユーザーにこれらの権限を使用させる方法をユーザーに与えないように特別に設計されています。

ユーザーが一時的にrootになるということではなく、信頼されたプログラムがroot権限で実行されるということです。明らかに、ユーザーが許可されるべきことだけを行うようにユーザーを制限するように特別に設計されたプログラムのみを安全にsetuidできます。


したがって、uidを0に設定して(setreuidを使用して)シェルを開くと、有効なuidはrootになりますが、実際のuidはまだ私です。シェルには具体的に私を妨げる何かが組み込まれているとは思わないので、システム全体にアクセスできるということですか?
スターコーン

スタックスマッシング攻撃手法のコンテキストで疑問に思います。悪意のあるハッカーがスーパーユーザーレベルでシェルを開く場合。
スターコーン

@starcron:はい。実際、攻撃はsetuidルートシェルを作成するためにその攻撃を使用する方法を示すことによって実証されます。
デビッドシュワルツ

2

パスワードの変更時には、有効なユーザーIDではなく実際のユーザーIDがチェックされるため、有効なユーザーIDがrootであるにもかかわらず、パスワードのみを変更できます。変更できるのは実効ユーザーIDのみであり、実際のユーザーIDは変更できません。
rootユーザーのみが実際のユーザーIDを変更して、非特権ユーザーとしてプログラムを実行できます。実際のユーザーIDは、セッションの開始時に設定されるため、変更できません。
そのため、実際のユーザーIDは変更されないため、パスワードのみを変更できます(まだルートのIDではないため)。


0

Unixの初期のハックは、setuidシェルスクリプトへのシンボリックリンクを作成し、そのリンクを呼び出すこと-iでした。これにより、呼び出されsh -iたスクリプトを実行する代わりに、スクリプトが呼び出されます-i、意図したとおりにれる、対話型シェルを起動します。有効なユーザーIDを使用してpasswd、任意のユーザーまたはルート自体のファイルを変更できます。これを防ぐ最善の方法は、SELinuxを使用して、信頼スクリプトまたはプログラムが、SELinuxで実行を許可されている範囲外で変更できないようにすることです。

もう1つの方法は、重要なファイルに不変のビットを付けて、1つのセットをrootユーザーでも変更できないようにすることです(シングルユーザーモードを除く)

rootとして、パスワードを使用せずにシステムにログオンするようにユーザーを招待し、通常の特権プロセス以外のユーザーとして表示することができます。

ある種のネットワークファイルシステムを使用する場合、rootユーザーは、そのファイルスペースではrootの代わりに、信頼されていないコンピューターが大学のキャンパスなどの信頼できるネットワークに参加できるようになります。


0

パスワードの変更のみが許可されています。これは、パスワードを設定するプログラムは、何でも実行することができますが、パスワードのみを変更するようにプログラムされているためです。変更するパスワードを決定するために、実際のユーザーIDを確認します。

set-uidプログラムを呼び出しても実際のユーザーIDを変更できないため、プログラムはそれを使用してセキュリティを実装できます。オペレーティングシステムは、セキュリティをset uid rootプログラムに放棄します。

注:set uid rootプログラムは、実際のユーザーIDを変更することもできます(ただし、これはこのユースケースでは使用されません)。

警告:set uid rootは有害であると見なされます(理想よりもはるかに劣ります)。最近、機能を使用する必要があります(gnu / linuxおよびhttp://man7.org/linux/man-pages/man7/capabilities.7.htmlでファイルのアクセス許可などを設定するさまざまな方法を参照してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.