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