chownはsetuidビットを削除します:バグまたは機能?


14

再現する手順:

germar@host:~$ cd /tmp/
germar@host:/tmp$ touch test && chmod u+s test && ls -la test
-rwSr--r-- 1 germar germar 0 Nov  2 20:11 test
germar@host:/tmp$ chown germar:germar test && ls -la test
-rw-r--r-- 1 germar germar 0 Nov  2 20:11 test

Debian squeezeおよびUbuntu 12.04でテスト済み


Fedora 17でも同様です。
-BenjiWiebe

回答:


17

chownのドキュメントによるとバグではありません:

$ info coreutils 'chown invocation'

   The `chown' command sometimes clears the set-user-ID or set-group-ID
permission bits.  This behavior depends on the policy and functionality
of the underlying `chown' system call, which may make system-dependent
file mode modifications outside the control of the `chown' command.
For example, the `chown' command might not affect those bits when
invoked by a user with appropriate privileges, or when the bits signify
some function other than executable permission (e.g., mandatory
locking).  When in doubt, check the underlying system behavior.

ありがとう、jlliagre。info coreutils以前は知りませんでした。私はマンページを読んで、ウェブを検索しただけです。
ジャーマー

12

これは仕様によるものであり、標準的な動作です。POSIX標準の引用:

適切な特権を持つプロセスによってchownが呼び出されない限り、正常なファイルのset-user-IDおよびset-group-IDビットは正常に完了するとクリアされます。他のファイルタイプのset-user-IDおよびset-group-IDビットはクリアされます。

sちなみにスティッキーではなく、setuid(またはグループ列のsetgid)です。)

この動作は、基になるシステムコールの動作に従います。(一部のシステムでは、setxidビットは実行可能ファイルに対してのみクリアされます)。

setuidビットを削除する理由は、所有者を変更すると、プロセスの有効なユーザーIDになるユーザーも変更されるためです。特に、ユーザーがファイルcp /bin/sh foo; chmod u+s foo; chown joe fooを配布できるシステムでは、巨大なセキュリティホールであるjoeに属するsetuid実行可能ファイルを作成します。


ひとピックに賛成!SUID / SGIDは「スティッキー」ビットではありません!
ジム・デニス

SUID / SGIDを保持することのセキュリティへの影響に関する素晴らしいポイント。私はその文を読むまでその振る舞いに悩まされました。私は、追加することになりますが、私はchownを見たことがないではない、rootとして実行している場合でも、ビットをクリア。「適切な特権」が何を意味するのか知りたい。
広大なスーパーマン

1
@vastlysuperiorman従来のUnixプラットフォームでは、「適切な特権」はユーザーID 0を意味します。しかし、POSIXはシステムが独自のセキュリティポリシーを定義することを許可します。たとえば、Linuxでの多くの操作では、「適切な権限」が機能として実装されます(デフォルトではrootのみが取得します)。この特定のケースでは、権限に関係なくchownのsetxidビットを抑制します(すべてではないにしても、ほとんどのUnixバリアント)。ただし、WindowsのPOSIXレイヤーは異なる動作をする場合があります。
ジル「SO-悪であるのをやめる」
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.