Краткое содержание: «root» - это фактическое имя учетной записи администратора. «sudo» - это команда, которая позволяет обычным пользователям выполнять административные задачи. «Судо» не пользователь.
Длинный ответ:
«root» (он же «superuser») - это имя учетной записи системного администратора. Происхождение названия немного архаично, но это не имеет значения.
Корневой пользователь имеет идентификатор 0 и номинально имеет неограниченные привилегии. Root может получить доступ к любому файлу, запустить любую программу, выполнить любой системный вызов и изменить любой параметр. (Но смотри ниже¹).
До изобретения команды "sudo", если вы хотели выполнять административные задачи, вы должны были войти в систему как пользователь root, либо получая приглашение на вход в систему ² каким-либо образом, либо с помощью su
команды ("su" - сокращение от замещающего пользователя).
Это немного хлопотно, а также не дает вам частичных административных полномочий. Таким образом, команда "sudo" (сокращение от "замещающий пользователь 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 тех серверов, к которым у вас есть права доступа, и удалит вас по истечении срока действия вашей авторизации.
More Еще одна вещь: современные версии Unix теперь могут ограничивать даже то, что может делать пользователь root.
В SELinux (Security Enhanced Linux) фактически существует список контроля доступа, который определяет, какая программа может что делать, и даже root не может преодолеть эти ограничения.
В системе Apple, обеспечивающей защиту целостности системы (SIP) (также известной как «rootless»), некоторые файлы и каталоги блокируются, чтобы к ним могли обращаться только приложения из соответствующего белого списка.
Эти системы существуют для защиты системы от случая, когда злоумышленнику удается получить root-доступ. (Или, в некоторых случаях, для предотвращения взлома пользователями своих встроенных устройств.) По очевидным причинам чрезвычайно трудно обойти эти ограничения, даже с доступом с правами root.
² Приглашение «login:» - это еще один архаичный фрагмент истории Unix, восходящий к тому времени, когда мы все использовали терминалы ascii на последовательных линиях вместо оконных систем. Вы все еще можете получить приглашение «login:», просто набрав login
в любом окне терминала или открыв ssh (или telnet или rsh) соединение с вашим компьютером из другого места. Вы можете войти как другой пользователь оттуда, если хотите. (И если на вашем компьютере есть последовательные порты, вы все равно можете настроить его, чтобы разрешить вход на них.)
³ Также возможно, чтобы отдельным программам был предоставлен root-доступ. Эти программы могут делать все, что может делать пользователь с правами root, даже если они запускаются обычным пользователем. Обычно они ограничены конкретными задачами. Например, программа crontab имеет права суперпользователя, поэтому она может редактировать таблицы cron. Очевидно, что «sudo» имеет привилегии root, поэтому он может делать то, что делает.
⁴ Я собираюсь осветить еще один момент, который я затмил ранее. Я использовал «администратор» и «root» взаимозаменяемо, но есть и другие виды администраторов. Их часто называют «учетными записями ролей», что означает, что эти учетные записи не принадлежат реальным людям, а вместо этого существуют для выполнения определенной роли в системе. Если вы посмотрите на /etc/passwd
файл в вашей системе, вы найдете десятки и десятки таких учетных записей.
Например, если бы mysql был установлен в вашей системе, был бы пользователь «mysql», и все файлы базы данных, файлы конфигурации и т. Д. Все были бы в собственности этого пользователя. Только этот пользователь будет иметь необходимые разрешения для доступа к файлам и запуска сервера MySQL. В некотором смысле, этот пользователь будет учетной записью администратора, но только для mysql.
Если вам нужно выполнить административные задачи базы данных, вы либо станете «mysql» с этой su mysql
командой, либо sudo
будете использовать там, где файл sudoers даст вам привилегии mysql для этих конкретных команд.