私が読んでいるman
ページchown
。関数が正常に返されたときにモードをクリアする理由を理解できませんS_ISUID
。S_ISGID
答え1
私はあなたがマニュアルページでこれを指摘したと思います。
権限のないユーザーが実行可能ファイルの所有者またはグループを変更すると、S_ISUIDおよびS_ISGIDモードビットがクリアされます。
それでは、なぜ今は消去されたのですか?次の場合にのみ削除されることがわかります。実行可能ファイル文書。これは、ビット(SUID / SGID)のいずれかが設定されていると、権限のないユーザーが新しい所有者としてファイルを実行できるためです。これは膨大なセキュリティ抜け穴になります。
答え2
私の考えでは、あなたが間違って読んだと思いますman 2 chown
:あなたS_ISUID
とは消去する必要はなくS_ISGID
、権限のないユーザーとしてその機能を使用すると自動的に消去されます。プログラムが実行されている場合、root
動作(Linux)はカーネルのバージョンによって異なります。
これらのビットを設定する必要がある場合は、そのビットを再適用するだけです(設定したいアカウントにそのビットを設定する権限があるとします)。
マニュアルページから:
When the owner or group of an executable file are changed by an
unprivileged user the S_ISUID and S_ISGID mode bits are cleared.
POSIX does not specify whether this also should happen when root does
the chown(); the Linux behavior depends on the kernel version. In
case of a non-group-executable file (i.e., one for which the S_IXGRP
bit is not set) the S_ISGID bit indicates mandatory locking, and is
not cleared by a chown().