Macでchmodを使用して、新しいファイルに親ディレクトリのアクセス許可を継承させるにはどうすればよいですか?


23

私はMacを使用しています。特定のフォルダー内に作成される新しいファイル/フォルダーが、親ディレクトリと同じ権限(グループではなく、すでに処理されている)を持つようにします。Linuxでは、通常setfaclを使用しますが、Macのchmodは私が探しているものを実行できるようです。chmodのマニュアルページを読みましたが、コマンドを適切にフォーマットして必要なものを取得する方法がわかりません。


新しいファイル/フォルダーをグループで読み取りおよび書き込みできるようにします。

回答:


33

まず、何が起こっているのかを説明するためのちょっとした背景:OS Xのファイルには、POSIXとACLという2つのまったく異なる種類のアクセス許可設定を適用できます。

ファイルには、常に(ほとんど常に)所有者、グループ、その他(それぞれの読み取り、書き込み、実行の組み合わせ)で構成されるPOSIXアクセス許可が適用されます。POSIXアクセス許可の継承を制御する方法はありません。新しいアイテムは、作成したユーザーによって常に所有され、グループの割り当てはユーザーが入っているフォルダーから継承され、アクセスはumaskによって決定されます(ほとんどの場合:所有者はフルアクセスを取得し、グループおよびその他のユーザーは読み取り専用+フォルダーに対して実行)。したがって、POSIX権限は、あなたがやろうとしていることに対しては機能しません。

ファイルには、アクセス制御リスト(ACL)を適用することもできます。これはアクセス制御エントリ(ACE)のリストであり、それぞれがユーザーまたはグループに適用され、アクセスの種類(詳細)、アクセスを許可するか拒否するか、ACEもコピーする必要があるかどうかを指定しますフォルダー内に作成されたアイテム。この最後の部分は、これがあなたにとって役立つ部分です。必要なグループ、必要なアクセスの種類、および完全な継承を指定するACEをフォルダーに作成する必要があります。

OS Xのchmodは、+ a、-aなどの許可オプションを使用してACEを操作できます。私があなたが望むものを理解したら、これを使用して(グループ名とフォルダパスを置き換えて)ACEを作成します:

chmod +a "group:examplegroup allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" /path/to/folder

継承は「ライブ」ではないことに注意してください。つまり、ACEを割り当てる前に作成されたアイテムには適用されず、別の場所で作成されてフォルダーに移動されたアイテムには適用されません。-R(chmod -R +a ...)を使用して、既存のコンテンツに適用できます。フォルダに移動さ​​れたアイテムを強制的に継承する方法(Appleのサーバー管理ツールを除く)は知りません。


素晴らしい説明をありがとう。私はそれを試してみましたが、それでもユーザー読み取り/書き込み、他のすべてのユーザーが読み取り許可を持つ新しいファイルを作成しました。親フォルダー(屋外)は、所有者がユーザー(jhicks)でグループが_wwwの775許可に設定されています。_wwwグループに自分を追加しました。drwxrwxr-x + 13 jhicks _www 442B Nov 16 09:47屋外で次のようにコマンドを実行しました:chmod + a "group:_www allow list、add_file、search、add_subdirectory、delete_child、readattr、writeattr、readextattr、writeextattr、readsecurity、file_inherit、ディレクトリ
ジェレミーヒックス

ls -lPOSIX権限のみを表示します(ただし、権限の後に「+」が表示され、ACLが存在することが示されます)。ls -leACLも表示するために使用します。
ゴードンデイヴィソン

グループ名にスペースが含まれている場合は、区切り文字として:を使用できます。たとえば、「group:my group with a space:allow」
ダグリチャードソン

続いchmod +a ...コマンドを、そして私が作成したabc.txtをフォルダに。別のユーザーに切り替えてTextEditで編集すると、ファイルはロックされていると表示され、編集できません。
ohho

私はこれでいくつか遊んでいます。+ aiで継承を強制すると思います
ロビン

4

-R次のように、@ gordonのコマンドに追加してみてください。

chmod -R +a "group:_www allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" outdoors

-Rオプションの意志(述べたように、ここで):

再帰:ファイル自体ではなく、ファイルをルートとするファイル階層のモードを変更します。

ファイル階層を変更することはあなたが探しているもののようです(新しいファイル、ディレクトリなどのために)。

また、このApple.SEの投稿を確認することもできます。この投稿では、あなたと多少似た状況を取り上げています(共有ディレクトリに関連する場合を除く)sudo


4

これ(-R)は、ほとんどの人がやろうとしていることではありません。ほとんどの場合、最上位のディレクトリのACLを変更し、そのサブツリーのルートで指定したACLに基づいて、含まれるすべてのオブジェクトにフラグを強制的に継承させるために魔法のような操作を行います。オブジェクトのACLがポリシーに従ってこれらの継承されたACEを並べ替えるので、これははるかにエレガントです。

そして、そう、私はこれを行うためにPythonスクリプトを書かなければなりませんでした、私も適切な何かを見つけませんでした。


2
共有しますか(例:要点?気にしないなら、それはいいジェスチャーだったと思います。
myhd


0

MacでPathFinderを使用すると、ACLとPOSIXを簡単に設定できます。MacサーバーでWordPressをホストしている場合define('FS_METHOD', 'direct');は、wp-config.php を設定して、プラグインのインストールとアップグレードでFTPの詳細が要求されないようにする必要もあります。

したがって、基本的にはデフォルトのPOSIX権限を保持し、ユーザー_www(グループではない)をACLに追加してから、ACLウィンドウで[権限の伝達]をクリックします。

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