ファイルの所有者またはrootユーザーのみがファイルの権限を変更できます。ファイルまたはその親ディレクトリの現在の権限は関係ありません¹。これはPOSIXで指定されています:
アプリケーションは、プロセスの実効ユーザーIDがファイルの所有者と一致すること、またはプロセスがこれを実行するための適切な特権を持っていることを確認する必要があります。
ほとんどのuniceでは、「適切な特権」はrootとして実行することを意味します。これらの条件が満たされない場合、chmod
通常はで失敗しますがEPERM
、セキュリティ違反によるプログラムの中止などの他の動作は許可されます。
さらに、一部のUNIXバリアントには、システム固有の承認または禁止の方法がありますchmod
。たとえば、Linuxには、プロセスがその所有者に関係なくファイルのアクセス許可およびその他のメタデータを変更できる機能(CAP_FOWNER
)があります。
chmod
ファイルが存在し、アクセス可能であり、適切な所有者がいるにもかかわらず、失敗する可能性がある他の理由があります。一般的なものには、読み取り専用ファイルシステム、またはFATなどのアクセス許可をサポートしないファイルシステムが含まれます。あまり一般的ではないものには、Linuxのext2ファイルシステムおよび後続の不変属性などのシステム固有の制限が含まれます。
¹ 彼は実行中のプロセスとして除いてchmod
、それはファイルとそれがそうすることを横切り、他のディレクトリを含むディレクトリに実行権限を持っている必要がありますので、ファイルにアクセスできる必要があります。