私のPHPコードを保存できるフォルダや変更できるファイルはwww-dataの所有者である必要があります。 sudoなしで私が作成または編集したいすべてが私のユーザーの所有であるため、これは迷惑です。
一方、私たちの学校サーバーには、ユーザーが所有しているすべてが表示されますが、このような問題は決して発生しません。 www-dataは、所有者ではないにもかかわらず内容を保存または変更するのに問題がないようです。
すべてのコンテンツの所有権を維持しながら、wwwデータへのアクセスを妨げない/ var / wwwサイトをこのように機能させるにはどうすればよいですか?
答え1
私が一般的にWebサーバーで使用するソリューションは、ACLを使用することです。デフォルトでは、これは他のシステムで使用される一般的なユーザーグループに加えて追加の権限セットを使用することを意味します。制限されたPHPアクセスを設定する場合(たとえば、suPHPを使用する場合)、この機能は特に便利です。
自分のファイルの所有権を維持するために、そのファイルが自分の所有であることを確認します。
$ chown me:me /var/www -R
次に、どこでも読み取りアクセスを許可しますwww-data
(ディレクトリへのアクセスも許可します。時にはより詳細な設定が必要になる場合があります)。
$ setfacl -Rdm 'u:www-data:r-X' /var/www
$ setfacl -Rm 'u:www-data:r-X' /var/www
私はまた、私が書きたいすべてのものに対してApache書き込みアクセス権を与えました。たとえば、
$ setfacl -Rdm 'u:www-data:rwX' /var/www/uploads
$ setfacl -Rm 'u:www-data:rwX' /var/www/uploads
ACLを使用するには、acl
ファイルシステムがこのオプションでマウントされていることを確認する必要があります。これは以下で行われます/etc/fstab
。
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/sdxy /var ext4 defaults,acl 0 2
(/var
別のパーティションにあると仮定し、そうでない場合を参照/
)
ただし、一部のシステムではこのacl
オプションがデフォルトで設定されています。例えば:
Ubuntu 14.04 と ext4 以降、acl は既にデフォルト値なので、上記は必要ありません。
tune2fs
次のコマンドを使用して、ファイルシステム(ext * FSと仮定)でACLが有効になっていることを確認できます。
# tune2fs -l /dev/sdxy | grep acl
Default mount options: acl ...
詳細はsetfacl
、ねえ。
答え2
(あなたが制御する機械で)できる最も簡単なことは次のとおりです。
www-data
アカウントのグループにグループIDを追加し、フォルダグループを書き込み可能にします(例:)chmod 775
。あるいは、自分が所有するディレクトリを指すように変更して、そのディレクトリを読み取ることができる(およびスクリプトを実行できるかどうか)確認することも
DocumentRoot
できます。www-data
これらのどれも実際のサーバーにとって満足のいく解決策ではありません(十分に安全ではありません)。