web-dev-qa-db-ja.com

ZFS ACLを使用してOmniOS(Illumos)でグループ書き込み権限を継承しますが、ファイルに対しては実行しません

ほとんどの場合、umask 027で運用しています。複数のユーザーが関与する特定のディレクトリでは、ACL継承を使用してumask 002をエミュレートするクールな方法を見つけました。

これが私が使用しているコマンドです。基本的に、これは継承付きのchmod 775です:

/usr/bin/chmod A=owner@:rwxpDaARWcCos:fd:allow,group@:rwxpDaARWcs:fd:allow,everyone@:rxaRcs:fd:allow $@`

$@は、更新するファイルのリストを表します。/usr/bin/chmodは完全なACL構文をサポートしていないようであるため、/usr/gnu/bin/chmodでOpenSolarisエディションを使用しています。 ==

チャームのように機能し、グループ名が継承されるようにg+sも設定します。ただし、私が支援したいいくつかの改善点があります。

  1. a+x(実行)権限はディレクトリにのみ適用する必要があり、ファイルに自動的に継承されるべきではありません。
  2. 匿名ユーザーのls機能を無効にしたいので、o+r(読み取り)アクセス許可はファイルとnotディレクトリにのみ適用する必要があります。

OmniOS/Illumos&ZFSには非常に満足していますが、残念ながら、より一般的に見られるLinuxACL構文とはまったく異なるSolarisACLスキームを使用しています。

ある種の条件付き継承は、ファイルに対して1つの方法を継承し、ディレクトリに対して他の方法を継承するという順序で行われます。これは可能ですか?

3
Bryan Field

A + x(実行)権限はディレクトリにのみ適用する必要があり、ファイルに自動的に継承されるべきではありません。

ACL(完全なリスト)のACE(アクセス制御エントリ)ごとに、継承方法を指定できます。オプションは、 Solaris管理者ガイド から取得されます。これはOmniOSにも適用されます(表8.1から8.3)。

  • file_inherit(f):親ディレクトリからディレクトリのファイルにのみACLを継承します。
  • dir_inherit(d):ACLを親ディレクトリからディレクトリのサブディレクトリにのみ継承します。
  • inherit_only(i):親ディレクトリからACLを継承しますが、新しく作成されたファイルまたはサブディレクトリにのみ適用され、ディレクトリ自体には適用されません。 f/d/fdが必要です。
  • no_propagate(n):ACLは、親ディレクトリからディレクトリの第1レベルのコンテンツにのみ継承され、第2レベル以降のコンテンツには継承されません。 f/d/fdが必要です。

同じユーザーに複数のACEを追加して、適用時に結合されるため(Windows ACLと同様)、目的の効果を実現できます。他の人にとっては同じであるため、例は@ownerに縮小されます。

/usr/bin/chmod A=\
    owner@:rw-p-D-ARWcCos:fd-----:allow, \
    owner@:--x---a-------:-d-----:allow, \
    [...]
$@

この意味は

  • 最初のACEはディレクトリに適用され、すべてのファイルとディレクトリに継承されますが、a + x権限は除外されます
  • 2番目のACEはディレクトリに適用され、すべてのサブディレクトリに継承されますが、ファイルには継承されず、a + x権限のみがあります。
  • 結果の完全なACLを取得するには、ディレクトリの両方の行を「オーバーレイ」できます(これが、ダッシュ付きの構文を好む理由です。不足しているものがわかります)。

私はそれがあなたが望むことをすることをテストしていません、それは時々アプリケーションにも依存するので、あなたはそれをテストするべきです。継承されたファイルとディレクトリACLは、owner@:rw-p-D-ARWcCos:fd----I:allowのように、最後の位置に大きなIでマークされます。

匿名ユーザーのls機能を無効にしたいので、o + r(読み取り)アクセス許可はファイルにのみ適用し、ディレクトリには適用しないでください。

最初の質問と似ていますが、その逆です。第1レベルの継承だけが必要な場合は、nと組み合わせることもできます(find -maxdepth 1と同様)。繰り返しになりますが、単純なフラグでは不十分であり、高度なフラグ(ARWC)も必要になるため、テストには注意が必要です。また、オプションchmod -Rを使用してACLを再帰的にファイルやディレクトリに適用することもできます。これは、場合によっては必要になることがあります(たとえば、ACLを遡及的に変更する必要がある場合、ファイルが書き込まれると、そのACLは修正されます。 aclinheritのプロパティについて)。


OmniOS/Illumos&ZFSには非常に満足していますが、残念ながら、より一般的に見られるLinuxACL構文とはまったく異なるSolarisACLスキームを使用しています。

これは今のところ不幸に見えるかもしれませんが、ACLはNFSv4 ACLを厳密にモデル化しているため、NFSバージョン4を使用する場合は、何も変更する必要はありません。これは、Windows ACLも厳密に表しています(例外:SOlarisでの順序は修正済み、Windowsでの順序は常に[許可する前に拒否]ですが、[拒否]を使用しない場合は問題ありません)。つまり、Co権限が許可に設定されている各WindowsPCからアクセス許可を編集できます。これはドメインとワークグループで機能するため、Windowsとの相互運用性は、Sambaが過去に採用した回避策よりも優れています。

3
user121391