apache — Как сменить имя хоста, IP-адрес через веб-сайт PHP безопасно, CentOS

Я пишу графический интерфейс веб-сайта для администрирования устройства сервера данных под управлением CentOS. Многие приборы делают это; Поставщик по существу создает графический интерфейс для изменения только определенных параметров конфигурации и блокирует все остальное. Но я почти уверен, что у меня проблемы с разрешениями, и я ищу самый безопасный способ сделать это. то есть кажется, что когда пользователь отправляет изменение имени хоста через графический интерфейс, команда shell_exec запускается как apache. Apache, вероятно, не имеет прав на изменение имени хоста, поэтому это не работает. Предоставление Apache этих прав может быть небезопасным, верно? Так в чем же решение? Как все поставщики устройств могут писать графические интерфейсы, которые меняют имена хостов, как они это делают (безопасно)?

Выдержки из кода:

                <form action="Settings.php" method="get">
<div class="box">
<h1>Device Settings</h1>
Hostname: <input type="text" name="Hostname" label="Hostname" value="<?php echo $Hostname; ?>"><br />
<input type="submit" value="Set"><br />
</div>
</form>
$Hostname=shell_exec("hostname"); /*gethostname**/

if (isset($_GET['Hostname'])){
$Hostname=$_GET['Hostname'];
$output1=shell_exec("sudo hostname ". $Hostname. " 2>&1");*/

}

1

Решение

Конечно, небезопасно давать apache такие привилегии. В этом случае любой пользователь на этом сервере может запустить sudo и сделать то, что он хочет. Лучший способ — написать системный демон, управляемый с другого защищенного сервера.

Если вам нужно решение с одним сервером, вы можете запустить другой привилегированный Apache, который не обслуживает виртуальные хосты пользователя. Это будет намного безопаснее.

1

Другие решения

Я бы никогда не связал Apache напрямую с системными командами. Любое использование shell_exec() следует считать запах кода. Я бы пошел на это, если бы ваш GUI ничего не делал, кроме сохранения его значений в каком-то простом непривилегированном хранилище, например, в файле JSON, сохраненном где-то в выделенном каталоге, или, возможно, в базе данных SQLite. Это устраняет необходимость предоставлять Apache какие-либо специальные разрешения и дает дополнительное преимущество, заключающееся в том, что вы можете сохранять несколько версий конфигурации с метками времени, что позволяет вам просто вернуться к любой предыдущей конфигурации в случае ошибки. Затем я бы создал отдельный процесс, не связанный с веб-службой, который читает конфигурацию и вносит соответствующие изменения на уровне системы. Только этот процесс требует повышенных разрешений, а не весь веб-сервер. Он может быть написан на любом языке, который вам нравится, и может быть выполнен вручную по желанию, как cron, который запускается с определенным интервалом, или как демон, который активно следит за изменениями.

1

Вы можете настроить sudo чтобы разрешить выполнение всех команд, одну определенную команду или шаблон команды (также можно использовать регулярное выражение) от имени другого пользователя (например, www-данные, например) без запроса пароля.

Проверить руководство.

-1
По вопросам рекламы [email protected]