Назад | Перейти на главную страницу

Почему мне никогда не следует запускать программное обеспечение с правами root, хотя часто рекомендуется предоставить учетной записи root-доступ для запуска программного обеспечения?

Я долгое время являюсь техническим специалистом, но 100% моей работы выполнялось в среде Windows. У меня довольно хороший уровень понимания многих технических вопросов, таких как управление учетными записями пользователей, безопасность и разработка программного обеспечения.

Пытаясь настроить VPS при запуске debian (это для личного проекта), я нашел множество инструкций, которые помогли мне настроить мою систему, загрузить исходный код и скомпилировать его.

Меня смущает то, что ты всегда не рекомендуется запускать любое программное обеспечение с правами root. Кажется, что root следует использовать только для настройки учетных записей пользователей и разрешений. Однако, если учетной записи требуется доступ почти ко всему, что может предложить система, учетной записи предоставляется root-доступ.

Если учетной записи предоставлен root-доступ, разве эта учетная запись не является root-доступом? Если это правда, почему я не могу упростить задачу (потому что это простой проект) и просто запустить все из корневой учетной записи VPS?

Я предполагаю, что на это должен быть хороший ответ, и я просто упускаю его. Кажется нелогичным, что это важная, установленная истина - никогда не запускать программное обеспечение от имени пользователя root, но при этом предполагать, что важные учетные записи должны иметь доступ root. IMHO, это может показаться еще большей проблемой безопасности, потому что вместо одной учетной записи root теперь есть две (или более!) Учетные записи, которые могут быть взломаны.

Конечно, есть и другая возможность - многие документы, которые я нашел (через Google), неверны. Если это так, то, к сожалению, на очень профессиональных (и часто четко сформулированных) веб-сайтах предоставляется очень много плохой информации. Это позор и немного обескураживает.

Я понятия не имею, что вы на самом деле имеете в виду под «предоставлением корневого доступа», но обычный способ дать кому-то или чему-то административный контроль только над определенными аспектами системы - это использовать sudo механизм, который вы можете настроить, чтобы разрешить только то, что нужно пользователю.

В случае демонов / служб существуют другие методы, такие как удаление привилегий root после запуска или порождение дочерних элементов, работающих от имени других пользователей.

Кроме того, есть и другие методы, позволяющие еще лучше контролировать, но они, как правило, намного сложнее и подвержены ошибкам (вспомним SELinux). Общий термин для этого подхода: Контроль доступа на основе ролей.

Многие процессы, которым изначально требуется root, используют setuid [1] для сброса привилегий [2] после выполнения задач начальной настройки, требующих повышенных привилегий. Преимущество этого подхода заключается в том, что демон / служба может выполнять действия, требующие повышенных разрешений в начале, и переходить к непривилегированному пользователю позже, так что меньше подверженности риску в случае сбоя процесса или его взлома и т. Д.

Например. Apache необходимо привязать к порту 80 в системе. Порт 80 - это привилегированный порт (он меньше 1024) и требует root-доступа. Таким образом, это решается путем запуска apache изначально от имени пользователя root, привязки порта и любых других необходимых настроек, а затем использования setuid для запуска процесса от имени пользователя веб-сервера (www-data на ubuntu).

[1] http://en.wikipedia.org/wiki/Setuid

[2] http://en.wikipedia.org/wiki/Privilege_separation

Я думаю, вас смущает разница между запуском пользователя как «sudo» и использованием root. программа "sudo" предлагает пользователям на машине выполнять команды суперпользователя. Теперь даже в sudo вы не используете учетную запись пользователя с полным доступом root, в su или sudo все еще есть ограничения. Также я бы не рекомендовал делать заявления о методах обеспечения безопасности Debian, особенно задавая подобные вопросы.