Прежде всего я хотел бы вновь итерируют присущие опасности позволяя (общественность) веб-сервер для изменения системных файлов. Выполнение этого будет приведет к тому, что злоумышленник нарушит вашу систему, это всего лишь вопрос о том, сколько времени потребуется.
Сказали, что есть пара проблем с вашим кодом. Первым из них является зависимость от внешних сторонних (shell) команд, для чего-то, что может и должно быть сделано в чистом PHP.
Редактирование текста является одним из основных преимуществ PHP, в конце концов, и код будет довольно простым. В качестве примера ...
if (!$content = file_get_contents ($filename)) {
// Handle errors opening/reading the file here.
}
// Assuming case-sensitive search and replace here, as per the `sed` used.
$content = str_replace ("old text", "new text", $content);
if (!file_put_contents ($filename, $content)) {
// Handle errors with writing to the file here.
}
Основным преимуществом является то, что вы не должны полагаться на несвязанных программ третьих сторон присутствовать (хотя и sed
довольно повсеместно). Который делает код намного проще для понимания, самодостаточным и, следовательно, платформенным агностиком (в максимально возможной степени).
КАК за то, почему ваш код не работает, я тоже подозреваю, что это имеет какое-то отношение к разрешениям на файлы. Как отмечено в комментариях, пользователь www-data
не имеет права на запись в папку /etc/
по умолчанию. Поэтому, чтобы позволить ему редактировать файл там, вам сначала нужно создать файл с пользователем с правами root, а затем изменить владельца на www-data
.
Однако, не ни при каких обстоятельствах делать это с уже существующими файлами в этой папке. Потенциал непреднамеренных и катастрофических побочных эффектов слишком велик!
Если вам абсолютно необходимо, чтобы скрипт PHP изменял системный файл, напишите сценарий оболочки и вызовите его через crontab
или что-то подобное. После вы на 100% уверены, что вход на 100% безопасен от злоупотреблений. (IE: только печатные символы, предпочтительно ASCII.)
Кажется, что ваши 'www-data' или любой другой пользователь не имеет прав на запись в этот каталог. Цитата: _ Если пользователь Apache (www-data) может писать или изменять/etc, вся система скомпрометирована. –
Чтобы получить доступ из вашего php-скрипта, вы должны изменить группу (см. Chown) файла в ту же группу apache/php работает и дает правильные групповые разрешения через chmod. Для обеспечения безопасности apache должен иметь доступ только к этому файлу в файле/etc. –
Отсутствующая одинарная цитата, которая должна закрыть регулярное выражение, является опечаткой? –