Linux Commands · 7 min read · Dec 16, 2025
Руководство для начинающих по пониманию sudo в Ubuntu

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

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

Пользователь, который выполняет команду, будет запрошен ввести свой пароль. После ввода правильного пароля операция будет выполнена успешно.
Хотя sudo, безусловно, является обязательной командой для всех, кто работает в командной строке Linux, есть несколько других связанных (и более глубоких) деталей, которые вам следует знать, чтобы использовать команду более ответственно и эффективно. И именно это мы будем обсуждать здесь в этой статье.
Но прежде чем мы продолжим, стоит упомянуть, что все команды и инструкции, упомянутые в этой статье, были протестированы на Ubuntu с оболочкой Bash.Что такое sudo?
Команда sudo, как большинство из вас уже может знать, используется для выполнения команды с повышенными привилегиями (обычно от имени root). Пример этого мы уже обсудили в разделе введения выше. Однако, если вы хотите, вы можете использовать sudo для выполнения команды от имени другого (не root) пользователя.
Это достигается с помощью параметра командной строки -u, который предоставляет инструмент. Например, в примере, показанном ниже, я (химаншу) пытался переименовать файл в домашнем каталоге другого пользователя (howtoforge), но получил ошибку ‘доступ запрещен’. А затем я попробовал ту же команду ‘mv’ с ‘sudo -u howtoforge’, команда была успешной:

Может ли любой пользователь использовать sudo?
Нет. Чтобы пользователь мог использовать sudo, запись, соответствующая этому пользователю, должна быть в файле /etc/sudoers. Следующий абзац - взятый с сайта Ubuntu - должен прояснить это:
Файл /etc/sudoers контролирует, кто может выполнять какие команды от имени каких пользователей на каких машинах и также может контролировать специальные вещи, такие как необходимость ввода пароля для определенных команд. Файл состоит из псевдонимов (по сути, переменных) и спецификаций пользователей (которые контролируют, кто может выполнять что).Если вы используете Ubuntu, легко убедиться, что пользователь может выполнять команду 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
и добавьте следующую переменную (выделенную жирным ниже) в конце строки
Defaults env_reset,timestamp_timeout=[new-value]Поле [new-value] должно быть заменено на количество минут, на которое вы хотите, чтобы ваша сессия sudo длилась. Например, я использовал значение 40.

В случае, если вы хотите, чтобы вас запрашивали пароль каждый раз, когда вы используете команду sudo, в этом случае вы можете присвоить значение ‘0’ этой переменной. А для тех из вас, кто хочет, чтобы их сессия sudo никогда не истекала, вы можете присвоить значение ‘-1’.
Обратите внимание, что использование timestamp_timeout со значением ‘-1’ настоятельно не рекомендуется.
Пароль sudo
Как вы могли заметить, всякий раз, когда sudo запрашивает у вас пароль и вы начинаете его вводить, ничего не отображается - даже звездочки, что обычно является нормой. Хотя это не является большой проблемой в общем, некоторые пользователи могут захотеть, чтобы звездочки отображались по какой-либо причине.
Хорошая новость в том, что это возможно и довольно легко сделать. Все, что вам нужно сделать, это изменить следующую строку в файле /etc/sudoers:
Defaults env_resetна
Defaults env_reset,pwfeedbackИ сохраните файл.
Теперь, всякий раз, когда вы будете вводить пароль 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.
Get new posts in your inbox
No spam. Unsubscribe anytime.