chmodはいつ失敗するのですか?

chmodはいつ失敗するのですか?

どのような状況で失敗しますかchmod

マニュアルページを見ましたが、使用法のみを指定し、どのような状況で動作しないかについては詳細に説明しません。

chmod次のような場合には効果があると思います。

  • あなたはルートです
  • ターゲットファイルがあります(そして通常モードビットが設定されています。つまり、固定ビット以外のもの)。

ユーザーはchmodグループアクセス権を持つファイルの権限を変更できますか?読み書きアクセスに関連していますか?

答え1

ファイル所有者またはrootユーザーのみがファイル権限を変更できます。ファイルまたはその親ディレクトリの現在の権限は関係ありません。これは以下で指定されます。POSIX:

アプリケーションは、プロセスの有効なユーザーIDがファイルの所有者と一致していること、またはプロセスにこの操作を実行するための適切な権限があることを確認する必要があります。

ほとんどの unice では、「適切な権限」とは、root として実行することを意味します。これらの条件が満たされない場合、通常は失敗してchmod表示されますが、EPERM他の操作(セキュリティ違反によるプログラムの中断)は許可されます。

また、一部のUnixバリアントにはシステム固有の認証または許可しない方法がありますchmod。たとえば、Linuxでは能力CAP_FOWNER)を使用すると、プロセスは所有者に関係なくファイルの権限やその他のメタデータを変更できます。

chmodファイルが存在し、アクセス可能で、適切な所有者があっても、他の理由で失敗する可能性があります。一般的なファイルシステムには、読み取り専用ファイルシステムやFATなどの権限をサポートしないファイルシステムがあります。あまり一般的ではない制限には、次のシステム固有の制限が含まれます。不変属性Linuxのext2ファイルシステムとそれに続く製品。

1実行中のプロセスはファイルにアクセスできる必要があることを除いて、ファイルを含むディレクトリとそれを通過する他のディレクトリに対する実行権限が必要です。chmod

答え2

必要な詳細は、chmod()システムコールのマニュアルページにあります。man chmod.and をman 2 chmod使用 man chattrする代わりに、man 2 setxattrchattr/setxattr() は chmod によって設定された既存の Unix 権限の動作を改善するファイル属性を設定します。

答え3

ユーザーは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

答え4

UNIX標準によると、「プロセスの有効なユーザーIDはファイルの所有者と一致する必要があります。そうしないと、プロセスにこれを実行するための適切な権限が必要です。」

適切な権限の部分には説明が必要です。既存のシステムでは、プロセスの有効なUID(LinuxではファイルシステムUID、以下を参照)が0[つまり、root]の場合、すべてのファイルに対してchmodが許可されます。

Linuxには次のシステムがあります。能力、このビットはCAP_FOWNERすべてのファイルで使用される機能を制御します。デフォルトでは、ルートプロセスを生成するための呼び出しが行われます(setuidバイナリを実行するか、実際のUIDchmodexecve()0の場合)、有効なUIDが0に設定されている(および非設定になっている場合は削除されます)、すべての機能が付与されます。 0値)とCAP_FOWNERファイルシステムのUIDが0に設定されている場合は有効になり、ゼロ以外の値に設定されている場合は無効になる機能セット。詳しくはマンページをご覧ください。

固定ビットについて言及したが、ユーザーがファイルに割り当てられているグループに属していない場合、ファイルにsetgidビットを設定できないことを無視しました。実装によって定義された他の場合は、setuid または setgid ビットも無視できます。

関連情報