どのような状況でchmod失敗しますか?
マニュアルページを確認しましたが、使用方法が指定されているだけであり、動作しない状況については詳しく説明していません。
私chmodはうまくいくと思います:
- あなたは根です
- あなたはターゲットファイルを所有しています(そして平凡なモードビット、つまりスティッキービットを設定していません、その他)
ユーザーはchmod、グループアクセス権を持つファイルのアクセス許可を変更するために使用できますか?読み取り/書き込みアクセスに関連していますか?
どのような状況でchmod失敗しますか?
マニュアルページを確認しましたが、使用方法が指定されているだけであり、動作しない状況については詳しく説明していません。
私chmodはうまくいくと思います:
ユーザーはchmod、グループアクセス権を持つファイルのアクセス許可を変更するために使用できますか?読み取り/書き込みアクセスに関連していますか?
回答:
ファイルの所有者またはrootユーザーのみがファイルの権限を変更できます。ファイルまたはその親ディレクトリの現在の権限は関係ありません¹。これはPOSIXで指定されています:
アプリケーションは、プロセスの実効ユーザーIDがファイルの所有者と一致すること、またはプロセスがこれを実行するための適切な特権を持っていることを確認する必要があります。
ほとんどのuniceでは、「適切な特権」はrootとして実行することを意味します。これらの条件が満たされない場合、chmod通常はで失敗しますがEPERM、セキュリティ違反によるプログラムの中止などの他の動作は許可されます。
さらに、一部のUNIXバリアントには、システム固有の承認または禁止の方法がありますchmod。たとえば、Linuxには、プロセスがその所有者に関係なくファイルのアクセス許可およびその他のメタデータを変更できる機能(CAP_FOWNER)があります。
chmodファイルが存在し、アクセス可能であり、適切な所有者がいるにもかかわらず、失敗する可能性がある他の理由があります。一般的なものには、読み取り専用ファイルシステム、またはFATなどのアクセス許可をサポートしないファイルシステムが含まれます。あまり一般的ではないものには、Linuxのext2ファイルシステムおよび後続の不変属性などのシステム固有の制限が含まれます。
¹ 彼は実行中のプロセスとして除いてchmod、それはファイルとそれがそうすることを横切り、他のディレクトリを含むディレクトリに実行権限を持っている必要がありますので、ファイルにアクセスできる必要があります。
UNIX標準によれば、「プロセスの実効ユーザーIDはファイルの所有者と一致する必要があります。そうでない場合、プロセスにはこれを行うための適切な特権が必要です。」
適切な特権についてのビットはいくつかの説明が必要です。従来のシステムでは、プロセスの有効なUID(LinuxではファイルシステムUIDですが、以下を参照)が0 [ルート]の場合、すべてのファイルでchmodが許可されます。
Linuxにはcapabilitiesと呼ばれるシステムがあり、CAP_FOWNERビットはchmodすべてのファイルで使用する機能を制御します。デフォルトでは、すべての機能は、execve()呼び出しがルートプロセスを作成するとき(setuidバイナリを実行するか、実際のUIDが0のとき)、または実効UIDが0に設定されたときに(そしてゼロ以外の値に設定されたときに削除されて)付与されます。を含む一連の機能CAP_FOWNERは、ファイルシステムUIDが0に設定されている場合に有効になります(ゼロ以外の値に設定されている場合は無効になります)。詳細については、マンページをお読みください。
スティッキービットについて言及しましたが、ユーザーがファイルに割り当てられているグループに属していない場合でも、ユーザーがファイルにsetgidビットを設定できない可能性があるという事実は省略しました。setuidまたはsetgidビットは、追加の実装定義の状況では無視される場合もあります。
ユーザーはchmodを使用して、グループアクセス権を持つファイルの権限を変更できますか?
見てみてみませんか?
$ touch foo
$ sudo install -o root -g $(id -gn) -m660 foo bar
$ ls -la bar
-rw-rw---- 1 root staff 0 Oct 21 21:33 bar
$ chmod g-w bar
chmod: bar: Operation not permitted
$ chmod g+x bar
chmod: bar: Operation not permitted
chmodから、その権限を確認できます。妄想を感じている場合は、fsync確認する前に確認してください。