私は自分が持っていなくても書き込み権限のないファイルを移動できることに気づきました。ディレクトリへの書き込み権限があるため、ディレクトリを移動できるようです。しかし、この場合、ソースファイルを保護する方法はありますか?
このファイルの権限は次のとおりです。
cgi-bin> ls -al
drwxrwxrwx 3 voyager endeavor 512 Feb 1 10:45 .
drwxrwxrwx 6 voyager endeavor 512 Feb 1 09:38 ..
-rwxr-xr-x 1 voyager endeavor 22374 Feb 1 10:45 webvoyage_link.cgi
cgi-bin> whoami
moorc
cgi-bin> groups
lrsn endeavor
cgi-bin> rm webvoyage_link.cgi
rm: webvoyage_link.cgi: override protection 755 (yes/no)? yes
最後は私にとって大きな驚きでした。アクセス権のないファイルをどのように削除しますか?明らかに私は何かを見逃しています。
答え1
権限の観点からは、 move( mv
) は、本質的に属性を保持する delete() の後に続くコピーです。1 ファイルのリンクを解除または削除することは、含まれているディレクトリからそのディレクトリエントリを削除することを意味します。ファイル自体ではなくディレクトリに書き込んでいるため、ファイルに書き込み権限は必要ありません。 rm
ほとんどのシステムはディレクトリ固定ビット(chmod +t dir/
)の意味をサポートしています。このビットを設定すると、ファイル所有者だけがそのディレクトリのファイルを削除できます。固定ビットをオンに設定すると、リンクはキャンセルできなくなりますcgi-bin/
。moorc
cgi-bin
voyager
1 通常、ターゲットがソースと同じファイルシステムにある場合、物理コピーは存在しません。代わりに、ターゲットディレクトリのファイルへの新しいリンクが作成されますが、ファイル自体は変更されないという同じ一般的な概念がまだ適用されます。
詳細については、以下を確認してください。固定ビットを含むファイルおよびディレクトリ権限がシステムコールにどのように影響するかを説明する記事。 PS
私が本当に好きだった記事で興味深いたとえ話を見つけました。コメント渡す@JorgWMittagこのサイトに関するもう一つの質問です。
抜粋
これは実際の「実際の」ディレクトリと同じように機能します。したがって、「フォルダ」ではなく「ディレクトリ」と呼ばれる理由は、例えば完全に異なる動作をします。私の電話アドレス帳から誰かを削除したいときは、私はその人の家に行って殺すのではなく、ペンを持ってその人の番号に線を引くだけです。 IOW:このディレクトリへの書き込みアクセス権が必要ですが、アクセスできません。
拡張しようとすると、たとえ話が少し崩れます。これは、ファイルを指すディレクトリエントリの数がゼロに低下し、すべての開かれたファイルシステムの実装が自動的にファイルのディスクブロックを解放するときに何が起こるかを説明する効率的な方法がないためです。 。ハンドルが閉じています。