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を使っています。
システムのデフォルトの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/
ディレクトリにsetgid(g+s
)と印を付けると、新しいファイルはそのディレクトリのグループ所有権を継承しますが、rsyncの-g
オプションはこれを上書きしようとします。
他の答えは一般的な場合に当てはまりますが、rsyncが問題の原因であると述べたように、あなたはその呼び出しを調整する必要があるかもしれません。
まず最初に、人気のある-a
フラグがrsyncのコピーパーミッションを作ります。 -r
の代わりに-a
を使用するか、-no-p
(パーミッション同期なし)および-no-g
(グループ同期なし)を追加します。また、rsyncは新しく作成されたファイルのパーミッションを変更するための--chmod
フラグをサポートします。
あなたのumaskはあなたが望むパーミッションに対して間違っています。あなたは002のumaskが欲しいです。あなたは現在022のumaskを持っています。また、ディレクトリsetgidを作ることについてのコメントは正しいです、しかし私はファイルグループの所有権があなたが変更したいかどうかわからない。
Unixファイルのパーミッションは、実際には非常に単純なモデルです。 ACLは私を完全に混乱させます。 :-)