特定のユーザーにのみsetuidを適用できますか?

特定のユーザーにのみsetuidを適用できますか?

私が理解したところ、setuidビットは、ファイルを実行できるすべてのユーザーがファイルの所有者としてそのファイルを実行することを意味します。 ACLなどを使用して、選択したユーザーのリストだけがファイルを所有者として実行し、他のすべてのユーザーにファイルを自分で実行させることは可能ですか?

sudoそれとも(or)を使うべきですかsudosu

答え1

あるユーザーがファイルを実行するとsetuidを実行することはできませんが、他のユーザーがファイルを実行するとsetuidなしで実行することはできません。 setuid ビットはアクセス制御リストに含まれません。ファイルの場合は開いているか閉じています。

部分的に目標を達成できます。特定のユーザーだけがsetuidファイルを実行することを許可できますが、他のユーザーは実行を完全にブロックします。

たとえば、仮想の「privileged_command」プログラムを考えてみましょう。 setuidに設定し、admグループのメンバーのみがaclを介して実行できるようにするには、次の方法で実行できます。

$ chown root.root privileged_command
$ chmod 4000 privileged_command
$ ls -l privileged_command
---S------ 1 root root 152104 Nov 17 21:15 privileged_command
$ setfacl -m g:adm:rx privileged_command

これはグループ権限のみを必要とする非常に簡単な例です。ただし、 setfacl を使用してプログラムを実行できない、または実行できない複雑なユーザー/グループのセットを作成できます。唯一の問題は、コマンドを実行できるすべての人がそのコマンドをsetuidとして実行することです。他の人は拒否され、まったく実行できません。

これはあなたが実際に求めるものと私が考えることができる最も近いものです。つまり、あなたが要求するのはおそらくBad Idea™です。追加権限のベストプラクティスは、次のユーザーに適用されます。認められたこれらの特権を行使する積極的に権力を行使する意図がある場合にのみ権力を取ってください。これがsudoの完全な目的です。特定のコマンドを実行している人によって異なる権限で自動的に実行されるようにすると、誤って誤用される可能性があります。これが通常、常にrootとしてログインしない理由です。

さらに、この方法で ACL を使用すると、後でセキュリティの脆弱性が発生する可能性があります。 ACLはほとんど使用されず、あまり必要ありません。この場合、setuidプログラムを実行できる人を制御するためにこれを使用すると、誰がどの権限を持っているかをすぐに知ることはできません。これはすぐに行政的な悪夢になることができます。

ACLを使用できる場所がまったくないとは言えませんが、使用しない指が多い場合、これが良いアイデアである説得力のあるケースを見た回数は片手に挙げることができます。

関連情報