Разница между пользователем sudo и пользователем root [закрыто]

21

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

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

Мне сложно понять эту концепцию.

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

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

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

Rancho
источник
4
Я думаю, что вам нужно расширить то, что трудно понять.
garethTheRed
кто такой пользователь root? Этот вопрос мне сложно понять. Потому что пользователи humn могут относиться только к группе sudoers
ранчо
@rancho обновите вопрос, пожалуйста
peterph
1
Попробуйте unix.stackexchange.com/questions/159614/...
garethTheRed
Простой ответ на ваш основной вопрос (на основе комментариев к ответу): Это правда, что различие между rootдоступом и sudoправами становится несущественным, если вы разрешаете sudo suработать. Тем не менее, вы не должны допустить этого. Вы можете разрешить только определенный набор команд, например, предоставить младшему администратору sudoдоступ только для определенных команд резервного копирования.
Подстановочный

Ответы:

29

Краткое содержание: «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 для этих конкретных команд.

Эдвард Фальк
источник
1
Файл sudoers - это то, что дает вам несколько администраторов. По сути, ваши администраторы имеют права root, а также все, кто указан в файле sudoers. Без файла sudoers единственным администратором является root.
Эдвард Фальк
1
«В SELinux (Security Enhanced Linux) фактически существует список контроля доступа, который определяет, кто может что делать, и даже root не может преодолеть эти ограничения». - если даже root не может пройти эти ограничения, тогда кто создает эти ограничения?
Ранчо
1
Чтобы прояснить это: «По сути, ваши администраторы - root, а также все, кто указан в файле sudoers». записи sudoers не должны означать полный доступ root или даже доступ на уровне root; Я мог бы предоставить Свену возможность перезапустить агент мониторинга, который работает как монитор.
Джефф Шаллер
1
The "sudo" command lets you execute commands with superuser privileges as long as your user id is in the sudoers file [..], На моей машине (Solus OS 3) это неправильно. Моего имени пользователя нет в файле sudoers. и я все еще могу сделать sudo.
Мартин Андерссон,
2
Старый ответ, и это педантизм, но suэто сокращение от «замещающий пользователь»; sudoпоэтому "замещающий пользователь делает". Вы можете использовать, suчтобы войти как другой пользователь, а не просто root. И вы можете использовать sudoдля выполнения команд от имени другого пользователя.
josaphatv