SUID権限が必要なのはなぜですか? [閉鎖]

SUID権限が必要なのはなぜですか? [閉鎖]

実行可能なバイナリにSUID権限が必要な理由に関する私の懸念を理解するには、この長い紹介を読んでください。

  • LinuxのプロセスはEUIDを使って学習します。有効なユーザーIDそれ自体。
  • ユーザーの権限は、プロセスが他のファイルと対話する方法(プロセスがファイルに書き込むことができるかどうか)を決定するために使用されます。

以下を使用してパスワードを変更するシナリオを検討してください。/usr/bin/passwd

実生活でのLinux

  • パスワードはに保存されます。ファイルは権限()を持つファイル/etc/shadowに属します。rootrw-------
  • もし $passwd権限がありますrwx--x--x。これは、ルートのみロジックを変更できることを意味します。パスワードプログラム
  • userAプログラムを実行すると、passwdプロセスは次のように始まります。ルイド=EUユーザーID=ユーザーA

結果は次のとおりです。プログラムが実行されます。 ㅏpasswd プロセス起動しましたが、パスワードを変更できません。EUユーザーIDはいユーザーAそしてユーザーAを書き込めません/etc/shadow

この時SUID権限が必要です到着スエイド設定を許可EUユーザーIDプロセスを生成するためにバイナリが実行されるプロセス。これEUユーザーIDバイナリの所有者として設定されます。

  • 環境SUID権限/usr/bin/passwdブランド所有者の場合EUユーザーIDどのpasswd プロセス任意のユーザーによって開始されましたEUユーザーID~のroot
  • rootに書き込むことができるので、すべての/etc/shadowユーザーが次のようにpasswd実行できます。passwd プロセスこれは変わることができます/etc/shadow

持つSUID権限なぜなら、LinuxではEUユーザーIDプロセスの所有者は実行可能なバイナリの所有者としてハードに設定されません(プロセスは実行時に生成されます)。

私の理想的なLinux

不要SUID権限。実行ファイルの場合空A作成者(および所有者)ユーザーA、実行できるすべてのユーザー空A作成しますプロセスそしてEUユーザーID=ユーザーA

パスワードを変更するシナリオでは、このアイデアの論理は次のとおりです。

  • /usr/bin/passwd唯一の所有者ですロジックを変更できます。
  • 内部ロジック/usr/bin/passwdでは、ユーザーは自分のパスワードのみを変更でき、他のユーザーのパスワードは変更できません。
  • 他のユーザーは変更できません/usr/bin/passwdできる。
  • /etc/shadow書くことしかできないroot

結果は次のとおりです。権限のないユーザーがuserA実行できます$passwdpasswd プロセス。このプロセスではEUユーザーID=shadowだからファイルに書き込むことができます。

この理論により、私たちは以下を達成することができます。誰もが特別な措置を取らずに自分のパスワード(および自分のパスワードのみ)を変更できます。SUID権限

ベストアンサー1

どちらの例も setuid の仕組みを説明しています。ただし、「理想的なLinux」では、すべての実行可能ファイルが実行可能ファイル所有者のEUIDで始まり、システム内のすべての実行可能ファイルがsetuid実行可能ファイルになります。

これは明らかに多くの問題を引き起こす。いくつかの例を挙げると、すべてのルート所有の実行可能ファイルはUID検証を実行し、setuid()プロセスのEUIDをroot以外のユーザーにリセットするように呼び出す必要があります(プログラムに他の権限がないことが必要な場合)。ユーザーはプロセスが誤ったEUIDで実行され、誤った慣行によって重大な結果が生じる可能性があるため、他のユーザーは実行可能ファイルを提供できません(たとえば、ユーザーが所有するすべてのファイルへchmod 777のアクセスも許可されています)。そして、これがもっとあります。

setuidバイナリを持たない一般権限には、権限のないユーザーが特権操作を実行できるようにする別のメカニズムが必要です。 Setuid バイナリはこれらの特権の昇格を許可し、アクセス制御はプログラムロジックで実装されます。

おすすめ記事