LinuxのデフォルトACLをディレクトリとファイルに別々に設定する方法


9

次のようにディレクトリにいくつかのACLが定義されています。

# owner: root
# group: root
user::rwx
group::r--
mask::r-x
other::r--
default:user::r--
default:group::r--
default:mask::r-x
default:other::r--

そのフォルダに作成された新しいファイルをu:apache:r--に、新しいディレクトリをu:apache:rxにしたいと思います。ACLを使用してそのインテントを指定するにはどうすればよいですか?

私は試してみましたが-dm u:apache:rX、それはちょうどと比べて何も違うようではないようですrx

overt htdocs # getfacl .
# file: .
# owner: root
# group: root
user::rwx
user:apache:r--
group::r--
mask::r-x
other::r--
default:user::r--
default:user:apache:r--
default:group::r--
default:mask::r--
default:other::r--

overt htdocs # setfacl -dm u:apache:rx .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x                 #effective:r--
group::r--
mask::r--
other::r--

overt htdocs # rm blah.txt
overt htdocs # setfacl -dm u:apache:rX .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x                 #effective:r--
group::r--
mask::r--
other::r--

大文字のXアクセス許可は、現在のアクセス許可を設定する場合にのみ役立ち、デフォルトのアクセス許可を設定する場合には役立ちません。

overt htdocs # setfacl -x u:apache blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
group::r--
mask::r--
other::r--

overt htdocs # setfacl -m u:apache:rX blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r--
group::r--
mask::r--
other::r--

回答:


6

まあ、しかしあなたの例はあなたが望むものを正確に行います;)

2番目のものを見てください。

overt htdocs#setfacl -dm u:apache:rx。
明白なhtdocs#タッチblah.txt
明白なhtdocs#getfacl blah.txt
#ファイル:blah.txt
#所有者:ルート
#グループ:ルート
ユーザー:: r--
user:apache:rx #effective:r--
グループ:: r--
マスク:: r--
その他:: r--

重要な行は次のとおりです。

user:apache:r-x #effective:r--

aclはrxに設定されていますが、ファイルの場合は実質的にr--です。マスクのためです。

また、ユーザーがrw-権限で作成した場合、マスクは常にファイルのrw-のみになります。(私は100%確信はありませんが、マスクは基本的なアクセス許可よりも制限が厳しくありません)。

つまり、ファイルの場合はr--、ディレクトリの場合はrxを取得できます。
作成されたディレクトリにはuser:rx->マスクがあるため、rx->有効な権限はrxになります。
ファイルの場合:それらにはr--があるため、マスクはr--になり、ACLの有効な権限もr--になります。(ファイルを作成してそれにuser :: rx権限を付与すると、マスクが変更され、ユーザーがACLを作成するとxも取得されます)


#effectiveテキストを完全に逃した!マスクが有効な権限に与える影響について説明していただきありがとうございます。
joshperry 2013

2

残念ながら、Linux ACLでこれを行う方法はありません。マスクが効果的なアクセス許可の範囲内で、望みどおりの動作をするように見えるのは事実です。ただし、次に権限マスクbamを再計算する操作を実行すると、すべてのファイルが実行可能になります。

ACL内のすべてのファイルが実行可能であることを期待するために辞任することもできます。これは実際にはセキュリティ機能ではなく便利な機能であり、これらのフォルダーを$ PATHに配置しない限り、問題にはなりません。それでも問題が解決しない場合は、実行オプションなしでマウントされたファイルシステムにACL制御フォルダーを配置するのが唯一の選択肢です。


1

-d(または--default)を使用して、ディレクトリにデフォルトを設定し、ディレクトリで作成されたものがpermsを継承するようにします(あなたがそうしているように)。

ここに簡単な概要を示します。 http://www.vanemery.com/Linux/ACL/linux-acl.html#default

ファイルに1つのデフォルトを設定し、dirsに別のデフォルトを設定することはできません。

すべてのディレクトリでsetfaclを毎分実行するスクリプトをcronから実行することもできますが、これは解決策としては理想的ではありません。

/ path / to / top / dir -type d -exec setfacl -dm u:apache:rx {} \;を見つけます。

または

/ path / to / top / dir -type d | xargs setfacl -dm u:apache:rxを見つけます


1

ACLとマスクに関するこの投稿は、自分がやりたいことを行う方法とその理由を理解するのに本当に役立ちました。

私の理解の欠けている部分は、ファイルを作成するとき、カーネルがデフォルトのアクセス権セット0666を使用し、新しいディレクトリ0777を使用するということでした。

ACLマスクは基本的umaskに、ディレクトリ/ファイル/ユーザーレベルでを設定する方法です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.