setguid フォルダ内のファイルの移動と削除

setguid フォルダ内のファイルの移動と削除

メール ファイルをクリーンなバージョンに置き換える必要がありました (このマシンでのメールの機能はすべて cron ジョブを監視するだけなので、n 日以上経過したメールを削除しない理由はありません)。

このファイルには私のユーザー アカウントの読み取り/書き込み権限がありますが、他のユーザーやグループには権限がありません。setguid ビットが /var/spool/mail に設定されているため、グループ所有権はメール グループです。

私はメールグループのメンバーではありませんでした。

drwxrwsr-x 2 ルートメール 4096 9月 2日 15:17 。
drwxr-xr-x 14 root root 4096 5月10日 09:27 ..
-rw------- 1 myuser メール 219722 9月 2 04:56 myuser

自分自身をメール グループのメンバーにするまで、このファイルを移動または削除することはできませんでした。

私の質問は「なぜ?」です。このファイルの読み取りと書き込みの両方の権限を持っているはずの私自身を、そのどちらも持っていないグループのメンバーにすると、ファイルを移動したり削除したりする権限が私に与えられるのはなぜでしょうか?

答え1

これはrmmv(および同様のもの)にはディレクトリ構造の変更が含まれており、wそのディレクトリに対する書き込み( )権限がない限り、それを実行できないためです。

これは、関連するファイルの権限とは無関係であり、親ディレクトリに対する十分な権限のみが必要です。操作はrm実際にはunlink(2)システム コールであり、ディレクトリのファイルと inode のマッピングからファイルをリンク解除するだけであることに注意してください。mv同じファイル システム内で -ing を実行すると、rename(2)ファイルの inode が新しいディレクトリにマップされます。

ご覧のとおり、これらすべてでは、ファイル自体の権限に関係なく、親ディレクトリを変更する必要があるため、w新しいファイルの名前変更、削除、作成にはディレクトリに対する権限が必要です。

ディレクトリに SETGID ビットが設定されると、そのディレクトリ上のすべてのファイルは、そのディレクトリの所有者グループと同じグループによって所有されるようになります。

あなたの場合、/var/spool/mailディレクトリはroot:mail権限 で所有され775、STDGID ビットが設定されているため、このディレクトリの下にあるすべてのファイルは同じグループ によって所有されることになりますmail

現状では、名前の変更や削除を行う場合は、ディレクトリに対する十分な権限、またはグループのメンバーでmyfileある必要があります。前述したように、 の権限はここでは無関係です。/var/spool/mailrootmailmyfile

答え2

これは、ファイルを移動または削除するときに重要な権限は親ディレクトリの権限であるためだと思います。ファイルを移動すると、ファイルのコピーが作成され、元のファイルが削除されるため、これを行うにはディレクトリに対する適切な権限が必要になります。この場合、ユーザーをメール グループに追加すると、必要な権限が付与されます。

関連情報