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


9

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

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

理論的根拠:問題のディレクトリは、アプリケーションの「インテークホッパー」です。グループ内のユーザーはディレクトリにファイルを配置し、アプリ(同じグループ内の別のユーザーIDで実行されている)がファイルを取得して処理します。問題は、ディレクトリに配置された各ファイルの所有者がそこに配置されたユーザーであり、権限がデフォルトで「rw-r--r--」になっていることです。「rw-rw ----」に変更したい。アプリが実行されているユーザーIDは問題のファイルを所有しておらず、デフォルトの権限ではアプリがファイルをchmodできないため、取り込みを行うアプリは明示的にそれを行うことはできません。当然のことながら、ユーザーはファイルをそこに置いた後でchmodを実行できますが、ユーザーによる「ドロップ」はできるだけ単純にしたいと考えています。(これらの人々はlinux-literateではありません、

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

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

回答:


5

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

からman 5 acl

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

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

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

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

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

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

再起動するか使用して、ファイルシステムを再マウントSamba mount.cifsmanページ)します。

mount -o remount,acl /home

setfaclgetfaclユーティリティがあることを確認してください。

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

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

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

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

リファレンス:Linux上のPOSIXアクセスコントロールリスト


あなたがそれを追加したときにaclmountコマンドのオプションとして追加するべきではないと思います/etc/fstab。これは冗長になるためmount、回答でコマンドを実行すると、次のような出力が得られます/dev/vda1 on / type ext4 (rw,errors=remount-ro,acl,acl)acl,acl最後に参照)。間違いなければ訂正してください。
its_me 2014年

1

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


1

これを行うには、4つの方法が考えられます。

  • 使用したくない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"は、最も単純です。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.