web-dev-qa-db-ja.com

新しいファイルが同じ権限を継承するようにファイルの権限を設定する方法

スクリプトによって、新しいサブフォルダとファイルが自動的に作成されるフォルダがあります。

親ディレクトリに配置されたすべての新しいフォルダとファイルに対して、ユーザーとグループのアクセス許可を再帰的に維持したいです。私はこれがスティッキービットを設定することを含むことを知っています、しかし私は私が必要なものを正確に示すコマンドを見つけるようには思えません。

これは私がこれまでにやったことです:

Sudo mkdir -p /path/to/parent
Sudo chmod -R 660 myself:somegroup /path/to/parent

その後、私は660パーミッションを/path/to/parentに置かれたフォルダーとファイルに再帰的に設定したいです。

しかし、これまでに試したことはすべて失敗しました。誰かが助けてもらえますか?

実際には8進数のフラグ660はおそらく正しくないかもしれません。必要な権限は次のとおりです。

  1. /path/to/parentの下に置かれたディレクトリは、権限を持つユーザーによって実行可能です。
  2. ファイルは、ユーザー自身およびsomegroupのメンバーによって読み取り/書き込み可能です。
  3. /path/to/parent内のファイルとフォルダは誰にでも読めない

私はUbuntu 10.0.4 LTSを使っています。

誰かが助けてもらえますか?

34
oompahloompah

Grawityはすばらしい答えを出しますが、私は編集された質問が事情をわずかに変えたかもしれないと思います。

私は、Apacheのユーザー/グループが所有するディレクトリをそのままにしておくことをお勧めします。これはおそらくあなたのディストリビューションによってApachehttpdのどちらかでしょう。

例えば.

chown -R Apache:apache /path/to/parent

そうすれば、 https://serverfault.com/questions/164078/is-adding-users-to-the-group-www-data-safe-on-debian または自分自身をApacheグループに追加して、ディレクトリへのグループアクセス権を確実に与えます。 (usermod -aG Apache usernameのようなもの)

Htmlスクリプトやjpg、その他のランダムなものを実行可能にしたくないので、ディレクトリ全体をchmod -Rしないでください。必要に応じて権限を変更する必要があります。 (ただし660にリセットしても最悪のアイデアにはならないかもしれません。)

あなたが試してみることが好きかもしれませんものがあります:

chmod o+w file

「o」は「その他」を意味し、「w」は「書き込み」を意味します。また、 'user'に 'u'、 'group'に 'g'、 'r'と 'x'を付けることもできます。権限を削除するには、「+」ではなく「 - 」を使用します。

9
PriceChild

あなたが探しているパーミッションビットは0770と0660です。

  • rw-の許可→110のバイナリ→6の8進数

グループの所有権は、次のようにchmod g+sを使用してsetgidビットを設定することで、フォルダー/ path/to/parentに作成された新しいファイルおよびフォルダーに継承できます。

chmod g+s /path/to/parent

これで、/ path/to/parentの下に作成されたすべての新しいファイルとフォルダーには、/ path/to/parentに設定されているのと同じグループが割り当てられます。


POSIXファイルのアクセス権は継承されません継承されません。それらは作成プロセスによって与えられ、その現在のumask値と組み合わされます。

ただし、これを実現するために POSIX ACL を使用できます。ディレクトリにデフォルトACLを設定します。

setfacl -d -m u::rwX,g::rwX,o::- /path/to/parent

これはsetfaclを/ path/to/parentディレクトリに適用し、-mefaultACLを修正する-d - 新しく作成されたアイテムに適用されるものになります。 (大文字のXは、ディレクトリだけが+xビットを受け取ることを意味します。)

(必要に応じて、ACLにu:someuser:rwXまたはg:someuser:rwX(できればグループ)を追加できます。)


注:ext3/ext4を使用している古いシステムでは、aclオプションを使用してファイルシステムをマウントする必要がありました。そうしないと、すべてのACLが無視され、新しいACLを設定できなくなります。

mount -o remount,acl /

これを恒久的に設定するには、tune2fs -o acl <device>を使用するか/etc/fstabを編集します。

57
grawity

私はあなたが問題を複雑にし過ぎていると思います。最上位ディレクトリに他の人がアクセスできない場合、他の人はツリー内にファイルを作成できません。 Apacheだけが書き込みを行っている場合は、グループ書き込みアクセスは必要ありません。

これらのステップはあなたが望むことをするべきです(コマンドのdirectoryをあなたが使いたいディレクトリで置き換えます):

  • apacheのデフォルトスクリプトumask 027/etc/default/Apacheを追加します。これにより、他者がApacheが作成したファイルやディレクトリにアクセスするのを防ぐことができます。
  • apacheに書き込みを許可したいディレクトリでchown www-data:www-data directoryを実行します。
  • apacheに書き込みを許可したいディレクトリでchmod 750 directoryを実行します。

Apacheにディレクトリへの書き込みを許可すると、提供しているコンテンツにあらゆる種類のマルウェアを注入することが可能になります。このディレクトリツリーの内容を適切に監視してください。

2
BillThor