Разница между пользователем sudo и пользователем root

Разница между пользователем sudo и пользователем root

В /etc/sudoersфайле перечислены пользователи, которые могут делать что-либо с помощью sudoкоманды.

Пользователь root создает и изменяет /etc/sudoersфайл.

Мне трудно понять эту концепцию.

Если все пользователи, имеющие привилегию sudo, принадлежат к sudoersгруппе, то все они могут стать пользователями root, выполнив sudo suкоманду.

Тогда кто же на самом деле является пользователем root и как он контролирует полномочия пользователей в группе sudoers?

Пожалуйста, объясните мне это.

решение1

Краткое описание: «root» — это фактическое имя учетной записи администратора. «sudo» — это команда, которая позволяет обычным пользователям выполнять административные задачи. «Sudo» — это не пользователь.


Длинный ответ:

"root" (он же "superuser") — это имя учетной записи системного администратора. Происхождение этого имени немного архаично, но это неважно.

Пользователь root имеет идентификатор пользователя 0 и номинально имеет неограниченные привилегии. Root может получить доступ к любому файлу, запустить любую программу, выполнить любой системный вызов и изменить любой параметр. (Но см. ниже¹).

До изобретения команды «sudo», если вы хотели выполнить административные задачи, вам приходилось входить в систему как root, либо получив приглашение на вход² каким-либо образом, либо с помощью команды su(«su» — сокращение от substitute user)³

Это немного хлопотно, и также не позволяет вам давать пользователям частичные административные полномочия. Поэтому была изобретена команда "sudo" (сокращение от "substitute user do").

Команда «sudo» позволяет вам выполнять команды с привилегиями суперпользователя, если ваш идентификатор пользователя указан в файле sudoers, что дает вам необходимые полномочия.

Так, например, sudo vi /etc/hostsпозволит вам редактировать файл hosts, как если бы вы работали как root. Вам даже не нужен пароль root, только ваш собственный пароль для входа.

И, конечно, sudo suпозволит вам просто стать root. Результат будет таким же, как если бы вы вошли в систему как root или выполнили команду su, за исключением того, что вам не нужно знать пароль root, но вам нужно находиться в файле sudoers.

Файл sudoers определяет, кто может использовать команду sudo и что они могут с ней делать.

Файл sudoers — это то, что дает вам нескольких администраторов⁴. Фактически, ваши администраторы — это root, плюс все, кто указан в файле sudoers. Без файла sudoers единственным администратором будет root.

На самом деле, в организациях, где кто-то другой администрирует ваш компьютер, довольно часто люди не знают пароль root вашего собственного компьютера — пока он есть в файле sudoers, это не имеет значения.

В одной компании, где я работал, с гигантской фермой серверов, только очень, очень малое количество людей знали пароли root. Вместо этого была база данных, в которой указывалось, кому разрешено работать на каких серверах. Автоматизированный процесс добавлял вас в файлы sudoers тех серверов, к которым у вас был доступ, и удалял вас, когда срок действия вашей авторизации истекал.


¹ Еще одно: современные версии Unix теперь могут ограничивать даже действия пользователя root.

ПодSELinux(Security Enhanced Linux) фактически существует список контроля доступа, который определяет, какая программа может что-либо делать, и даже пользователь root не может обойти эти ограничения.

Под управлением AppleЗащита целостности системы(SIP) (также известная как «без рута»), определенные файлы и каталоги заблокированы, так что доступ к ним могут получить только приложения из соответствующего белого списка.

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

² Приглашение "login: " — это еще один архаичный фрагмент истории Unix, восходящий к временам, когда мы все использовали терминалы ascii на последовательных линиях вместо оконных систем. Вы все еще можете получить приглашение "login: ", просто набрав loginв любом окне терминала или открыв соединение ssh (или telnet, или rsh) с вашим компьютером из другого места. Вы можете войти в систему как другой пользователь оттуда, если захотите. (И если у вашего компьютера есть последовательные порты, вы все еще можете настроить его так, чтобы разрешить вход в систему на них.)

³ Также возможно предоставление прав root отдельным программам. Эти программы могут делать все, что может делать пользователь с правами root, даже если они запущены обычным пользователем. Обычно они ограничены определенными задачами. Например,кронтабПрограмма имеет привилегии root, чтобы она могла редактировать таблицы cron. Очевидно, что "sudo" имеет привилегии root, чтобы она могла делать то, что она делает.

⁴ Я собираюсь осветить еще один момент, который я упустил ранее. Я использовал «администратор» и «root» взаимозаменяемо, но есть и другие виды администраторов. Их часто называют «ролевыми учетными записями», то есть эти учетные записи не принадлежат реальным людям, а существуют для выполнения определенной роли в системе. Если вы посмотрите на файл /etc/passwdв своей системе, вы найдете десятки и десятки таких учетных записей.

Например, если бы в вашей системе был установлен mysql, то был бы пользователь "mysql", и все файлы базы данных, файлы конфигурации и т. д. принадлежали бы этому пользователю. Только этот пользователь (и root, конечно) имел бы необходимые разрешения для доступа к файлам и запуска сервера mysql. В некотором смысле, этот пользователь был бы учетной записью администратора, но только для mysql.

Если вам необходимо выполнить задачи по администрированию базы данных, вам нужно либо стать «mysql» с помощью su mysqlкоманды, либо использовать sudo, где файл sudoers предоставит вам привилегии mysql для этих конкретных команд.

Связанный контент