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
にアクセスできることを心配する必要がありますか?
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を表示することは不可能だと思いますが、それについては間違っている可能性があります。
アクセス制御リストはそれを行うことができます。 bashセッションでユーザー名とグループを確認しましたか? whoami
およびgroups