Linuxでr—ディレクトリのアクセス許可はどのように機能しますか?


11

作成したディレクトリにこれらの権限があります-他のユーザーが持っています

drwxr--r-- 5ユーザーuser 4096 2012-09-15 19:30サイト

別のユーザーとしてディレクトリでls -lを実行する場合

ls -l / home / user / sites

これはディレクトリ出力です。そのディレクトリにxビットが設定されていないと、ファイル名はまったく表示されません。

d????????? ? ? ? ?                ? dev.user.com  
-????????? ? ? ? ?                ? user.20120914_082804.sql.gz   
d????????? ? ? ? ?                ? shared  
-????????? ? ? ? ?                ? shared.tar.gz  
-????????? ? ? ? ?                ? www.20120914_083256.tar.gz
d????????? ? ? ? ?                ? www.user.com

ここに矛盾がありますか?

回答:


16

x実際にディレクトリにいてディレクトリのファイルにアクセスrする許可を与え、ディレクトリの内容を見る許可を与えます。

あなたがディレクトリに与えることによって、状況を逆転させた場合はx少しと削除rビットを、ユーザーが開くことができますshared.tar.gz(ファイル自体に適切な権限を想定)が、彼は、事前にファイル名を知っていた場合にのみ、以降lsのディレクトリ内のファイルを一覧表示することができないであろう。


1
これをテストして、ご連絡いたします。私はいつも、Linuxファイル共有のこの側面を紛らわしく感じていました。
vfclists

この動作はLinuxに固有のものではありません。UNIXの初期の時代にさかのぼります。LinuxはUNIX互換システムであり、そのように動作します。WindowsNT ACLエントリには同様の許可ビットがあります。

2

この許可の解釈は、初期のUnixファイルシステムにまで遡ります。最初は、ファイルのみがありました。(まあ、デバイスとパイプ、そして...しかし、私はここで話をしようとしていますが、100%厳密に正確ではありません。さらに、すべてがファイルであるため、デバイスとパイプなどすべてに当てはまりますディレクトリ)。

ディレクトリは、ファイルシステムがディレクトリツリーとその中に含まれるファイルを記述するメタデータを保持するために使用する単なるファイルです。ディレクトリ内の各ファイルは、データが保存されたiノード番号、ファイルのサイズ、タイムスタンプ、および許可ワードとともに、ファイル名(元は14文字、IIRC)のスペースを含む単純なデータ構造によって記述されました。すべてのディレクトリには、2つの名前付きのエントリで始まった...その親ディレクトリのiノードでは、この非常にディレクトリのiノードの最初のポインティング、および第二。

許可ワードには、所有者、同じグループの他のメンバー、および世界の扱いを説明する9ビットがありました。関連するユーザーがファイルを読み取り、書き込み、または実行できるかどうかの各フラグの3ビット。(私が無視している16ビット許可ワードにはさらに5つのビットがあることに気付くかもしれません。それらは最終的に意味が割り当てられましたが、ストーリーのこの部分には関係ありません。) Linuxを含む初期のUnixのすべての子孫でビットはほぼ同じままでした。)

したがって、ディレクトリが本当に特別な種類のファイルであり、あるディレクトリのエントリで記述されている場合、明らかに許可ビットもあり、それらのビットはおそらく何かを意味します。しかし、問題はまさにそのとおりです。これらのビットに意味を割り当てる最も簡単な方法は、そもそもそれらの意味を変えないことです。そして、それは本質的に行われたものです。

したがって、読み取りビットは、ユーザーがディレクトリ自体を読み取ることができることを意味します。これにより、読者は各ファイルのデータのファイル名、タイムスタンプ、サイズ、およびiノード番号にアクセスできます。特に、rsetを使用lsすると、ディレクトリ内のすべてのファイルの名前を表示できますが、リストされたファイルを開く(または何らかの方法で使用する)には不十分です。

実行ビットは、ユーザーがディレクトリを「実行」できることを意味します。ディレクトリは特別なので、executeは実際には名前でエントリを検索して使用することを意味します。つまりx、設定されている場合はファイルを開こうとすることができますが、ファイルがなければr名前を見つけることができません。もちろん、要求されたファイルのアクセス許可もアクセスに影響するためx、ディレクトリ上であっても、を提供しない限りファイルを読み取ることはできませんr

書き込みビットは、ユーザーがディレクトリに書き込むことができることを意味しますが、当然、ファイルシステム自体によってのみ仲介されます。つまり、wsetを使用すると、そのディレクトリに新しいファイルを作成したり、既存のファイルのディレクトリエントリを編集したりできます。ただし、x設定しないと、実際にファイルを使用することrはできません。また、ファイルを表示することもできません。

Unixおよびその子孫では、ユーザーIDのより複雑なモデルが進化してきたため、これらの同じ基本的な記述は著しく変わっていません。

要するに、rそのコンテンツを見ることができることをx意味し、それを使用できることをw意味し、ディレクトリに対してもそれを変更できることを意味します。


mode_tもう少し説明できると思います(特に、アクセス許可とファイルの種類が同じ32ビットフィールドに格納されている部分)
SaveTheRbtz

1
私は80年代に積極的にUNIXユーザーであり、開発者でした。私は今日の真実について完全な物語を歴史的な文脈に置くほどには伝えようとしませんでした。 1983年頃に地元の達人から得た同じ説明。より多くのものが変化すればするほど、それらは同じままになります....
-RBerteig
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.