web-dev-qa-db-ja.com

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

次のようにディレクトリにいくつかの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:r-xにしたいと思います。 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--
9
joshperry

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

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

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

1
joshperry

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

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

オバートhtdocs#setfacl -dm u:Apache:rx。
オバートhtdocs#touch blah.txt 
オバートhtdocs#getfacl blah.txt 
#ファイル:blah.txt 
#所有者:root 
#グループ:root 
 user :: r-
 user:Apache:rx #effective:r-
 group :: r-
 mask :: r-
 other :: r--

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

user:Apache:r-x #effective:r--

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

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

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

6
silk

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

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

2
Rashkae

-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
aspitzer