2011-03-30 09:02:50 +0000 2011-03-30 09:02:50 +0000
37
37

新しいファイルが同じパーミッションを継承するようにファイルのパーミッションを設定するには?

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

親ディレクトリに配置されたすべての新しいフォルダとファイルに対して、ユーザとグループのパーミッションを再帰的に維持したいのですが、これにはスティッキービットを設定する必要があります。これにはスティッキービットを設定する必要があることは知っていますが、私が必要としていることを正確に示しているコマンドを見つけることができません。

これが今のところ私がやったことです。

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

その後、/path/to/parentに配置されたフォルダやファイルに対して、660のパーミッションを再帰的に設定したい。

0x1&

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

実際には、8進数フラグ660もおそらく正しくありません。私が欲しいパーミッションは

1./path/to/parentの下にあるディレクトリは、パーミッション 2./path/to/parentの下にあるファイルは、パーミッション 2.0x6&の下にあるファイルは、パーミッション 3. 0x6&にあるファイルやフォルダは世界では読めない

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

誰か助けてくれませんか?

回答 (3)

64
64
64
2011-03-30 10:28:30 +0000

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

  • rw- パーミッション → 110 バイナリ → 6 オクタル

このようにchmod g+sを使ってsetgidビットを設定することで、フォルダ/path/to/parentに作成された新しいファイルやフォルダにgroup ownershipを継承することができます。

chmod g+s /path/to/parent

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


POSIXファイルのパーミッションは継承されません。

ただし、 POSIX ACLs を使用してこれを実現することができます。ディレクトリにdefault ACLを設定します。

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

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

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


注意: ext3/ext4 を使用している古いシステムでは、以前は acl オプションを付けてファイルシステムをマウントする必要があった。

mount -o remount,acl /

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

10
10
10
2011-03-30 12:09:01 +0000

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のようなもの)

私はディレクトリ全体をchmod -Rすることはしません。必要に応じてパーミッションを変更する必要があります。

chmod o+w file

0x1& 0x1&

‘o’ は「その他」、'w’ は「書き込み」を意味します。u」は「user」、「g」は「group」を意味し、「r」と「x」は説明がつくと思います。パーミッションは ‘+’ ではなく ‘-’ を使って削除することができます。

2
2
2
2011-03-30 14:22:39 +0000

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

これらのステップは、あなたが望むことをするはずです (コマンド中のディレクトリを使用したいディレクトリに置き換えてください)

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

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

関連する質問

6
10
8
5
10