Лучшие практики веб-интерфейса Linux

Я хочу создать веб-интерфейс для управления / администрирования моей системы Linux. Например, я хочу иметь возможность добавлять пользователей, управлять файловой системой и тому подобными вещами. Думайте об этом как клон cPanel, но скорее для системного администратора, а не для веб-администратора.

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

Думаю, еще один важный вопрос: как мне поступить с безопасностью при создании чего-то подобного?

PS: Это как проект для домашних животных и опыт обучения, поэтому меня не интересуют существующие решения, которые делают подобное.

2 ответа

Решение

Пусть специализированный сервисный демон работает как отдельный пользователь - назовем его "managerd". Настройте файл / etc / sudoers так, чтобы 'managerd' мог выполнять различные команды, которые вы хотите, чтобы он мог запускать от имени пользователя root без пароля.

Попросите веб-сервер сбросить "триггерные" файлы, содержащие команды для запуска в каталоге, который находится в режиме "770" с группой, членами которой являются только пользователь веб-сервера и "managerd". Убедитесь, что 'managerd' проверяет, что файлы имеют правильное владение, перед выполнением команды.

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

Ваше решение кажется очень разумным решением проблемы "корня".

Пара предложений:

  1. Привязка "специализированной службы" к localhost также поможет гарантировать, что запросы не могут быть сделаны извне.
  2. Проверка запроса вызова функций, которые выполняют действия, а не напрямую предоставляют сервису полный неограниченный доступ. Таким образом, вызывая функцию "addToGroup (пользователь, группа)" вместо универсального "executeAction(команда)".
Другие вопросы по тегам