Поиск по сайту:

Руководство для начинающих по пониманию sudo в Ubuntu


На этой странице

  1. Что такое судо?
  2. Может ли любой пользователь использовать sudo?
  3. Что такое сеанс sudo?
  4. Пароль sudo
  5. Некоторые важные параметры командной строки sudo
    1. Опция -k
    2. Опция -s
    3. Опция -i

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

    Так какое же решение этой проблемы? Просто используйте команду sudo.

    Пользователю, выполняющему команду, будет предложено ввести пароль для входа. После ввода правильного пароля операция будет выполнена успешно.

    Хотя sudo, без сомнения, является обязательной командой для всех и каждого, кто работает с командной строкой в Linux, есть несколько других связанных (и подробных) деталей, которые вам следует знать, чтобы использовать эту команду более ответственно и эффективно. И это именно то, что мы будем обсуждать здесь, в этой статье.

    But before we move ahead, it's worth mentioning that all the commands and instructions mentioned in this article have been tested on Ubuntu with the Bash shell.

    Что такое судо?

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

    Это достигается с помощью параметра командной строки -u, предоставляемого инструментом. Например, в примере, показанном ниже, я (himanshu) попытался переименовать файл в домашнем каталоге некоторых других пользователей (howtoforge), но получил ошибку отказа в доступе. А затем я попробовал ту же команду mv с sudo -u howtoforge, команда была успешной:

    Может ли любой пользователь использовать sudo?

    Нет. Чтобы пользователь мог использовать sudo, запись, соответствующая этому пользователю, должна быть в файле /etc/sudoers. Следующий абзац, взятый с веб-сайта Ubuntu, должен прояснить ситуацию:

    The /etc/sudoers file controls who can run what commands as what users on what machines and can also control special things such as whether you need a password for particular commands. The file is composed of aliases (basically variables) and user specifications (which control who can run what).

    Если вы используете Ubuntu, легко убедиться, что пользователь может запускать команду sudo: все, что вам нужно сделать, это сделать этот тип учетной записи пользователя администратором. Это можно сделать, перейдя в Системные настройки... -> Учетные записи пользователей.

    Разблокировка окна:

    Затем выберите пользователя, тип учетной записи которого вы хотите изменить, а затем измените тип на администратора.

    Однако, если вы не используете Ubuntu или ваш дистрибутив не поддерживает эту функцию, вы можете вручную отредактировать файл /etc/sudoers, чтобы внести изменения. Вам потребуется добавить в этот файл следующую строку:

    [user]    ALL=(ALL:ALL) ALL

    Излишне говорить, что [user] следует заменить именем пользователя учетной записи, которой вы предоставляете привилегию sudo. Здесь стоит упомянуть важную вещь: официально предлагаемый метод редактирования этого файла — с помощью команды visudo — все, что вам нужно сделать, это запустить следующую команду:

    sudo visudo

    Чтобы дать вам представление, почему именно так, вот выдержка из руководства visudo:

    visudo edits the sudoers file in a safe fashion. visudo locks the sudoers file against multiple simultaneous edits, provides basic sanity checks, and checks for parse errors. If the sudoers file is currently being edited you will receive a message to try again later.

    Для получения дополнительной информации о visudo, перейдите сюда.

    Что такое sudo-сессия?

    Если вы часто используете команду sudo, я уверен, что вы заметили, что после того, как вы успешно введете пароль один раз, вы можете запускать несколько команд sudo без запроса пароля. Но через некоторое время команда sudo снова запрашивает ваш пароль.

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

    Однако, если вы хотите, вы можете изменить это поведение. Для этого откройте файл /etc/sudoers с помощью следующей команды:

    sudo visudo

    И затем перейдите к строке, которая гласит:

    Defaults env_reset

    и добавьте следующую переменную (выделенную жирным шрифтом ниже) в конце строки

    Defaults env_reset,timestamp_timeout=[new-value]

    Поле [новое значение] должно быть заменено количеством минут, которое вы хотите, чтобы ваш сеанс sudo длился. Например, я использовал значение 40.

    Если вы хотите, чтобы пароль запрашивался каждый раз, когда вы используете команду sudo, то в этом случае вы можете присвоить этой переменной значение 0. А для тех из вас, кто хочет, чтобы их сеанс sudo никогда не истекал, вы можете присвоить значение -1.

    Обратите внимание, что использование timestamp_timeout со значением -1 настоятельно не рекомендуется.

    Судо-пароль

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

    Хорошо, что это возможно и довольно легко сделать. Все, что вам нужно сделать, это изменить следующую строку в файле /etc/sudoers:

    Defaults        env_reset

    к

    Defaults        env_reset,pwfeedback

    И сохраните файл.

    Теперь всякий раз, когда вы будете вводить пароль sudo, появится звездочка.

    Некоторые важные параметры командной строки sudo

    Помимо параметра командной строки -u (который мы уже обсуждали в начале этого руководства), есть несколько других важных параметров командной строки sudo, которые заслуживают упоминания. В этом разделе мы обсудим некоторые из них.

    Параметр -k

    Рассмотрим случай, когда вы только что запустили команду с поддержкой sudo после ввода пароля. Теперь, как вы уже знаете, сеанс sudo по умолчанию остается активным в течение 15 минут. Предположим, во время этого сеанса вы должны предоставить кому-то доступ к вашему терминалу, но вы не хотите, чтобы они могли использовать sudo. Что вы будете делать?

    К счастью, существует параметр командной строки -k, который позволяет пользователям отозвать разрешение sudo. Вот что справочная страница sudo говорит об этой опции:

    -k, --reset-timestamp

    When used without a command, invalidates the user's cached credentials. In other words, the next time sudo is run a password will be required. This option does not require a password and was added to allow a user to revoke sudo permissions from a .logout file.

    When used in conjunction with a command or an option that may require a password, this option will cause sudo to ignore the user's cached credentials. As a result, sudo will prompt for a password (if one is required by the security policy) and will not update the user's cached credentials.

    Опция -s

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

    В этом случае вы можете использовать параметр командной строки -s команды sudo. Вот как это объясняет справочная страница sudo:

    -s, --shell

    Run the shell specified by the SHELL environment variable if it is set or the shell specified by the invoking user's password database entry. If a command is specified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed.

    Итак, в основном, эта опция командной строки делает следующее:

    • Запускает новую оболочку. На какую оболочку ссылается переменная SHELL env. Если $SHELL пуст, используется оболочка, указанная в файле /etc/passwd.
    • Если вы также передаете имя команды вместе с параметром -s (например, sudo -s whoami), то фактически выполняется следующая команда: sudo /bin/bash -c кто.
    • Если вы не пытаетесь выполнить какую-либо другую команду (то есть вы просто пытаетесь запустить sudo -s), вы получаете интерактивную оболочку с привилегиями root.

    Здесь стоит помнить, что параметр командной строки -s дает вам оболочку с привилегиями root, но вы не получаете корневую среду — это ваш .bashrc, который получает источник. Это означает, что, например, в новой оболочке, которую запускает sudo -s, выполнение команды whoami по-прежнему будет возвращать ваше имя пользователя, а не root.

    Опция -i

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

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

    Заключение

    Я надеюсь, что к настоящему моменту вы, по крайней мере, получили общее представление о sudo и о том, как настроить его поведение по умолчанию. Попробуйте настройки /etc/sudoers, которые мы объяснили здесь, а также просмотрите обсуждение на форуме (ссылка в последнем абзаце), чтобы получить больше информации о команде sudo.