私は、ファイル/ディレクトリの所有者とルートがファイル/ディレクトリの権限を変更できる唯一のユーザーだと思います。私の言葉は正しいですか?または、権限を変更できる他のユーザーはいますか?
答え1
所有者とroot
(スーパーユーザー)のみがファイルまたはディレクトリの権限を変更できます。これは、所有者とスーパーユーザーが読み取り(r
)、書き込み(w
)、および実行(x
)権限を設定できることを意味します。ただし、chown
このコマンドはファイルとディレクトリのユーザー所有権を変更するためにのみ許可されますroot
。ユーザーが新しいグループのメンバーである場合は、chgrp
グループ所有権とファイル所有者の変更が許可されます。root
答え2
通常の作業では、ルートと所有者のみが可能ですchmod
。さらに、ルート缶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としてファイルを作成しました。ルートはファイルを所有しているため、ファイルに書き込めず、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
この機能を持つプロセス)のみがファイル所有者を変更できます。ファイル所有者は、ファイルグループを所有者が属するグループに変更できます。権限のあるプロセス(LinuxCAP_CHOWN
:)は自由にグループを変更できます。