あるユーザーが別のユーザーの755ファイルを削除できるのはなぜですか?


35

ユーザーを使用してscpのファイルを別のサーバーにバックアップするバックアップアップロードスクリプトがありますupload。ターゲットサーバー上の別のスクリプトは、これらを別のユーザーにchownし、ファイルモードをに設定します755

その後、uploadユーザーを使用してターゲットサーバーにSSH接続すると、chownされたファイルを削除できます。それらは読み取り専用ではありませんか?

ターゲットサーバー上のファイルは次のようになりますupload。ユーザーはそのファイルを削除できます。

-rwxr-xr-x 1 maciekish maciekish 650M Nov  1 01:07 2014-11-01-data.tar.bz2

ユーザーuploadはを使用useraddして追加されたばかりで、maciekishグループの一部ではありません。

uploadssh経由でファイルを削除しようとすると、「書き込み保護された通常ファイル」を削除するかどうかという質問が表示されY、それを言って削除することができます。


回答:


64

ファイル読み取り専用です。ただし、ファイルを削除しても変更はされず、親ディレクトリのみが変更されます(基本的にディレクトリリストからファイルが削除されます)。ディレクトリへの完全な書き込み権限があるようです。

このstickyビット(別名「制限付き削除」フラグ)を設定すると、所有者以外の誰もがそのディレクトリ内のファイルの名前を変更したり削除したりできなくなります(など/tmp)。これを行うにchmod o+t *directory*は、ディレクトリの所有者として実行します。


12

典型的なUnixファイルシステムでは、任意のファイルは、それぞれが「ハードリンク」を保持する任意の数のディレクトリエントリによって識別できます。

実装の観点からは、ファイルの最後のディレクトリエントリ(ハードリンク)を削除することと、多数の参照から1つの参照を単に削除することには違いがあります。ただし、セマンティックの観点からは違いはありません。

1つのファイルに複数のハードリンクが存在する場合、それらのいずれかを使用してファイルに書き込むと、すべてのハードリンクから見えるファイルが変更されます。rmただし、リンクで使用すると、そのリンクを介してファイルにアクセスできなくなります。ファイルへの他のリンクでは、まったく同じファイルが引き続き表示されます。


3
一般にハードリンクとして知られています。
ボブ14年

1
@Bob:「ハードリンク」という用語は、既存のファイルに対して作成される参照を表すために使用されることを知っています。ファイルに複数の参照が一度もなかった場合、その単一の参照はまだ「ハードリンク」と呼ばれていますか?
supercat 14年

3
リンク間に違いはありません。ファイルAを作成し、ハードリンクBを作成し、ファイルAを削除します。Bはファイルまたはハードリンクですか?どのように機能するかを理解するには、1つのファイルや(N-1)ハードリンクとしてではなく、N個のハードリンクとして表示することをお勧めします。ファイルを開いたときに存在するリンクもあります。
gnasher729 14年

@ gnasher729:ファイルに複数のリンクが存在するか存在した場合、それらの間に意味的な違いがない場合、それらすべてを「ハードリンク」と呼ぶのが理にかなっていることに同意します。一方、セマンティックとパフォーマンスの両方の観点から、常にファイルへの唯一の参照であったディレクトリエントリと、他のハードリンクが作成されたディレクトリエントリを区別することには利点があると思います。いずれにせよ、ディレクトリエントリの言い方を参照するのが正しいかどうかは知りませんでした。「それぞれを「ハードリンク」と呼びます」。
supercat 14年

2
@supercatはあまり一般的ではありませんが、正しいです。のst_nlink(「ハードリンクの数」)フィールドを考えますstruct stat。簡単に言えば、ディレクトリはファイルへのハードリンクを保持しています。
ホッブズ14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.