
一般ユーザーがpasswdファイルを変更しようとすると、ユーザーはsetuidを介して効果的なユーザーアクセス権を取得します。ユーザーは一時的にルートになり、パスワードを編集できます。
しかし、パスワードは自分だけで変更でき、他人のパスワードは変更できませんか?ただし、有効なユーザーアクセスはルートです。それでは、なぜ自分のパスワード以外のパスワードを変更することは許可されませんか?
setuid でプログラムを実行すると、実効ユーザーは root ですが、実際のユーザー ID はまだあなたの名前です。これが実際に意味するものは何ですか?
答え1
他のパスワードは変更できません。プログラムで許可しないからです。このプログラムはで実行されるため、必要なパスワードを変更するシステム権限を持っていますがroot
、プログラムはユーザーにこれらの権限を使用する方法を提供しないように特別に設計されています。
一時的にrootになるのは、ユーザーではなくroot権限で実行される信頼できるプログラムです。明らかに、ユーザーが許可する必要があるタスクのみを実行するように制限するように特別に設計されたプログラムのみが、setuidを安全に使用できます。
答え2
有効なユーザーIDはrootですが、パスワード変更時には有効ユーザーIDではなく実際のユーザーIDを確認するため、パスワード変更のみ可能です。実際のユーザーIDではなく、有効なユーザーIDのみを変更できます。
rootユーザーだけが実際のユーザーIDを変更して、権限のないユーザーとしてプログラムを実行できます。実際のユーザーIDはセッションの開始時に設定されるため変更できません。
そのため、実際のユーザーIDは変更されず、パスワードのみを変更できます(これはまだrootユーザーではなくユーザーIDであるため)。
答え3
Unixの最初のハッキングは、setuidシェルスクリプトへのシンボリックリンクを作成してそのリンクを呼び出すことでした-i
。これにより、スクリプトが呼び出され、sh -i
期待どおりに呼び出されたスクリプトを実行するのではなく、インタラクティブシェルが実行され、完全な-i
権限が付与されます。有効なユーザーIDは、passwd
すべてのユーザーまたはルート自体のファイルを変更するために使用できます。これを防ぐための最善の方法は、SELinuxを使用して、信頼できるスクリプトまたはプログラムがSELinuxで実行できる領域の外側で変更されるのを防ぐことです。
もう1つの手法は、rootユーザーでもそのファイルセットを変更できないように、重要なファイルに不変ビットを設定することです(シングルユーザーモードを除く)。
rootとしてユーザーを招待して、パスワードなしでシステムにログインし、任意のユーザーとしてマークすることができますが、一般的な権限を持つプロセスはこれを避けるために最善を尽くします。
ある種のネットワークファイルシステムを使用している場合、rootユーザーはrootではなくそのファイルスペースのすべての人として扱われるため、信頼できないコンピュータは大学キャンパスなどの信頼できるネットワークに参加できます。
答え4
パスワード設定プログラムは何でもできますが、パスワードのみを変更するようにプログラムされているため、パスワードのみを変更できます。実際のユーザーIDを確認して、変更するパスワードを決定します。
set-uid ルーチンを呼び出しても実際のユーザー ID を変更できないため、プログラムはセキュリティー目的で悪用する可能性があります。オペレーティングシステムはset uid rootプログラムのセキュリティを放棄します。
注:set uid rootプログラムは実際のユーザーIDを変更することもできます(ただし、このユースケースでは役に立ちません)。
警告:uidルート設定は有害と見なされます(理想的ではありません)。最近は関数を使用する必要があります(参照:Gnu / linuxでファイル権限などを設定する他の方法は何ですか?そしてhttp://man7.org/linux/man-pages/man7/capability.7.html)