web-dev-qa-db-ja.com

新しく作成されたファイル/フォルダーにデフォルトのアクセス許可を設定する

すべてのサイトが同じ「画像」フォルダを共有するサイトのネットワークがあります。/home/_images/entityを作成し、すべてのWebサイトからシンボリックリンクしました。いずれかのサイトで/ images /を開くと、画像のリストが表示され、それらを表示できます。

問題は、PHPスクリプトのプロセスIDをファイル所有者IDに変更するsuPHPです。したがって、site1.comをロードすると、すべてのスクリプトはuser1として実行されます(これらのスクリプトで作成されたファイル/フォルダーはuser1:user1に属します)。site2.comをロードすると、すべてのスクリプトはuser2として実行されます(これらのスクリプトで作成されたファイル/フォルダーはuser2:user2に属します)。これらのユーザーはすべて同じグループに属していないので、私はしません。 cPanel/WHMサーバーなので、変更したいので、すべてのユーザーの(プライマリ?)グループを変更すると、何かが台無しになるのではないかと心配しています。

したがって、/ home/_images/entity(rootが所有)の下に新しく作成されたすべてのフォルダーとファイルがすべてのユーザーに対して読み取り/書き込み権限を持つように設定する必要があります。

これが私が使用したコマンドです:

setfacl -Rdm o::rwx /home/_images/entities

確認するには:

root@server1 [~]# getfacl /home/_images/entities/
getfacl: Removing leading '/' from absolute path names
# file: home/_images/entities/
# owner: root
# group: root
user::rwx
group::rwx
other::rwx
default:user::rwx
default:group::rwx
default:other::rwx

これは問題ないように見えますが、site1.com経由で画像をアップロードしようとすると、次のようになります。

root@server1 [/home/_images/entities]# ls -l
total 24
drwxrwxrwx+ 5 root    root    4096 Jan 14 06:25 ./
drwxrwxrwx  5 root    root    4096 Jan 12 13:08 ../
drwxrwxr-x+ 3 user1   user1   4096 Jan 14 06:25 1/

そして、フォルダ「1」には画像(および親指フォルダ)があります。

root@server1 [/home/_images/entities/1]# ls -l
total 236
drwxrwxr-x+ 3 user1   user1     4096 Jan 14 06:25 ./
drwxrwxrwx+ 5 root    root      4096 Jan 14 06:25 ../
-rw-rw-rw-  1 user1   user1   225569 Jan 14 06:25 689048f221ab7c556f4d482a9d92b2d6.jpg
drwxrwxr-x+ 2 user1   user1     4096 Jan 14 06:25 thumbs/

私の質問:

1)新しく作成されたフォルダに[ユーザーやグループ以外の]他のすべてのユーザーに対する「書き込み」権限がないのはなぜですか? site1.comから最初の画像をアップロードすると、他のサイトから他の画像をアップロードすることはできませんが、すべてのサイトでそれらを表示できます。

2)権限リストの最後にある+は何ですか? (drwxrwxr-x +)

3)新しく作成されたファイルには、ユーザー、グループ、およびその他すべてのユーザーに対する「rw」権限しかなく、実行権限がないのはなぜですか?ここで実行フラグを実際に設定する必要はありませんが、コマンドから「o :: rwx」を設定したことがわかりますので、そこにあるはずです(またはないのですか?)

実際の本当の問題は#1-他のユーザーがこのフォルダーに書き込むことができないため、ユーザーが他のサイトから画像をアップロードしたり、他のサイトがサムネイルを作成(欠落)したりできないことです。

3
Avram
  1. アプリケーション(この場合はsuPHP)は、デフォルトをオーバーライドして、必要なアクセス許可を明示的に設定できます。 suPHPが「その他」のアクセス許可を必要なもの以外にする場合、回避策は、user1と必要な他のすべてのユーザーを含む別のグループ(ユーザーなど)のACLを追加することです。

    setfacl -Rdm g:users:rwx /home/_images/entities
    

    その場合、suPHPはその許可をそのままにしておく可能性があります。これはセキュリティの観点からも優れていることに注意してください。これは、書き込み権限をワールドではなくユーザーグループにのみ付与するためです。

  2. +は、ACLが存在することを意味します。したがって、リストされているugoセット以外の他のアクセス許可が有効です。それらを表示するには、getfaclを実行する必要があります。

  3. これは#1と同じ答えだと思います。suPHPが実行権限を明示的にオーバーライドしているためです。 #1と同じ解決策が適用されます。

1
Andrew Schulman