Я уже давно использую Linux, и всякий раз, когда я печатал, sudo
я думал, что переключаюсь на пользователя root для получения команды.
Видимо, это не так, потому что все, что мне нужно, это пароль моей учетной записи. Я предполагаю, что поскольку я не работал с несколькими пользователями, я не заметил этого в реальном мире.
Я не уверен, как Ubuntu настраивает мою первую учетную запись. Есть ли пользователь root? Я рут? Я предполагаю, что я только что создал нового пользователя после установки, но он дал мне привилегии root? Просто немного запутался здесь ...
Так почему мне разрешено запускать команды root с паролем моего пользователя?
sudo
имеет установленный бит "setuid". Таким образом, он запускается как пользователь, который владеет им (который является root на всех стандартных системах, если я не ошибаюсь), а не как пользователь, который запускает его.sudo
затем загружает/etc/sudoers
файл и проверяет, что разрешено, основываясь на том, кто его запустил.sudo
привилегиями, возможно, работающих в географически распределенных местах и в смену 24 × 7, вы хотите иметь возможность немедленно отозвать привилегированный доступ одного человека (например, если Вы подозреваете его целостность). Если все используют один-единственный пароль root, и вы меняете его без предварительной координации, это может привести к хаосу. …Ответы:
В деталях это работает следующим образом:
/usr/bin/sudo
В исполняемом файле установлен бит setuid , поэтому даже при выполнении другим пользователем он запускается с идентификатором пользователя владельца файла (в данном случае root).sudo
проверяет в/etc/sudoers
файле, какие привилегии у вас есть и разрешено ли вам запускать команду, которую вы вызываете. Проще говоря,/etc/sudoers
это файл, который определяет, какие пользователи могут запускать какие команды, используяsudo
механизм.Вот как этот файл выглядит на моей Ubuntu:
Третья строка - это то, что, вероятно, вас интересует. Это позволяет любому в группе "sudo" выполнять любую команду от имени любого пользователя.
Когда Ubuntu настраивает первую учетную запись во время установки, она добавляет эту учетную запись в группу «sudo». Вы можете проверить, к каким группам принадлежат пользователи, с помощью
group
команды.sudo
просит у вас пароль. Что касается того, что ему нужен пароль пользователя, а не пароль root, то это отрывок из руководства sudoers :Однако, по сути, вам
sudo
не нужен ваш пароль пользователя ни для чего. Он просит это просто для того, чтобы убедиться, что вы действительно являетесь собой, и предоставить вам какое-то предупреждение (или шанс остановиться) перед тем, как вызывать какую-то потенциально опасную команду. Если вы хотите отключить запрос пароля, измените запись sudoers на:После аутентификации
sudo
создается дочерний процесс, который запускает вызванную команду. Ребенок наследует идентификатор пользователя root от своего родителя -sudo
процесса.Итак, отвечая на ваши вопросы точно:
Ты был прав. Каждая команда
sudo
начинается с идентификатора пользователя root.Да, есть учетная запись пользователя root, отдельная от учетной записи пользователя, созданной во время установки системы. Однако по умолчанию в Ubuntu вы не можете войти в интерактивный терминал как пользователь root.
Нет, вы не рут. Вы имеете право только запускать отдельные команды от имени пользователя root , используя
sudo
механизм, описанный выше.Вы должны вводить пароль пользователя только из-за
sudo
внутреннего механизма безопасности. Это может быть легко отключено. Вы получаете свои полномочия root из-за бита setuid/usr/bin/sudo
, а не из-за введенных вами паролей.источник
sudo
можно запустить без ввода моего пароля. Отличный ответ!rootpw
флагом вsudoers
.sudo su - root
именно это и даст вам корневой терминал. Однако вы не можете легко войти в сеанс рабочего стола как root.sudo
имеет привилегию root и решает, передать ли вам это на основе файла конфигурации.Весь смысл в
sudo
том, чтобы предоставить вам чужие привилегии (обычно root) без запроса пароля этой другой учетной записи (в отличие отsu
).sudo
здесь просит ваш пароль, чтобы убедиться, что прохожий не использует ваш разблокированный терминал.Ubuntu и многие другие ОС Linux и Unix предоставляют первоначальной учетной записи, созданной во время установки, право на выполнение любых команд как
root
.Хотя
root
по-прежнему используется учетная запись в Linux, прямойroot
вход по умолчанию отключен для повышения безопасности и отслеживаемости.источник
Петр очень хорошо объяснил, как
sudo
работает. Тем не менее, он не очень мотивировал, почему это работает таким образом, поэтому я попытаюсь добавить это здесь.До того, как
sudo
команда была создана, у нас былаsu
команда. Эта команда позволяет одному пользователю выполнять команды как другой пользователь, обычноroot
(какsudo
, например, это целевой пользователь по умолчанию). Это было абсолютно без разбора, вы можете выполнить любую команду. Поскольку он может использоваться любым пользователем, фактически эквивалентен входу в систему в качестве этого пользователя, требуется, чтобы вы знали пароль целевого пользователя.В какой-то момент было добавлено немного больше контроля доступа: чтобы использовать
su
, вы должны были быть членомwheel
группы. Но поскольку вы по-прежнему можете выполнять любую команду, все же имеет смысл требовать, чтобы вы знали их пароль.Требование, чтобы пользователи знали друг друга или пароль суперпользователя, было не очень надежным. Часто вы просто хотите предоставить определенным пользователям ограниченный доступ к какой-либо другой учетной записи (это является частью концепции безопасности, называемой принципом наименьших привилегий ). Это также затрудняет подотчетность: если несколько человек знают пароль учетной записи, и эта учетная запись связана с ошибкой или злоупотреблением, вы не можете сказать, кто из них на самом деле это сделал.
Так
sudo
было создано. Вместо того, чтобы позволять пользователям выполнять какую-либо команду, он имеет сложный файл конфигурации, кратко затронутый в ответе Петра, в котором точно указывается, кто может его использовать, на каких пользователей они могут переключаться и какие команды им разрешено выполнять. Благодаря этому детальному контролю над тем, кто может что делать, нам больше не нужно предоставлять пользователям пароль целевой учетной записи; если бы мы это сделали, они могли бы легко обойти все элементы управления в файле конфигурации, войдя в систему как этот пользователь. Вместо этого мы обычно просто требуем, чтобы они доказали, что они - те, кем они вошли в систему, введя свой собственный пароль - это предназначено для предотвращения использования кем-либо учетной записи, если терминал оставлен без присмотра.Это требование отменено для суперпользователя - эта учетная запись может делать с системой почти все без использования
sudo
, поэтому она была сочтена излишней. Также можно указать в файле конфигурации, что пользователям вообще не нужно вводить пароль - некоторые организации используют это, когда считают, что физической безопасности среды их рабочей станции достаточно для предотвращения злоупотреблений.источник
su
также регистрирует, но поскольку он только запускает новую оболочку, он просто регистрирует тот факт, что кто-то запускал ее.sudo
позволяет отозвать привилегии без необходимости повторной выдачи пароля root всем, кто в нем нуждается.sudo
позволяет ограничить, какие команды может выполнять пользователь, вы можете убедиться, что вы не предоставляете им доступ к командам, которые перезаписывают журнал.Ответ на ваш вопрос:
Когда вы запускаете команду с sudo , вы запускаете команду с повышенными привилегиями , то есть привилегиями суперпользователя . Вам нужно только ввести свой обычный пароль пользователя, потому что вы (пользователь) были добавлены в файл sudoers, который дает вам права root .
источник
sudo
не всегда дает повышенные привилегии, но работает с повышенными привилегиями после выполнения своей задачи (проверка аутентификации может привести к удалению привилегий). Ему нужны эти повышенные привилегии, чтобы сменить пользователя.sudo
делает использование повышенных привилегий (но это не является уникальным для SUDO, например , крепления делает также), но команда , которую вы называете то естьcommand
вsudo command
не может ( в зависимости от того, что происходит в/etc/sudoers
).Во-первых, отключение учетной записи обычно выполняется путем установки зашифрованного пароля на *, который не является зашифрованным значением какой-либо строки. Я не могу проверить прямо сейчас, но я верю, что Ubuntu делает это и для root. Технически, в Ubuntu нет пароля root.
Но sudo предшествует Ubuntu; это было разработано для систем, где конечно были пароли root. Так почему же он не требует пароля root? По сути, sudo разработан для предоставления разрешения на запуск определенных команд определенным пользователям, например, для предоставления root-прав разработчику, чтобы перезапустить веб-приложение, но не запускать произвольные серверы. С другой стороны, знание пароля root дает вам неограниченный доступ; Вы можете использовать login или su, чтобы открыть корневую оболочку и выполнить произвольные команды. Так как sudo должен работать для людей без этого уровня доступа, он не может требовать пароль root для запуска.
источник