ファイル/ディレクトリに対する権限は誰が変更できますか?

ファイル/ディレクトリに対する権限は誰が変更できますか?

私は、ファイル/ディレクトリの所有者とルートがファイル/ディレクトリの権限を変更できる唯一のユーザーだと思います。私の言葉は正しいですか?または、権限を変更できる他のユーザーはいますか?

答え1

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

答え2

通常の作業では、ルートと所有者のみが可能ですchmod。さらに、ルート缶chownと所有者は、所有者がターゲットグループのメンバーである限り可能です。chgrpchgrp

セキュリティ上の理由から別のシナリオがあります。ファイルを含むディレクトリへの書き込みアクセス権を持つすべてのユーザーは、ファイルをコピーに置き換えて所有者になり、権限とコンテンツを変更する能力を得ることができます。

このように:

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としてファイルを作成しました。ルートはファイルを所有しているため、ファイルに書き込めず、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:)は自由にグループを変更できます。

関連情報