web-dev-qa-db-ja.com

AFSファイルシステムで、r-xアクセス許可があるディレクトリにアクセスできず、アクセス許可がないディレクトリにアクセスできるのはなぜですか?

Linuxを使用してAFSマウントのディレクトリにアクセスしようとしたときに予期しない動作が発生しました(具体的には、bash 4.3.11(1)-Ubuntu 14.04.1のリリース)。アクセスできるはずのディレクトリにアクセスできない場合もあれば、権限がまったくないディレクトリにアクセスできる場合もありますam。例えば:

$ ls -l
total 24
drwxr-xr-x 9   70296     root     6144  Jan 12 14:44 look_inside
drwx------ 278 someadmin operator 10240 Jan 17 17:54 private
<output truncated>
$ cd look_inside
-bash: cd: look_inside: Permission denied
$ ls look_inside
ls: cannot open directory look_inside: Permission denied

私は所有者ではなく、グループrootにも属していないため、look_insideに全員の権限を適用する必要があります。誰もがr-xとそのすべての親ディレクトリに対してlook_inside権限を持っていますが、cd look_insideまたはls look_insideを使用できません。一方、権限がない場合でも、私はcan access private

$ getfacl private
# file: private
# owner: cbl
# group: operator
user::rwx
group::---
other::---
$ ls -l private
total 560
<output truncated>

私もprivateの所有者ではありません。私はグループoperatorに属していますが、グループにはprivateに対する権限がないため、問題ありません。それでも、私はプライベートにアクセスすることができます。とはいえ、r-x権限があるかどうかに関係なく、その中のどのディレクトリにもアクセスできません(以下を参照)。もちろん、それは理にかなっています。なぜなら、私には彼らの親に対するxの許可がないからです。 privateには通常のファイルがないため(または、少なくともlsを実行するとディレクトリのみが表示されます)、通常のファイルがどのように影響を受けるかわかりません。

$ cd private
$ ls -l
total 560
drwx------ 3 someadmin  operator 2048 Jan 16 14:11 someuser
drwxr-xr-x 3 otheradmin operator 2048 Jan 16 14:11 otheruser
<output truncated>
$ ls -l someuser
ls: cannot open directory someuser: Permission denied
$ ls -l otheruser
ls: cannot open directory otheruser: Permission denied

この動作の原因は何ですか? look_insideにアクセスする方法はありますか?私(またはシステムの管理者)は、privateにアクセスできることを心配する必要がありますか?

2

AFSは、従来のUnixパーミッション(それらを記憶していますが)もPOSIX ACL(getfaclで表示されるもの)も使用しません。 Unixパーミッションにはいくつかの例外があります(chmodで読み取りまたは書き込みへのallアクセスを削除すると、関連するものが削除されると思いますすべての人がアクセスできます)が、一般的に言えば、AFSは独自のACLシステムを使用します。

OpenAFSを使用していると仮定して、ファイルまたはディレクトリのアクセス許可を確認するには、fs listacl <path>を実行します。アクセス許可を設定するには、アクセス権がある場合は、fs setacl <path> <user> <perms>を実行します。 AFS ACLによって付与されるアクセス許可は、Unix chmodスタイルのアクセス許可、POSIX ACL、および私が知っている他のアクセスシステムの両方とは異なります。それらは詳細に説明されています ここ 、しかし簡単に:あなたは7つの許可を持っており、通常は1文字で表されます。それらは、 'r'ead、' l'ist、 'w'rite、' i'nsert、 'd'elete、loc'k'、および 'a'dminです。

したがって、たとえば、ファイルを表示および読み取ることができるディレクトリは次のようになります。

$ fs listacl somedir
Access list for somedir is
Normal rights:
   system:anyuser rl
   system:administrators rlidwka

つまり、「system:anyuser」(世界中の誰でも)は、ディレクトリの内容を「l」、そのディレクトリ内のファイルの内容を「r」することしかできません。一方、「system:administrators」(管理者ユーザーに使用されるグループ)は何でもできます。

アクセスできないディレクトリは次のようになります。

$ fs listacl privdir
Access list for privdir is
Normal rights:
   system:administrators rlidwka
   foouser rlidwka

つまり、管理者と「foouser」だけがそのディレクトリに対して何でもできるということです。ただし、ディレクトリにまったくアクセスできない場合は、ディレクトリにfs listaclすることもできないと思います。そのため、代わりにエラーメッセージが表示されます。

OpenAFSを使用しておらず、代わりにアップストリームLinuxソースツリー( "kAFS")でAFS実装を使用している場合、fsコマンドはありません。その実装でAFSACLを表示することは不可能だと思いますが、それについては間違っている可能性があります。

2
adeason

アクセス制御リストはそれを行うことができます。 bashセッションでユーザー名とグループを確認しましたか? whoamiおよびgroups

0
blues