Почему sudo не управляет, нуждаются в пароле root?

Запуск grub-mkconfig > /boot/grub/grub.cfg повторно создавать записи загрузки, которые будут обычно иметь Вашу запись Ubuntu, если это не будет на VG.

Если это не работает, то загружается в Arch, chroot в корневую папку Ubuntu, и делает grub-setup /dev/XX (который является Вашим HDD, например, sda или hda). Это восстановит загрузчик Ubuntu grub2.

48
18.08.2014, 21:11
5 ответов

Во-первых, отключение учетной записи обычно осуществляется путем установки зашифрованного пароля в *, который не является зашифрованным значением любой строки. Сейчас я не могу проверить, но думаю, что это то, что Ubuntu делает и для root. Так что технически, нет никакого пароля root на Ubuntu.

Но sudo предшествует Ubuntu; он был разработан для систем, где определенно были пароли root. Так почему же не требуется пароль root? По сути, sudo предназначена для того, чтобы дать разрешение на выполнение определенных команд определенным пользователям --- например, разрешить root-доступ разработчику для перезапуска веб-приложения, но не запускать произвольные серверы. С другой стороны, знание пароля root дает вам неограниченный доступ; вы можете использовать login или su для открытия оболочки root и выполнения произвольных команд. Так как sudo должна работать для людей без такого уровня доступа, она не может требовать пароль root для запуска.

1
27.01.2020, 19:34
  • Вся суть sudo заключается в том, чтобы предоставить вам чьи-либо привилегии (обычно root) без запроса пароля этой другой учетной записи (в отличие от su ).

  • sudo запрашивает здесь ваш пароль, чтобы убедиться, что прохожий не воспользуется вашим разблокированным терминалом ненадлежащим образом.

  • Ubuntu и многие другие операционные системы Linux и Unix предоставляют первоначальной учетной записи, созданной во время установки, право запускать любые команды от имени root .

  • Хотя root по-прежнему является учетной записью в Linux, прямой вход в систему root отключен по умолчанию для большей безопасности и отслеживания.

15
27.01.2020, 19:34

Ответ на ваш вопрос:

Когда вы запускаете команду с sudo , вы запускаете команду с повышенными привилегиями , то есть корневые привилегии . Вам нужно только ввести свой обычный пароль пользователя, потому что вы (пользователь) добавлены в файл sudoers, который дает вам привилегии root .

3
27.01.2020, 19:34

В деталях это работает следующим образом:

  1. / usr / bin / sudo исполняемый файл имеет установленный бит setuid , поэтому даже при запуске другим пользователем он запускается с идентификатором владельца файла. идентификатор пользователя (в данном случае root).

  2. sudo проверяет в файле / etc / sudoers , какие у вас права и разрешено ли вам запускать команду, которую вы вызываете. Проще говоря, / etc / sudoers - это файл, который определяет, какие пользователи могут запускать какие команды, используя механизм sudo .

    Вот как этот файл выглядит в моем Ubuntu:

     # Спецификация привилегий пользователя
    root ВСЕ = (ВСЕ: ВСЕ) ВСЕ
    
     # Члены группы администраторов могут получить привилегии root
     % admin ALL = (ВСЕ) ВСЕ
    
     # Разрешить членам группы sudo выполнять любую команду
     % sudo ALL = (ВСЕ: ВСЕ) ВСЕ
     

    Третья строка - это то, что, по-видимому, вас интересует. Он позволяет любому участнику группы "sudo" выполнять любую команду от имени любого пользователя.

    Когда Ubuntu настраивает первую учетную запись во время установки, она добавляет эту учетную запись в группу «sudo». Вы можете проверить, к каким группам и каким пользователям принадлежат пользователи, с помощью команды group .

  3. sudo запрашивает пароль. Что касается того факта, что ему нужен пароль пользователя, а не пароль root, это отрывок из руководства sudoers :

    Аутентификация и ведение журнала

    Политика безопасности sudoers требует, чтобы большинство пользователей аутентифицируют себя перед тем, как использовать sudo. А пароль не требуется, если вызывающий пользователь root, если цель пользователь совпадает с вызывающим пользователем, или если политика отключена аутентификация для пользователя или команды. В отличие от su (1), когда sudoers требует аутентификации, он проверяет учетные данные вызывающего пользователя, не учетные данные целевого пользователя (или пользователя root). Это можно изменить с помощью флаги rootpw, targetpw и runaspw, описанные ниже.

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

    % sudo ALL = (ALL: ALL) NOPASSWD: ALL
     
  4. После аутентификации sudo порождает дочерний процесс, который запускает вызванную команду. Потомок наследует идентификатор пользователя root от своего родителя - процесса sudo .


Итак, отвечая точно на ваши вопросы:

Я думал, что переключаюсь на пользователя root для выполнения команды.

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

Есть ли пользователь root?

Да, есть учетная запись пользователя root, отдельная от вашей учетной записи, созданной во время установки системы. Однако по умолчанию в Ubuntu вам не разрешено входить в интерактивный терминал как пользователь root.

Я рут?

Нет, ты не рут. Вы имеете право запускать отдельные команды только от имени пользователя root , используя описанный выше механизм sudo .

Так почему мне разрешено запускать команды root с паролем моего пользователя?

Вы должны вводить пароль только из-за механизма внутренней безопасности sudo . Его легко отключить. Вы получаете полномочия root благодаря биту setuid / usr / bin / sudo , а не из-за вводимых вами паролей.

65
27.01.2020, 19:34

Петр очень хорошо объяснил, как работает sudo . Однако он не особо мотивировал , почему это работает именно так, поэтому я постараюсь добавить это здесь.

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

В какой-то момент было добавлено немного больше контроля доступа: чтобы использовать su , вы должны были быть членом группы wheel . Но поскольку вы по-прежнему могли выполнять любую команду, все же имело смысл потребовать от вас знать их пароль.

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

Итак, sudo был создан. Вместо того, чтобы позволять пользователям выполнять любую команду, у него есть тщательно продуманный файл конфигурации, кратко затронутый в ответе Петра, который точно определяет, кто может его использовать, на каких пользователей они могут переключаться и какие команды им разрешено запускать. Благодаря этому детальному контролю над тем, кто и кому может делать, нам больше не нужно сообщать пользователям пароль целевой учетной записи; если бы мы это сделали, они могли бы легко обойти все элементы управления в файле конфигурации, войдя в систему как этот пользователь. Вместо этого мы обычно просто требуем, чтобы они подтвердили, что именно они вошли в систему, путем ввода собственного пароля - это сделано для того, чтобы кто-то не воспользовался преимуществами учетной записи, если терминал остается без присмотра.

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

5
27.01.2020, 19:34

Теги

Похожие вопросы