Когда пользователь создает файл через WebDAV, по умолчанию файл принадлежит пользователю и группе, выполняющей процесс Apache, с umask 022.
К сожалению, это делает невозможным для непривилегированных пользователей запись в файлы другими способами, не будучи членом группы, в которой работает Apache (что кажется мне особенно плохой идеей).
Мое текущее решение - установить umask 000
в envvars Apache и удалите все разрешения для мира из родительского каталога webdav для пользователя. Итак, если общий ресурс WebDAV /home/foo/www
, тогда / home / foo / www принадлежит www-data:foo
с разрешениями 770
. Это в большей или меньшей степени удерживает других непривилегированных пользователей, но в лучшем случае это обман, а в худшем - угроза безопасности.
Из моих исследований и копания в mod_dav и Apache я не могу найти разумного решения, кроме задания cron, возвращающего все разрешения обратно (я бы предпочел не иметь нагрузки и повышенной сложности на сервере). SuExec также не будет работать, потому что операции WebDAV не будут выполняться от имени другого пользователя.
Есть мысли по этому поводу? Спасибо.
Я обошел отсутствие у Apache возможности переключения пользователей с помощью Posix ACL. Это позволяет вам добавлять больше групповых и пользовательских записей в каждый файл, а также позволяет устанавливать разрешения по умолчанию для каталогов, которые автоматически добавляются к каждому файлу, созданному внутри.
Если я правильно понял, и вы используете Linux, вы можете включить Posix ACL, вам нужно перемонтировать файловую систему с acl
вариант. Тогда вы можете использовать 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
Однако предупреждение: вам, вероятно, потребуется некоторое время, чтобы привыкнуть к спискам ACL Posix, они добавляют немного больше сложности, даже если сначала это не кажется таковым.