ファイル/ディレクトリの権限を変更できるのは誰ですか?

ファイル/ディレクトリの権限を変更できるのは誰ですか?

ファイル/ディレクトリの権限を変更できるのは、ファイル/ディレクトリの所有者とルート ユーザーだけだと思います (確信はありません)。私の考えは正しいでしょうか、それとも権限を変更できる他のユーザーもいるのでしょうか?

答え1

ファイルまたはディレクトリの権限を変更できるのは、所有者とroot(スーパーユーザー) だけです。つまり、所有者とスーパーユーザーは、読み取り ( r)、書き込み ( w)、および実行 ( x) 権限を設定できます。ただし、 コマンドを使用してファイルとディレクトリのユーザー所有権を変更できるのchownは、 だけです。ユーザーが新しいグループのメンバーである場合、 コマンドを使用してrootグループ所有権を変更することは、ファイルの所有者とchgrpに許可されます。root

答え2

通常の操作では、root と所有者のみが を実行できますchmod。また、root はchownと を実行できchgrp、さらに所有者は、chgrp所有者が対象グループのメンバーである限り を実行できます。

ただし、セキュリティ上の理由から、別のケースもあります。ファイルを含むディレクトリへの書き込み権限を持つユーザーは、ファイルをコピーに置き換えて所有者になり、権限と内容を変更できるようになります。

そのようです:

14:14 mybox:~ mkdir mydir
14:14 mybox:~ cd mydir/
14:14 mybox:mydir echo foo | sudo tee yourfile
foo
14:14 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  3 me    staff  102 Apr 11 14:14 .
-rw-r--r--  1 root  staff    4 Apr 11 14:14 yourfile

ディレクトリを作成し、root としてファイルを書き込みました。root がファイルを所有しているため、書き込むことも、chmod することもできません。

14:15 mybox:mydir echo bar > yourfile 
-bash: yourfile: Permission denied
14:15 mybox:mydir chmod a+x yourfile
chmod: Unable to change file mode on yourfile: Operation not permitted

ただし、ディレクトリへの書き込み権限は持っているので、ファイルを置き換えて所有権を取得することができます。

14:15 mybox:mydir mv yourfile yourfile2
14:15 mybox:mydir cp yourfile2 yourfile
14:15 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  4 me   staff  136 Apr 11 14:15 .
-rw-r--r--  1 me   staff    4 Apr 11 14:15 yourfile

そして、私たちが所有者になったので、もちろんそのファイルに対して好きなことをすることができます。

14:15 mybox:mydir echo bar > yourfile 
14:15 mybox:mydir chmod a+x yourfile
14:16 mybox:mydir cat yourfile
bar

同様に、書き込み権限を持つユーザーは、どれでもファイルへのフルパス内のディレクトリは、その時点からのディレクトリ構造を置き換えることができ、指定された名前のファイルの所有権を取得できます。もちろん、実際の元のファイル (「yourfile2」に名前を変更したもの) の所有権や権限は変更されません。

14:17 mybox:mydir ls -l yourfile2
-rw-r--r--  1 root  staff  4 Apr 11 14:14 yourfile2

答え3

このchmodコマンドは、同じ名前のシステム コールを直接呼び出します。chmod(2)システム コールのマニュアル ページ (Linux 4.10 の場合) には次のように記載されています。

呼び出しプロセスの有効な UID がファイルの所有者と一致するか、プロセスが特権を持っている必要があります (Linux: 権限を持っている必要がありますCAP_FOWNER)。

呼び出しプロセスに特権がなく (Linux: 機能がないCAP_FSETID)、ファイルのグループがプロセスの実効グループ ID またはその補助グループ ID のいずれかと一致しない場合、ビットは S_ISGIDオフになりますが、これによってエラーが返されることはありません。

したがって、ルートとして実行されているプロセスは、権限を削除していない限り、任意のファイルの権限を変更できますCAP_FOWNER


また興味深いのはchown、 のマニュアルページには次のようにchown(2)書かれていることです。

特権プロセス (Linux: 機能を持つプロセス) のみがCAP_CHOWNファイルの所有者を変更できます。ファイルの所有者は、そのファイルのグループを、その所有者がメンバーである任意のグループに変更できます。特権プロセス (Linux: 機能を持つプロセスCAP_CHOWN) は、グループを任意に変更できます。

関連情報