web-dev-qa-db-ja.com

ユーザーに書き込み権限がない場合のファイル削除のロジック

ホームディレクトリに書き込み権限のないファイルを作成すると、次のようになります。

$ umask 777; touch testfile
$ ls -ln testfile
---------- 1 1000 1000 0 2014-03-21 16:52 testfile
$

..それでも、そのファイルを簡単に削除できます。

$ rm -fv testfile
removed `testfile'
$ 

書き込み権限のないディレクトリに書き込み権限のないファイルを作成すると、そのようなファイルを削除できません。

$ ls -lnd /var/
drwxr-xr-x 14 0 0 4096 2014-03-21 17:04 /var/
$ ls -ln /var/testfile
---------- 1 1000 1000 0 2014-03-21 17:04 /var/testfile
$ rm -vf /var/testfile 
rm: cannot remove `/var/testfile': Permission denied
$ 

書き込み権限が親ディレクトリから継承されることは正しいですか?読み取りおよび実行権限にも当てはまりますか?

8
Martin

いいえ、アクセス許可はこの方法で継承されません。理由は少し異なります。ファイルを削除しても、ファイルの書き込みとは見なされません。つまり、ディレクトリの書き込みと見なされます。 contentに対する権限がない場合でも、ファイルを消去できるのはこのためです。

ファイル全体を削除することは、編集することとは根本的に異なると見なされます。ディレクトリへの書き込み権限がないファイルに対してできることのほとんどは、その内容を空にすることですが、ディレクトリエントリを削除することはできません。

15
Kilian Foth

ファイルを削除する機能は、ファイルの実際の権限とは関係ありません。これを管理するのは、ファイルを含むディレクトリの権限です。

$ whoami
saml

$ ll -d adir/
drwxrwxr-x. 2 samtest samtest 60 Mar 21 14:35 adir/

$ rm adir/afile 
rm: remove write-protected regular empty file ‘adir/afile’? y
rm: cannot remove ‘adir/afile’: Permission denied

ただし、ユーザーsamladirへの書き込みアクセス権を持つように権限を変更すると、.

$ Sudo chmod o+w adir/

そして、このユーザーがafileを削除しようとした場合:

$ rm adir/afile 
rm: remove write-protected regular empty file ‘adir/afile’? y

$ ll adir/
total 0

したがって、ファイルの読み取り/書き込み/実行機能は、その属性を通じてファイル自体に属していることを覚えておいてください。ただし、ディレクトリからファイルを削除する機能は、ファイルを含むディレクトリの権限によって制御されます。

6
slm

権限は継承されません。ディレクトリに入ると、ファイルは任意の権限または所有権を持つことができます。たとえば、2つのフォルダの深さのファイルに対する完全なアクセス許可を持つことができますが、ディレクトリに入るアクセス許可がない場合があります。ディレクトリへの書き込み権限は、ファイルのリストを変更できる(移動/削除/ファイルを作成する)ことを意味しますが、ファイルの内容の変更は何か異なります。ディレクトリの読み取り権限により、ファイルのリストを読み取ることができます(lsを実行)。ディレクトリの実行権限は、そのディレクトリにcdできることを意味します。

たとえば、ディレクトリの権限が「wx」の場合、ファイルを作成または削除したり、ディレクトリにディレクトリを入力したりできますが、その内容を一覧表示することはできません(つまり、bashのタブ補完は機能しません)。ただし、サブフォルダのコンテンツは、その許可がそうであればリストすることができます。

少しの例外はスティッキービットで、これが設定されると、このビットが設定されたディレクトリ内のファイルで実行できる操作が制限されます。これが設定されている場合(chmod 1 ???ここで???は755などの従来の許可です)、ファイルの所有者でないユーザーはファイルを削除できません。ディレクトリ(書き込み権限がある場合でも)。これは、いくつかの用途に役立ちます(たとえば、/tmp/ディレクトリは通常、このようにマークされます-誰もがそれを書き込むことができますが、彼以外のものに触れることはできません)。

2
orion

Unixのファイル権限は、親ディレクトリから継承されません(スティッキービットを除く)。ディレクトリ自体の権限とディレクトリ内のファイルの権限には違いがあります。あなたが説明したのは、ファイルではなくディレクトリ(ディレクトリへの書き込み許可)を変更する機能です。グループ書き込みまたは所有者書き込みビットのいずれかを介して、ディレクトリに対するUnix書き込み権限がある場合、これにより、そのディレクトリにコンテンツを追加および削除できます。権限に関係なく、サブディレクトリまたはファイルを追加または削除できます。ファイルにあります。

0