Linuxのディレクトリの下に新しく作成されたファイルとサブディレクトリのデフォルトの権限を設定しますか?


99

数人のユーザーが共有するディレクトリに出力結果を保存する、長時間実行されるスクリプトとアプリケーションがたくさんあります。この共有ディレクトリの下に作成されたすべてのファイルとディレクトリが自動的にu=rwxg=rwxo=r権限を持つようにする方法を教えてください。

umask 006さまざまなスクリプトの先頭で使用できることはわかっていますが、多くのユーザーが独自のスクリプトを作成し、umaskを自分で設定するのを忘れる可能性があるため、このアプローチは好きではありません。

私は本当に、ファイルシステムが特定のフォルダにある場合、特定の権限で新しく作成されたファイルとディレクトリを設定したいだけです。これはまったく可能ですか?

更新:私それでできると思いますデフォルトのACL機能を使用して、POSIX ACLでが、現時点では少し頭がおかしくなっています。デフォルトACLの使用方法を誰かが説明できれば、おそらくこの質問にうまく答えることでしょう。


1
POSIX ACLは適切ですが、ディストリビューションによっては、特定のファイルシステムでは、遭遇するマシンの60%でACLがオンにならない場合があります。以下に、非常に優れた概要
Tim Post

1
あなたが私がリンクした同じドキュメントを意味します:)私はそれを読むためにまだ変更をしていませんが、可用性の問題について頭を上げてくれてありがとう。
David Dean

1
Tim Postのコメントのリンクは無効になっているように見えますが、インターネットアーカイブのおかげで、それを表示して、vanemery.com / Linux / ACL / POSIX_ACL_on_Linux.htmlにまったく同じドキュメントが含まれていることを確認できました。質問を編集してリンクを更新します。
rmunn '30年

回答:


78

適切な所有権を取得するには、次のコマンドを使用して、ディレクトリにグループsetuidビットを設定します。

chmod g+rwxs dirname

これにより、ディレクトリに作成されたファイルがグループによって確実に所有されます。次に、全員がumask 002または007またはそのような性質のもので実行されるようにしてください。これが、Debianおよび他の多くのLinuxシステムがデフォルトでユーザーごとのグループで構成されている理由です。

ユーザーのumaskが強すぎる場合に、必要なアクセス許可を強制する方法がわかりません。


23
これは実際にはソリューションを提供しません-彼は所有権ではなくパーミッションについて尋ねています、そしてそれを行う唯一の方法はACL
Yarin

3
「...全員がumask 002または007またはその性質の何かで実行することを確認してください」-それは少しストレッチです。
jww 2014

2
+sパーツは何をしますか?ありがとう。
tommy.carstensen 2017年

1
この場合、グループIDを設定することを意味します。つまり、g + sを使用してSGIDビットを設定します。+ sがグループのgと組み合わされたため、「この場合」と言います。+ sは、SUIDビット(setuid)の設定にも使用できます。
バスティオン2017年

57

これは、少なくともLinuxで、デフォルトのACLを使用して行う方法です。

まず、ファイルシステムでACLサポートを有効にする必要があるかもしれません。ext4を使用している場合は、すでに有効になっています。他のファイルシステム(例:ext3)はaclオプションでマウントする必要があります。その場合は、オプションをに追加します/etc/fstab。たとえば、ディレクトリがルートファイルシステムにある場合:

/dev/mapper/qz-root   /    ext3    errors=remount-ro,acl   0  1

次に、再マウントします。

mount -oremount /

ここで、次のコマンドを使用してデフォルトのACLを設定します。

setfacl -dm u::rwx,g::rwx,o::r /shared/directory

のすべての新しいファイルに/shared/directory、必要な権限が付与されます。もちろん、それはファイルを作成するアプリケーションにも依存します。たとえば、ほとんどのファイルは、umaskを使用する場合と同様に、(open(2)またはcreat(2)呼び出しのモード引数に応じて)最初からだれも実行できません。以下のようないくつかのユーティリティcptarおよび、rsyncソースファイルはグループ書き込み可能ではなかった場合、あなたのデフォルトACLをマスクするソースファイル(複数可)のアクセス権を維持しようとします。

お役に立てれば!


これはまだumaskすべてのユーザーにとって適切なものを必要とするようです。= / unix.stackexchange.com/questions/71743/...
アナtechtonik

1
@techtonik私が書いたように、それはファイルを作成するアプリケーションに依存します。たとえば、使用する場合cp、ソースファイルの権限をコピーしようとします。umaskを使用する場合にも役立ちませんcp。で同じ問題が発生しましたtarこの質問を参照してください。
ペレ

@techtonik私は私の答えにこれについての文を追加しました。
pelle

1
はい、問題は、ACLとPOSIXの正しいセットアップがすべて664の場合に、アプリケーションが権利を644に強制的に設定したことのようです。問題をトラブルシューティングする人のために、このフォールバックメカニズムを明確にしておくとよいでしょう。多くはについても知らないumask
anatly techtonik 2014年

マウントフラグが正しく設定されていないかどうかを確認するために時間を無駄にしたことを意味します(ext4では自動的に動作するように見えるため、設定できません)。どのようにチェックするかについての情報はありませんsetfacl works correctly-私はそれが失敗するはずだと思いますが、答えがその点を逃しているので、私にはわかりません。
anatly techtonik 2014年

4

醜いですが、setfaclコマンドを使用して、希望どおりの結果を得ることができます。

Solarisマシンでは、ユーザーとグループのACLを含むファイルがあります。残念ながら、すべてのユーザーをリストする必要があります(少なくとも、他の方法でこれを機能させる方法を見つけることができませんでした)。

user::rwx
user:user_a:rwx
user:user_b:rwx
...
group::rwx
mask:rwx
other:r-x
default:user:user_a:rwx
default:user:user_b:rwx
....
default:group::rwx
default:user::rwx
default:mask:rwx
default:other:r-x

ファイルにacl.lstという名前を付け、user_Xの代わりに実際のユーザー名を入力します。

これで、次のコマンドを発行して、これらのACLをディレクトリに設定できます。

setfacl -f acl.lst /your/dir/here

ユーザーがすべて同じグループのメンバーである場合、ユーザーリストを省略して、グループのアクセス許可を使用できますか?
デビッドディーン

私も同じ質問をしていました。私がこれをセットアップしてから久しぶりです。しかし、他のユーザーと同じグループの新しいユーザーを取得するたびに、リストを更新するのを忘れてしまい、新しいユーザーがファイルの書き込みや削除ができないという不満が出ます。したがって、答えは次のとおりです。いいえ、できません。
innaM 2009

4

シェルスクリプト(または.bashrc)では、次のようなものを使用できます。

umask 022

umask 新しく作成されたファイルにファイルのアクセス許可を設定する方法を制御するマスクの設定を決定するコマンドです。


1
これは不正解です。umaskはアクセス許可を制限するため、アクセス許可を追加できません
ACV

@ACVについて詳しく説明できますか?これは私にとってはうまくいき、新しく作成されたファイルによりumask 002、.bashrcでグループメンバーがrw権限を持つことができるようになりました。
Arthur Dent

3
@ArthurDentはumask 002他のユーザーへのアクセスを制限し、グループを変更しません。覚えておいてくださいugo-それは他のユーザーグループです。また、umaskは基本的にデフォルトから差し引くことを意味することも覚えておいてください。ファイルの場合:666 - 002グループが影響を受けないことを意味する664を意味します。
ACV
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.