Файлы только для чтения, предотвратите удаление

Вот моя ситуация. Я выполняю веб-сайт WordPress, который использует w3 общий кэш. Значительная часть этого веб-сайта является сначала динамичной, и затем статичной. Таким образом, я кэширую эти страницы как статический HTML в папке, давайте назовем его /home/test.com/wp-content/cache/page_enhanced/static/. Таким образом, каждый файл в той папке является представлением HTML того, что кто-то получил бы, если бы они посетили test.com/static или test.com/static/foo или test.com/static/foo/bar. Любые файлы в этой папке не должны будут быть обновлены в течение приблизительно 6 месяцев, но будет 40K + файлы в каталогах.

Я запустил скрипт Python (Главный Кэш Optimus) для посещения всех страниц в sitemap.xml для генерации всех файлов, которые войдут в ту папку. Apache затем получает запросы на test.com/static/foo, пропуски все PHP и обработка SQL и подают файл HTML (так запрос к http://test.com/static/foo подает файл, расположенный в /home/test.com/wp-content/cache/page_enhanced/static/_index.html).

Я хочу, чтобы те файлы существовали в той текущей форме, пока я не вхожу в папку как sudo и удаляю те файлы вручную.

Не все файлы в /home/test.com/wp-content/cache/page_enhanced/ должен существовать в той текущей форме, просто /static/ каталог и это являются подкаталогами.

Таким образом, я перешел в /home/test.com/wp-content/cache/page_enhanced/static/ и работал find ./ -type f -exec chmod 444 {} \;. К моему удивлению большинство файлов было удалено сегодня (это, должно быть, было Сценарием PHP, я - единственный с ssh доступом).

Как я могу предотвратить это? Специализированный веб-сервер Ubuntu. Кажется легким, но я - сеть dev, я только знаю достаточно, чтобы быть опасным.

Править: Я не хочу устанавливать полномочия на папке, потому что будут некоторые вещи на лету, которые должны кэшироваться и затем подаваться. Так http://test.com/search/weird+search+term+foo+bar должен динамично кэшироваться как _index.html после того как кто-то ищет это, таким образом, в следующий раз кто-то ищет его, это не должно будет проходить обработка SQL и PHP.

Так вторичная проблема, я должен сказать, что любые файлы в рамках моего каталога должны автоматически получить эти разрешения, но это - меньше беспокойства на данный момент.

1
задан 14 April 2014 в 17:02
2 ответа

Просто создайте их в отдельном месте, а затем используйте к нему крепление только для чтения.

Например:

Вы хотите, чтобы /home/test/x был только для чтения.

Создайте все как /home/test/x.writeable/*.

mount -o bind -o ro /home/test/x.writable /home/test/x

Другим решением было бы включение ACL на вашем разделе и их использование для блокирования записи в эти файлы.

.
1
ответ дан 3 December 2019 в 21:19

Если apache работает под учётной записью 'пользователя', которому принадлежат эти файлы (возможно, 'apache'), то как владелец файлов он может изменить права доступа, что позволит ему удалить их. Или же, если apache работает от имени root, он может делать всё, что захочет.

Некоторые опции, которые приходят на ум, могут заключаться в смене владельца файлов на учётную запись, под которой apache не работает, не запуская apache от имени root (если это так), или в установке некоторых более эзотерических значений прав доступа, которые существуют в определённых файловых системах и операционных системах. Пара примеров включают установку атрибутов файловой системы ( man 'chattr' и опцию -i "неизменяемый"), списки контроля доступа на уровне файловой системы ( man 'setfacl') или обязательные системы контроля доступа, такие как selinux.

.
1
ответ дан 3 December 2019 в 21:19

Теги

Похожие вопросы