Я сейчас пишу сценарий PHP, который добавит блоки IP-адресов в . htaccess
файл. Меня беспокоит то, что я не хочу, чтобы файл .htaccess
был открыт для пользователя веб-сервера для общей записи, поскольку в этом случае любой компромисс веб-сервера позволит им записывать все, что они хотят, на .htaccess
файл. Поэтому я пытаюсь найти способ ограничить сценарий PHP, чтобы он мог писать только то, что я хочу, каким-то образом.
Я думаю, что подходящим способом сделать это может быть создание сценария в другом месте, возможно, принадлежащем root, для которого установлен suid
(мой веб-раздел не позволяет suid
). Затем я могу вызвать сценарий из своего PHP-сценария, и он сможет делать только то, что интерфейс этого промежуточного сценария предоставляет ему, а именно принимать параметры, необходимые для записи кода блокировки определенного IP-адреса в файл .htaccess
и ничего больше.
Похоже, это лучший способ приблизиться к этому? Есть ли какой-либо другой способ лучше, или какие-либо соображения, которые я упускаю?
Мета-заметка : Я рассматривал сайт информационной безопасности или переполнение стека для этого вопроса. Если на одном из них будет лучше, пожалуйста, дайте мне знать.
Пусть PHP-скрипт записывает IP-адреса в таблицу базы данных. Отдельно, из cron
, периодически выполняйте другой скрипт (рекомендация? Python), который запрашивает значения и записывает их в файл .htaccess
. Затем вы можете сохранить жесткие права на файл .htaccess
, например 0640
, root:www-user
.
Мы можем установить бит SUID для скрипта; но по умолчанию Linux корректно игнорирует его. Просто измените права доступа на что-то вроде 0700
, root:root
на скрипте, который запускается из cron
.
Множество заданий, подобных этому, можно обрабатывать с помощью этой техники, своего рода очереди баз данных. Я использовал ее, когда веб-интерфейс был требованием проекта для управления системой. Очередь в подобных сценариях может управлять пользователями, паролями, виртуальными хостами, DNS - да что угодно.