回答:
プログラムで許可されていないため、他のパスワードを変更することはできません。プログラムはとして実行されているため、必要なパスワードを変更するためのシステム権限がありますroot
が、プログラムはユーザーにこれらの権限を使用させる方法をユーザーに与えないように特別に設計されています。
ユーザーが一時的にrootになるということではなく、信頼されたプログラムがroot権限で実行されるということです。明らかに、ユーザーが許可されるべきことだけを行うようにユーザーを制限するように特別に設計されたプログラムのみを安全にsetuidできます。
Unixの初期のハックは、setuidシェルスクリプトへのシンボリックリンクを作成し、そのリンクを呼び出すこと-i
でした。これにより、呼び出されsh -i
たスクリプトを実行する代わりに、スクリプトが呼び出されます-i
、意図したとおりにれる、対話型シェルを起動します。有効なユーザーIDを使用してpasswd
、任意のユーザーまたはルート自体のファイルを変更できます。これを防ぐ最善の方法は、SELinuxを使用して、信頼スクリプトまたはプログラムが、SELinuxで実行を許可されている範囲外で変更できないようにすることです。
もう1つの方法は、重要なファイルに不変のビットを付けて、1つのセットをrootユーザーでも変更できないようにすることです(シングルユーザーモードを除く)
rootとして、パスワードを使用せずにシステムにログオンするようにユーザーを招待し、通常の特権プロセス以外のユーザーとして表示することができます。
ある種のネットワークファイルシステムを使用する場合、rootユーザーは、そのファイルスペースではrootの代わりに、信頼されていないコンピューターが大学のキャンパスなどの信頼できるネットワークに参加できるようになります。
パスワードの変更のみが許可されています。これは、パスワードを設定するプログラムは、何でも実行することができますが、パスワードのみを変更するようにプログラムされているためです。変更するパスワードを決定するために、実際のユーザー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でファイルのアクセス許可などを設定するさまざまな方法を参照してください)