web-dev-qa-db-ja.com

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

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

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

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

Update:Ithinkそれは POSIX ACLs で実行できますデフォルトのACL機能ですが、現時点では頭にあります。誰かがデフォルトACLの使用方法を説明できれば、おそらくこの質問にうまく答えられるでしょう。

96
David Dean

適切な所有権を取得するには、ディレクトリでグループsetuidビットを設定できます。

chmod g+rwxs dirname

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

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

73
Norman Ramsey

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

まず、mightファイルシステムで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)呼び出しのmode引数に応じて)最初から誰も実行できません。 cptar、およびrsyncなどの一部のユーティリティは、ソースファイルがグループ書き込み可能でない場合、デフォルトACLをマスクするソースファイルの権限を保持しようとします。 。

お役に立てれば!

57
pelle

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

umask 022

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

4
user3270784

見苦しいですが、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
4
innaM