Linux, sudo · 7 min read · Dec 25, 2025

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

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

доступ запрещен в оболочке

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

выполнить команду с sudo

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

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

Но прежде чем мы продолжим, стоит упомянуть, что все команды и инструкции, упомянутые в этой статье, были протестированы на Ubuntu с оболочкой Bash.

Что такое sudo?

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

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

Что такое sudo

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

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

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

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

пользователи sudo

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

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

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

выберите учетные записи sudo

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

[user]    ALL=(ALL:ALL) ALL

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

sudo visudo

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

visudo редактирует файл sudoers безопасным образом. visudo блокирует файл sudoers от одновременного редактирования, предоставляет базовые проверки на корректность и проверяет на ошибки разбора. Если файл sudoers в данный момент редактируется, вы получите сообщение о том, чтобы попробовать снова позже.

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

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

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

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

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

sudo visudo

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

Defaults env_reset

env_reset

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

Defaults env_reset,timestamp_timeout=[new-value]

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

значение тайм-аута sudo

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

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

Пароль sudo

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

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

Defaults        env_reset

на

Defaults        env_reset,pwfeedback

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

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

скрыть пароль sudo

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

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

Параметр -k

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

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

-k, --reset-timestamp  
При использовании без команды, аннулирует кэшированные учетные данные пользователя. Другими словами, в следующий раз, когда будет выполнена команда sudo, потребуется пароль. Этот параметр не требует пароля и был добавлен, чтобы позволить пользователю отозвать разрешения sudo из файла .logout.  
При использовании вместе с командой или параметром, который может требовать пароль, этот параметр заставит sudo игнорировать кэшированные учетные данные пользователя. В результате sudo запросит пароль (если это требуется политикой безопасности) и не обновит кэшированные учетные данные пользователя.

Параметр -s

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

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

-s, --shell  
Запускает оболочку, указанную переменной окружения SHELL, если она установлена, или оболочку, указанную в записи базы данных паролей вызывающего пользователя. Если команда указана, она передается оболочке для выполнения через параметр -c оболочки. Если команда не указана, выполняется интерактивная оболочка.

Таким образом, что делает этот параметр командной строки:

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

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

Параметр -i

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

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

Заключение

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

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.