ユーザーがWebDAVを介してファイルを作成する場合、デフォルトの動作では、ファイルはApacheプロセスを実行しているユーザーとグループによって所有され、umaskは022です。
残念ながら、これにより、特権のないユーザーが、Apacheが実行されているグループのメンバーでないと、他の方法でファイルに書き込むことができなくなります(これは特に悪い考えです)。
私の現在の解決策は、Apacheのenvvarsにumask 000
を設定し、ユーザーのwebdav親ディレクトリからすべてのワールド権限を削除することです。したがって、WebDAV共有が/home/foo/www
の場合、/ home/foo/wwwはwww-data:foo
の権限を持つ770
によって所有されます。これにより、他の非特権ユーザーが多かれ少なかれ排除されますが、それはせいぜい厄介であり、最悪の場合はセキュリティ災害が待ち受けています。
私の調査とmod_davとApacheの調査から、すべてのアクセス許可を元に戻すcronジョブ以外の合理的な解決策を見つけることができません(サーバーに負荷がかからず、複雑さが増したほうがいいです)。 WebDAV操作は別のユーザーとして実行されないため、SuExecも機能しません。
これについて何か考えはありますか?ありがとうございました。
Posix ACLを使用して、Apacheのユーザー切り替え機能の欠如を回避しました。これらを使用すると、すべてのファイルにグループおよびユーザーエントリを追加したり、ディレクトリ内に作成された各ファイルに自動的に追加されるディレクトリにデフォルトのアクセス許可を設定したりできます。
私が正しく推測し、Linuxを実行している場合は、acl
オプションを使用してファイルシステムを再マウントするために必要なPosixACLを有効にすることができます。次に、setfacl
とgetfacl
を使用して追加の権限を管理できます。 Debianベースのシステムでは、これらのツールはパッケージacl
にあります。 Posix ACLについては、man acl
およびman setfacl
でさらに読むことができます。 Posix ACLは一部のBSDシステムとMacOSでも利用できますが、私はそこで使用したことはありません。
たとえば、グループfileserver
が常に次のファイル内のすべてのファイルへの読み取りおよび書き込みアクセス権を持つフォルダを設定できます。
setfacl -Rm default:group:fileserver:rw,group:fileserver:rx /srv/fileserver
その結果、getfacl /srv/fileserver
は次のようなレポートを作成します。
# file: /srv/fileserver
# owner: aef
# group: aef
user::rwx
group::rwx
group:fileserver:r-x
mask::rwx
other::r-x
default:user::rwx
default:group::rwx
default:group:fileserver:rw-
default:mask::rwx
default:other::r-x
ただし、警告:Posix ACLに慣れるにはおそらく時間がかかるでしょう。最初はそうではないように見えますが、ACLはかなり複雑になります。