私の質問は Linuxで新しく作成されたすべてのファイルにデフォルトのファイルパーミッションを設定する方法 -に似ていますが、重要な点で異なります。
特定のディレクトリで作成された(またはコピーされた、または移動された)すべてのファイルに、システムのデフォルトとは異なるデフォルトのアクセス許可のセットを継承させたい。
理論的根拠:問題のディレクトリは、アプリケーションの「インテークホッパー」です。グループ内のユーザーはディレクトリにファイルを配置し、アプリ(同じグループ内の別のユーザーIDで実行)がファイルを取得して処理します。問題は、ディレクトリに配置された各ファイルの所有者がそのファイルを配置したユーザーであり、アクセス許可がデフォルトで「rw-r--r--」になっていることです。それを「rw-rw ----」に変更したい。アプリが実行されているユーザーIDは問題のファイルを所有しておらず、デフォルトの権限ではアプリがファイルをchmodすることを許可していないため、取り込みを行うアプリはそれを明示的に行うことはできません。明らかに、ユーザーはファイルをそこに置いた後にchmodを実行できますが、ユーザーによる「ドロップ」をできるだけ単純に保ちたいと思います。 (これらの人々はLinuxに精通しておらず、ファイルをWindowsデスクトップから(Samba)ネットワーク共有にドラッグアンドドロップするだけです。つまり、Linuxシステムと対話していることすら知りません。)
umaskは強力すぎるようです。これらのユーザーが作成したすべてのファイルにデフォルトのアクセス許可を設定したくありません。このディレクトリに作成された(または配置された)ファイルだけです。
アドバイスしてください...ありがとう!
ACL(アクセス制御リスト)を使用して、ディレクトリ内のファイルのデフォルトのアクセス許可を設定できます。
から man 5 acl
:
デフォルトのACLがディレクトリに関連付けられている場合、ファイルオブジェクトを作成する関数のmodeパラメータとディレクトリのデフォルトのACLを使用して、新しいオブジェクトのACLが決定されます。
新しいオブジェクトは、アクセスACLとして含まれているディレクトリのデフォルトACLを継承します。
ファイル許可ビットに対応するアクセス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
詳細については、リンクされたチュートリアルを参照してください。
私はこれを行うための4つの可能な方法を考えることができます:
find $HOME/intake -type f -exec chmod 660 {} \;
_、さまざまなシステムでパフォーマンスが向上しています(_-exec+
_オプションなど)Prompt_COMMAND='test -s $PWD/.umask && umask $(cat $PWD/.umask)'";$Prompt_COMMAND"
が最も単純です。回避策を提供できます。別の「ドロップ」ディレクトリを作成し、そこで別のミニジョブを実行して権限を修正してから、ファイルをアプリケーションのデータディレクトリに移動します。そのためにincronを使用できるため、目立った時間遅延はほとんどありません。