web-dev-qa-db-ja.com

新しいファイルのアクセス許可を親ディレクトリから継承する方法

dataというディレクトリがあります。それから私はユーザーID 'robot'の下でスクリプトを実行しています。ロボットはdataディレクトリに書き込み、内部のファイルを更新します。アイデアはdataは私とロボットの両方が更新できるように開いているということです。

だから私はこのようにパーミッションとオーナーグループを設定します。

drwxrwxr-x  2 me robot-grp 4096 Jun 11 20:50 data

私とロボットの両方が 'robot-grp'に属しています。許可と所有者グループを親ディレクトリのように再帰的に変更します。

私は定期的に新しいファイルをdataを使ってrsyncディレクトリにアップロードします。残念ながら、新しいファイルをアップロードしても、親ディレクトリの許可が継承されません。代わりにそれはこのように見えます

-rw-r--r-- 1 me users       6 Jun 11 20:50 new-file.txt

Robotがnew-file.txtを更新しようとすると、ファイル許可がないために失敗します。

Umaskを設定すると効果があるかどうかわかりません。いずれにせよ、新しいファイルは実際にはそれに従いません。

$ umask -S
u=rwx,g=rx,o=rx

私はしばしばUnixのファイル許可に混乱しています。正しい計画さえありますか?私はDebian lennyを使っています。

82
Wai Yip Tung

システムのデフォルトのumaskを変更したくない、というのはセキュリティ上のリスクです。スティッキビットオプションはある程度は機能しますが、ACLを使用するのが最善の方法です。これはあなたが思うより簡単です。基本的なACLの問題は、デフォルトでは再帰的ではないということです。ディレクトリにACLを設定した場合、そのディレクトリ内のファイルだけがACLを継承します。サブディレクトリを作成した場合、ACLが再帰に設定されていない限り、サブディレクトリは親ACLを取得しません。

まず、ディレクトリが存在するボリュームに対してACLが有効になっていることを確認します。 tune2fsがある場合は、次のことを実行できます。

# tune2fs -l /dev/sda1 | grep acl
Default mount options:    user_xattr acl

tune2fsがない場合は、fstabsを調べます。

# cat /etc/fstab 
/dev/system/root        /                       ext3    defaults        1 1
/dev/system/home        /home                   ext3    defaults        1 2
/dev/storage/data       /data                   ext3    defaults        1 2
LABEL=/boot             /boot                   ext3    defaults        1 2

"defaults"と書いてある4列目は私のシステム(CentOS 5.5)ではACLが有効になっていることを意味します。疑問がある場合は、デフォルトのままにしてください。 ACLを設定しようとしてエラーになった場合は、戻ってデフォルトの直後の/ etc/fstabにaclオプションを追加してください:defaults,acl

私が理解していることから、ユーザーグループの全員にデータディレクトリへの書き込みアクセス権を持たせたいと思うでしょう。それは以下によって達成されます:

setfacl -Rm g:users:rwX,d:g:users:rwX data/
51
churnd

ディレクトリにsetgid(g+s)と印を付けると、新しいファイルはそのディレクトリのグループ所有権を継承しますが、rsyncの-gオプションはこれを上書きしようとします。

他の答えは一般的な場合に当てはまりますが、rsyncが問題の原因であると述べたように、あなたはその呼び出しを調整する必要があるかもしれません。

まず最初に、人気のある-aフラグがrsyncのコピーパーミッションを作ります。 -rの代わりに-aを使用するか、-no-p(パーミッション同期なし)および-no-g(グループ同期なし)を追加します。また、rsyncは新しく作成されたファイルのパーミッションを変更するための--chmodフラグをサポートします。

4
mbq

あなたのumaskはあなたが望むパーミッションに対して間違っています。あなたは002のumaskが欲しいです。あなたは現在022のumaskを持っています。また、ディレクトリsetgidを作ることについてのコメントは正しいです、しかし私はファイルグループの所有権があなたが変更したいかどうかわからない。

Unixファイルのパーミッションは、実際には非常に単純なモデルです。 ACLは私を完全に混乱させます。 :-)

3
Omnifarious