Я пытаюсь настроить производственный сервер, следует ли мне создать отдельного пользователя для запуска определенного приложения, аналогичного тому, что делает apache? Для них небезопасно запускаться от имени root?
ОС: Ubuntu 9.10
Сервер предназначен для веб-приложений, на нем размещается веб-сайт, но также есть много поддерживаемых серверных процессов.
Я предпочитаю, чтобы каждая служба приложения работала от имени отдельного пользователя, чтобы обеспечить максимальную изоляцию между ними. Если какая-либо часть системы сломается или скомпрометирована, я хотел бы как можно точнее локализовать ущерб.
Root - это волшебная кнопка. Как можно меньше следует запускать от имени root.
В остальном, это выделенный сервер? То есть сколько приложений в нем запущено? Всего один, выберите любого пользователя. Даже запустить его как веб-пользователь.
Вы можете думать о пользователе как о границе. Если все работает как один и тот же пользователь (скажем, www), тогда все эти вещи имеют прямой доступ друг к другу. Если кто-то будет скомпрометирован, все будет открыто.
Однако для многих случаев это не имеет значения. Не поймите неправильно, но вы не кажетесь экспертом по безопасности, и поэтому у меня такое чувство, что если кто-то получит доступ к вашей машине, все равно все кончено. Требуются целенаправленные усилия, чтобы защитить машину от целенаправленного злоумышленника.
Вы не упомянули, на каком языке написано ваше веб-приложение. В Ruby on Rails каждое приложение легко может быть отдельным пользователем. Если PHP, ну, наверное, нет. Вероятно, запустите их как веб-пользователь.
whatWhat У меня каждый экземпляр django работает как отдельный пользователь. Это лучший способ сделать это. Я использую процесс Apache + WSGI Daemon. Ранее я запускал все экземпляры с одним и тем же пользователем. Но мы случайно столкнулись с несколькими проблемами. В рамках тонкой настройки многих вещей я следил за разделением пользователей для каждого экземпляра. С тех пор у меня не было никаких проблем последние 8 месяцев.
В любом случае, как упоминал Джон, если один из ваших экземпляров будет скомпрометирован, все остальные экземпляры не должны беспокоиться.
Определенно не рекомендуется запускать веб-приложение Python от имени пользователя root. Если определенная часть кода должна запускаться от имени пользователя root, вам лучше вынести это в отдельную серверную службу, с которой основное веб-приложение взаимодействует с помощью некоторого процесса межпроцессного взаимодействия. Это серверное приложение должно принимать только соединения от хоста, на котором работает веб-приложение, а не произвольные соединения с любого хоста.
Кроме того, вы не говорите, как вы размещаете Django, поэтому вам становится труднее посоветовать вам, если вы также ищете метод изоляции кода для запуска от имени конкретного пользователя. Вы используете mod_python, mod_wsgi, fastcgi или проксируете сервер Python WSGI, на котором он запущен?
В худшем случае единственным выбором будет запуск кода от имени того же пользователя, от имени которого работает Apache. Это не рекомендуется при запуске других приложений на том же Apache, будь то Python, PHP или какой-либо другой язык. Это связано с тем, что все приложения могут мешать друг другу, и нарушение в отдельном приложении по-прежнему может вызвать у вас проблемы.
Таким образом, предпочтительнее запускать отдельные приложения как отдельных пользователей и блокировать разрешения файловых систем, чтобы каждый мог получать доступ только к данным этого приложения.
Если вам нужен дополнительный уровень паранойи, вы начинаете смотреть на запуск отдельных приложений в среде chroot.
Что именно вы можете сделать, зависит от того, как вы его размещаете, поэтому важно знать это.