誰がファイル/ディレクトリのパーミッションを変更できますか?


14

ファイル/ディレクトリの所有者とルートユーザーのみが、ファイル/ディレクトリのアクセス許可を変更できるユーザーであると確信しています。私は正しいですか、または権限を変更することも許可されている他のユーザーがいますか?

回答:


19

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


19
ユーザーが新しいグループのメンバーである場合、ファイルの所有者はそのファイルのグループ所有権を変更できます。
クサラナナンダ

7

通常の操作では、rootと所有者のみがを使用できchmodます。さらに、所有者がターゲットグループのメンバーである限り、root can 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

ディレクトリを作成し、ルートとしてファイルを作成しました。ルートはファイルを所有しているため、書き込みもできず、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

LinuxディストリビューションがWindowsのような追加のセキュリティ機能をサポートしているかどうか知っていますか?Windowsを使用している場合は、ディレクトリが許可されている場合でも削除を防ぐために、ファイルの削除許可を拒否に設定できます。
ケビン・リー

多くの(ほとんどの?)現在のLinuxフレーバーは、ファイルレベルのアクセス制御リストをサポートしています。getfacl / setfaclこれは、「クラシック」スタイルのファイルアクセス許可よりも柔軟性があります。* nixでのファイルの削除は、ディレクトリからファイルへのリンクを削除することで機能するため、ファイルの削除は常にディレクトリのアクセス許可によって制御されます。ファイルのパーミッション自体はそこでは何の役割も果たしません。
バス

「すべてがファイルである」というUnixの哲学に非常に忠実です。そのようなことはLinuxではできないと言っているのですか。
ケビン・リー

3
@KevinLiこの答えは完全ではありません。ディレクトリにスティッキービットを設定して、所有者以外のユーザーがファイルを削除または名前変更する機能を制限できます。この質問とその回答を参照してください: unix.stackexchange.com/questions/79395/…ACLやその他のスキームを使用する必要はありません。
アンドリューヘンレ

@KevinLi * nixファイルシステムは、Windowsのものとは大きく異なります。ファイルはディレクトリ階層とは別に存在し、ディレクトリ内でそれらを指す複数の「ハードリンク」を持つことができます。ファイルを削除すると、実際にはハードリンクが削除され、ディレクトリで実行されます。ファイルは、それを指しているハードリンクの数を追跡します。実際のファイルは、少なくとも1つのハードリンクが指している限り、ディスク上に残ります。このため、削除はディレクトリのパーミッションによって制御されてやるアンドリューが言うように、ファイルの所有者&ルートによって削除のみを許可する特別なオプションがあります。
バス

1

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

呼び出しプロセスの実効UIDは、ファイルの所有者と一致するか、プロセスに特権が必要です(Linux:CAP_FOWNER機能を備えている必要があります)。

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

そのため、rootとして実行されているプロセスは、CAP_FOWNER機能が低下していなければ、ファイルのパーミッションを変更できます。


また興味深いのはchown; のマニュアルページはchown(2)言う:

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.