
他人の setuid ビットを設定できません。なぜ?安全ロックがありますか?
$ ls -l
-rwxrwxr-x 1 allexj allexj 16784 Mar 11 17:30 a.out
$ chmod o=+s a.out
$ ls -l
-rwxrwx--- 1 allexj allexj 16784 Mar 11 17:30 a.out
答え1
man chmod
setuidとsetgidに専用の章があります。
しかし、まず名前を詳しく見てみましょう。あなた番号、設定GID。
他の人には設定する必要がありますああidビット。しかし、そのような点を持つことは意味がないので存在しません。
答え2
従来のUnix権限は12ビットで構成されています。
user group other extra
0 0 0 0 0 0 0 0 0 0 0 0
r w x r w x r w x s s t
これらの追加ビットを使用すると、3つの「追加モデル」を有効にできます。[1]:
- 最初のビット(通常は小文字sで記述)は次のとおりです。設定値ビットを使用して実行可能ファイルを実行すると、すべてのユーザーが独自のビットを持つことができます。EUユーザーID[2]実行ファイルの所有者のUIDに設定します。
- 2番目の数字(小文字sとしても表示)は次のとおりです。設定setuid ビットと効果と意味は同じですが、 setuid とは異なり、グループとビットに適用されます。イジドすべてのユーザーが自分のグループをファイル所有者のグループに設定したかのように、実行可能ファイルを効果的に実行できるようにします。
- 最後の3番目は粘り強いビット[サム](制限された削除フラグとも呼ばれます)これはほとんど常にディレクトリに使用され、誰でもその中にファイルを作成できるようにし、ファイルがその所有者に「固定」されることを保証し、誰も(ルートを除く)ファイルを削除できないようにします。最新のシステムで最も一般的に使用されるものは次のとおりです。/tmp目次。誰でもディレクトリにファイルを作成して削除できるので、誰もが他のユーザーのファイルを台無しにすることができないように、誰でもディレクトリを共有できます。ディレクトリの場合、このビットはほとんどのUnix(およびUnixファミリー)システムで基本的に同じ動作を持ちます。ただし、ファイルの使用は、さまざまなUnix(およびUnixのような)システムでは均一ではありません。たとえば、最新のLinuxカーネルはこれを完全に無視しますが、他のシステムではいくつかの特別な用途があります。[4]
現代のシステムでこれらのビットがどのように機能するかを知っているので、自分で質問してください。ビット12が上記の動作に特に使用されていない場合、これを「他の」ユーザに適用すると、setuidビットの動作はどうなりますか?それのように見えますか?これはsetuidとsetgitを使用すると明らかです。しかし、「すべてのユーザーが自分の有効なユーザーIDを別のユーザーのIDとして持つことを許可します」とはどういう意味ですか?私にとって、それはゼロで割るように見えますが、これは論理的に言葉ではありません。なぜなら、答えは「有効なユーザーIDは同時に他のすべてのユーザーIDになるでしょう」かもしれないからです。安全ロックやヒントなしでこのようなものを持つことは意味がありません。もともとUnixデザイナーは、おそらくそのような愚かなことをすることはあまり意味がないと判断し、そのためのより良いアプリケーションを見つけることにしました。 (彼らは権限に11ビットを使用することもできましたが、実際にはすべて必要だと思いました。
お役に立てば幸いです。