2010-06-12 04:06:50 +0000 2010-06-12 04:06:50 +0000
86
86

新しいファイルのパーミッションを親ディレクトリから継承させるには?

dataというディレクトリがあります。ロボットはdataディレクトリに書き込み、ファイルを更新しています。dataは私とrobotの両方が更新できるようにオープンになっています。

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

のようにパーミッションとオーナーグループを設定しました。パーミッションとオーナーグループは親ディレクトリのように再帰的に変更しています。

私は定期的にdataを使ってrsyncディレクトリに新しいファイルをアップロードしています。残念ながら、アップロードされた新しいファイルは親ディレクトリのパーミッションを継承しません。代わりに以下のようになります。

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

ロボットがnew-file.txtを更新しようとすると、ファイルのパーミッションがないために失敗します。

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

0x6& を更新しようとすると、ファイルのパーミッションがないために失敗します。いずれにしても、新しいファイルは実際には追従していません。

0x1&

私はしばしばUnixのファイルパーミッションに戸惑う。私には正しい計画があるのでしょうか?私はDebian lennyを使っています。

Antwoorden (4)

53
53
53
2010-06-13 02:10:58 +0000

システムのデフォルトの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

4番目の列の「デフォルト」は、私のシステム(CentOS 5.5)ではACLがオンになっていることを意味しています。迷ったらデフォルトのままにしておきましょう。ACLを設定しようとしてエラーになった場合は、戻って/etc/fstabのdefaultsのすぐ後にaclオプションを追加してください。defaults,acl.

私の理解では、ユーザグループの全員にデータディレクトリへの書き込みアクセス権を持たせたいようです。これは以下のようにして実現しています。

setfacl -Rm g:users:rwX,d:g:users:rwX data/
32
32
32
2010-06-12 04:13:24 +0000

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

4
4
4
2015-09-03 15:36:56 +0000

一般的なケースでは他の回答が適用されますが、rsync が問題の原因であることに言及しているので、その呼び出しを調整する必要があるだけかもしれません。

手始めに、人気のある -a フラグは rsync がパーミッションをコピーするようにします。また、rsync は新しく作成されたファイルのパーミッションを変更するために -r フラグをサポートしています。

3
3
3
2010-06-12 04:43:45 +0000

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

Unixのファイルパーミッションは、実際には非常にシンプルなモデルです。私はACLが完全に自分自身を混乱させていることに気がつきます。)