web-dev-qa-db-ja.com

ファイルのアクセス許可はどのように計算されますか?

chmodを使用してファイルのアクセス許可を設定できましたが、親(..)ディレクトリのアクセス許可が競合している場合はどうなりますか?

また、touchなどを使用して新しいファイルを作成した場合、初期権限はどのように計算されますか?権限は..から継承されていますか?

また、executable権限フラグを削除したときに、ディレクトリで何もできないのはなぜですか?

$ mkdir temp;
$ chmod -x temp;
$ touch temp/a;
$ ls temp;
touch: cannot touch `temp/a': Permission denied
7
Stefan
  1. UNIXには、「競合するアクセス許可」のようなものはありません。ファイルシステムエントリ(ディレクトリ、ファイルなど)のアクセス許可によって、そのオブジェクトに対して実行できることと実行できないことが決まります。他のファイルシステムエントリのパーミッションは画像に入力されませんパス内のすべての祖先ディレクトリの「x」ビットを除くファイルへ(最大_/_)-参照3.3。

  2. 新しく作成されたファイルのデフォルトの権限は、作成プログラムが許可する権限(modeまたはopenシステムコールへのcreat引数)と現在のプロセスumaskによって決定されます。具体的には、「umask」で設定されたビット(1)は、新しく作成されたファイルパーミッションでリセット(0)されます。Cのような表記法:_file_permissions = open_mode & ! umask_。詳細については、_man 2 creat_(_O_CREAT_を探してください)および_man umask_をお読みください。

  3. ディレクトリの「x」(実行可能)ビットは、そのディレクトリをtraverseできるかどうかを制御します。ディレクトリをトラバースすると、ディレクトリにcdして、そこに含まれるファイルにアクセスできるようになります。ディレクトリの内容を一覧表示する機能は、「r」ビットによって制御されることに注意してください。

参考文献:

15
Riccardo Murri

まず第一に... Linuxではすべてがファイルです。すべてとは、すべてを意味します...フォルダ、マウス、またはキーボード...すべてがファイルです。

それでは、あなたの質問に答えましょう:

  1. フォルダと含まれているファイルの間に競合はありません。読み取り権限のみのフォルダがあり、そのフォルダに書き込み権限のあるファイルがある場合は、そのファイルに書き込むことができます。ただし、そのフォルダ内のファイルを作成/削除することはできません。したがって、競合について心配する必要はありません。また、フォルダの内容を読み取ることもできます(フォルダを一覧表示します)。

  2. デフォルトの権限は通常644です(つまり、ユーザーの場合はrw、グループの場合はrなど)

  3. ディレクトリの「実行可能」ビットは、ディレクトリを「リスト」することを意味します。つまり、フォルダを-xにすると、その内容を知ることができなくなります。つまり、フォルダに何かを触れることはできません。

3
Patkos Csaba