私はuserを作成し、small
それをグループに追加し、kek
グループがユーザーのホームディレクトリにあるファイルのみを読み取ることを許可しました。次に、すべてのファイルをroot:kek
。small
私が実行したコマンドは次のとおりです。
useradd -ms /bin/bash small
groupadd kek
usermod -a -G kek small
chown -R root:kek /home/small/*
chmod -R g=r /home/small/*
その後、ファイルを削除しようとすると、次のようになります。
$ ls -l
total 16
-rw-r--r-- 1 root kek 240 Jun 23 06:17 Dockerfile
-rw-r--r-- 1 root kek 39 Jun 21 09:17 flag.txt
-rw-r--r-- 1 root kek 2336 Jun 22 14:19 server.py
-rw-r--r-- 1 root kek 24 Jun 22 08:16 small.py
$ rm flag.txt
$ ls -l
total 12
-rw-r--r-- 1 root kek 240 Jun 23 06:17 Dockerfile
-rw-r--r-- 1 root kek 2336 Jun 22 14:19 server.py
-rw-r--r-- 1 root kek 24 Jun 22 08:16 small.py
$ whoami
small
なぜこれが起こるのですか?
答え1
ファイルを削除できるかどうかは、ファイルの属性ではなく、ファイルが配置されているディレクトリの属性です。ユーザーは書き込めないディレクトリにあるファイルを削除できません。
ファイル(およびサブディレクトリ)はディレクトリノードのエントリです。ファイルを削除するにはディレクトリノードからファイルのリンクを解除する必要があるため、ディレクトリ内のファイルを削除するにはディレクトリへの書き込み権限が必要です。
- ファイルの書き込み権限によって、ファイル内容の変更が許可されるかどうかが決まります。
- ディレクトリの書き込み権限は、ディレクトリの内容に対する変更が許可されるかどうかを決定します。
関連:
答え2
Unixでは、ファイルを削除せずにディレクトリリストから削除します。ファイルにディレクトリリストがなくなり(複数のものがある場合があります)、プロセスによって開かれなくなった場合は削除されます。
ディレクトリへの書き込み権限がある場合は、ファイルディレクトリのリストを削除できます。
何をすべきか
- オプション1ディレクトリへの書き込み権限を削除します。
- オプション2は、ディレクトリ(
chmod +t «directory-name»
)に固定ビットを追加します。所有者とrootユーザー(実際にCAP_FOWNER機能を持つユーザー)のみがファイルを削除できるようにします。ユーザーがファイルを追加できるように書き込み権限が必要な場合は、このオプションを使用してください。