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


85

というディレクトリがあり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

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

umaskの設定が役立つかどうかはわかりません。いずれにせよ、新しいファイルは実際にはそれに従いません。

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

Unixファイルの許可に戸惑うことがよくあります。正しい計画さえありますか?Debian lennyを使用しています。

回答:


53

システムのデフォルトのumaskを変更したくない場合、これはセキュリティ上のリスクです。スティッキービットオプションはある程度機能しますが、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にaclオプションを追加します defaults,acl

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

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

このコマンドを使用しましたが、問題は解決しませんでした。このコマンドを元に戻すにはどうすればよいですか?
イタイガノ

でubuntuのトリックをしましたsudo setfacl -Rm g:users:rwX,d:g:users:rwX /var/www/logs_or_something。PHPUnitテストに問題がありました。テストの実行からログファイルを作成した後、Apacheユーザーwww-dataはログファイルを読み書きできませんでした。
s3m3n

2
@Itai Ganot- setfaclmanページによると、-bまたは--remove-all拡張ACLを削除します。
jww 14

したがって、setfacl -Rm g:users:rwX,d:g:users:rwX data/最後に追加するだけ/etc/fstabですか?
425nesp 14

@piñaいいえ。/ etc / fstabに加える唯一の変更は、に変更defaultsすることdefaults,aclです。 setfaclターミナルから実行する必要があるコマンドです。 data/変更するディレクトリへのパスに置き換える必要があります。
セグフォルト14

32

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


11
setgidビットは、作成されたファイルがグループ/ if /を継承するようにします。新しいファイルを作成した人はそのグループのメンバーです。作成ユーザーが所有者であるがグループのメンバーではない場合、またはディレクトリが誰でも書き込み可能な場合、setgidビットは何もしません。また、すべてのファイル作成ユーザーのumaskは、適切なグループアクセスを許可するように設定する必要があります。
ダニーザウアー

1
@dannysauer「作成ユーザーが所有者でグループのメンバーではない場合... setgidビットは何もしません」-ありがとう。今は理にかなっていますが、rsyncからのフィードバックがないため、なぜ機能しないのか疑問に思っていました。
user12345

4

他の回答は一般的な場合に当てはまりますが、rsyncが問題の原因であることを述べたように、呼び出しを調整するだけでよい場合があります。

はじめに、人気のある-aフラグにより​​、rsyncコピーのアクセス許可が作成されます。使用-rのisteadを-aまたは追加-no-p(無許可シンク用)及び-no-g(なしグループシンク用)。また、rsyncは--chmod、新しく作成されたファイルのアクセス許可を変更するフラグをサポートしています。


3

umaskは、必要な許可に対して間違っています。002のumaskが必要です。現在022のumaskがあります。また、ディレクトリsetgidの作成に関するコメントは正しいですが、ファイルグループの所有権を変更したいかどうかはわかりません。

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


4
「Unixファイルのアクセス許可は、実際には非常に単純なモデルです。ACLは完全に自分自身を混乱させます。-私は反対を感じます(しかし、とにかく+1)。ACL(およびACEの許可/拒否)は単純であり、Unixの許可は意味がありません。しかし、それはPostfix / Dovecot / Clam / SpamAssassinのインストールに苦しんでいる人から来ています。
JWW
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.