web-dev-qa-db-ja.com

ディレクトリに移動またはコピーされたファイルのデフォルトのアクセス許可を設定するにはどうすればよいですか?

私の質問は Linuxで新しく作成されたすべてのファイルにデフォルトのファイルパーミッションを設定する方法 -に似ていますが、重要な点で異なります。

特定のディレクトリで作成された(またはコピーされた、または移動された)すべてのファイルに、システムのデフォルトとは異なるデフォルトのアクセス許可のセットを継承させたい。

理論的根拠:問題のディレクトリは、アプリケーションの「インテークホッパー」です。グループ内のユーザーはディレクトリにファイルを配置し、アプリ(同じグループ内の別のユーザーIDで実行)がファイルを取得して処理します。問題は、ディレクトリに配置された各ファイルの所有者がそのファイルを配置したユーザーであり、アクセス許可がデフォルトで「rw-r--r--」になっていることです。それを「rw-rw ----」に変更したい。アプリが実行されているユーザーIDは問題のファイルを所有しておらず、デフォルトの権限ではアプリがファイルをchmodすることを許可していないため、取り込みを行うアプリはそれを明示的に行うことはできません。明らかに、ユーザーはファイルをそこに置いた後にchmodを実行できますが、ユーザーによる「ドロップ」をできるだけ単純に保ちたいと思います。 (これらの人々はLinuxに精通しておらず、ファイルをWindowsデスクトップから(Samba)ネットワーク共有にドラッグアンドドロップするだけです。つまり、Linuxシステムと対話していることすら知りません。)

umaskは強力すぎるようです。これらのユーザーが作成したすべてのファイルにデフォルトのアクセス許可を設定したくありません。このディレクトリに作成された(または配置された)ファイルだけです。

アドバイスしてください...ありがとう!

9
Rob

ACL(アクセス制御リスト)を使用して、ディレクトリ内のファイルのデフォルトのアクセス許可を設定できます。

から man 5 acl

デフォルトのACLがディレクトリに関連付けられている場合、ファイルオブジェクトを作成する関数のmodeパラメータとディレクトリのデフォルトのACLを使用して、新しいオブジェクトのACLが決定されます。

  1. 新しいオブジェクトは、アクセスACLとして含まれているディレクトリのデフォルトACLを継承します。

  2. ファイル許可ビットに対応するアクセスACLエントリは、modeパラメータで指定された許可に含まれていない許可が含まれないように変更されています。

それを設定するには(それに応じてデバイス、ディレクトリなどを変更します):

/etc/fstabファイルを編集し、aclマウントオプションを追加します。

/dev/mapper/star-home /home ext3  defaults,acl 0 2

再マウントSamba mount.cifs man page )再起動または使用してファイルシステム:

mount -o remount,acl /home

setfacl および getfacl ユーティリティがあることを確認してください。

ディレクトリにデフォルトのACLを設定します(既存のファイルにもACLを設定する必要がある場合があります)。

$ setfacl -m d:user:george:rwx,d:group:sales-g:rwx,d:group:marketing-g:rwx projections

詳細については、リンクされたチュートリアルを参照してください。

出典:チュートリアル パート1 および パート2

参照: Linux上のPOSIXアクセス制御リスト

私はこれを行うための4つの可能な方法を考えることができます:

  • 使いたくないumask
  • プログラムラッパー。ユーザーのumaskではなく、そのアプリケーションのumaskを設定します。
  • @Peter Eisentrautが説明したように、cron。 _find $HOME/intake -type f -exec chmod 660 {} \;_、さまざまなシステムでパフォーマンスが向上しています(_-exec+_オプションなど)
  • ディレクトリベースの設定では、シェルプログラミングを少し行う必要がありますが、基本的にシェルは、プロンプトの設定またはcdの呼び出し時に、そのディレクトリ(または場合によっては祖先ディレクトリ)にドットファイルが存在する場合、umaskを変更します。 bashの場合、Prompt_COMMAND='test -s $PWD/.umask && umask $(cat $PWD/.umask)'";$Prompt_COMMAND"が最も単純です。
1
Arcege

回避策を提供できます。別の「ドロップ」ディレクトリを作成し、そこで別のミニジョブを実行して権限を修正してから、ファイルをアプリケーションのデータディレクトリに移動します。そのためにincronを使用できるため、目立った時間遅延はほとんどありません。

1