Рубріки: Теория

Команда sudo в Linux — краткое пособие для новичков

Андрей Галадей

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

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

Источник: Анатолий Чилик

1. Что такое sudo

sudo — это важная для понимания утилита, она позволяет временно поднимать привилегии и выполнять задачи администрирования системы. Суть в том, что в каждом дистрибутиве Linux есть пользователь root, имеющий максимальные права суперпользователь, администратор.

Однако во имя безопасности его часто отключают, поскольку он действительно может делать все что угодно в рамках системы и в ряде случаев это может повлечь катастрофические последствия. А Linux, как известно, не спрашивает, хотите ли вы точно-точно-точно удалить самый важный файл — система просто молча удаляет его, после чего начинается веселый квест с восстановлением.

Потому, как сказано выше, учетная запись root по дефолту отключена, чтобы неопытные пользователи не смогли нарушить работу системы. А для некоторых административных задач, где требуются повышенные привилегии, используется временное решение — sudo.

Эту утилиту можно сравнить с UAC в Windows — тем самым контролем учетных записей пользователей. Только в Windows система сама сообщает, когда та или иная программа пытается внести изменения в систему, а в Linux команду надо вводить самому.

Обратите внимание на курсы разработчиков от наших партнеров школы Robot Dreams и Mate Academy. Это идеальное начало вашего пути в IT.

2. Что использовать sudo или su?

Многие удивляются, когда узнают, что sudo — не единственная утилита, которая позволяет выполнять программы с повышенными привилегиями. На самом деле, есть две команды, позволяющие временно получать привилегии суперпользователя в системе. Это не только sudo, но еще и su. Однако между ними есть разница, которую нужно понимать.

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

А вот команда su требует пароль уже целевого пользователя чаще всего это пользователь root. Фактически, эта команда включает режим суперпользователя и позволяет выполнять все действия с повышенными привилегиями, так что можно ненамеренно «уронить» систему. Важно, что здесь нужно принудительно выходить из su — набрать exit, logout или нажать комбинацию горячих клавиш Ctrl-D.

Само собой, что безопаснее использовать именно sudo, ведь эта команда выполняет только конкретные задачи с повышенными привилегиями, а не все. Также в этом случае вводится пароль текущего пользователя, а не root. В общем, правило «Не работай под root’ом» остается справедливым и здесь.

К слову, в Debian-подобных дистрибутивах есть хитрость — если вы хотите ввести несколько команд, но не вводить sudo перед каждой, то можно ввести sudo su. Просто не забудьте потом выйти с помощью exit, logout или Ctrl-D.

Коротко резюмируем теорию, прежде чем двинуться дальше к практике:

  1. Если вам нужно разовое выполнение команды — используйте sudo.
  2. Если нужно несколько команд — sudo su.
  3. Если же вы гуру Linux, можете рискнуть использовать только su. И не забудьте потом выйти!
  4. Сразу залогиниться под root это уже совсем уровень джедая. Не рекомендуется для обычных задач, особенно в продакшен-системах.

3. Синтаксис sudo

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

$ sudo опции программа параметры

Простой пример:

$ sudo whoami

После нажатия Enter система выведет, от имени какого пользователя будет выполнена программа или команда. Конкретно в этом дефолтном случае — от имени root. Подобным образом можно выполнить совершенно любую команду, запустить любую программу консольную или графическую и так далее.

Источник: losst.ru

Как видите, ничего сложного.

4. Опции sudo

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

  • -A или –-askpass — sudo по умолчанию запрашивает ввод пароля пользователя в терминале. Если задана эта опция, утилита будет использовать графическую утилиту для запроса пароля. К слову, в терминале не показывается слово Password и там пароль вводится так, что на экране ничего нет.
  • -b или --background — опция позволит запустить выбранную команду в фоновом режиме;
  • -C или --close-from — опция закроет для конкретной программы все файловые дескрипторы за исключением стандартного ввода/вывода.
  • -E или --preserve-env — опция передает переменные окружения текущего пользователя непосредственно выполняемой программе.
  • Помимо этого, она принимает на вход список переменных, которые нужно разрешить для программы.
  • -e или --edit — опция открывает файл на редактирование вместо запуска той или иной команды. Система копирует файл во временный каталог, проводит необходимые коррекции, после чего записывает обратно с теми самыми правами. При этом для редактирования применяется редактор, установленный по умолчанию в системе. Чаще всего это nano, однако это различается в разных системах.
  • -g — опция запускает команду с указанной группой вместо группы пользователя, от имени которого и запускается программа.
  • -h — опция позволяет выполнить команду от имени другого хоста.
  • -H или --set-home — опция устанавливает домашний каталог вместо установленного по умолчанию.
  • -i или --login — опция дает возможность авторизации в консоли от имени другого пользователя. При этом система выбирает его домашний каталог, а также загружает все его переменные окружения.
  • -k — эта опция отключает временное сохранение пароля в sudo. Суть в том, что по умолчанию, sudo сохраняет пароль, что позволяет через некоторое время после ввода команды выполнить снова ее или уже другую команду без ввода пароля. Фактически, это опция для параноиков, которые боятся, чтобы кто-то скрытно не ввел команду, потому и отключают эту возможность.
  • -l или --list — эта опция выводит перечень доступных команд для удаленных пользователей.
  • -n или --non-interactive — это так называемый «не интерактивный режим». Если в нем будет необходимо ввести пароль, то программа сообщит об ошибке.
  • -p или --prompt — опция позволит использовать собственное приглашение для ввода пароля.
  • -r или --role — довольно специфическая опция, позволяющая выполнить программу с контекстом SELinux, которому назначена указанная роль.
    -S — узкоспециализированная опция, которая позволяет использовать стандартный поток ошибок для запроса пароля.
  • -s или --shell — опция запускает указанный командный интерпретатор.
  • -U или --User — опция дает возможность просмотра привилегий для пользователя и запуска программ от имени этого пользователя. Можно использовать в паре с -l.
  • -T или --timeout — опция устанавливает время выполнения команды. Если заданный диапазон истечет до окончания выполнения, то процесс будет автоматически прерван.
  • -u — опция указывает, от имени какого пользователя необходимо запустить программу или команду.
  • -V — показывает версию утилиты.
  • -- — эта опция говорит системе о том, что опции, идущие следом, обрабатывать не нужно.

5. Примеры использования команды sudo

В этом разделе мы приведем несколько примеров использования sudo в различных типовых сценариях. Мы рассмотрим запуск программ, установку и удаление самые простые варианты, работу с переменными среды и так далее.

При дефолтном выполнении она выведет — root. Эта команда выводит имя пользователя, которое ассоциировано с текущим эффективным идентификатором пользователя. Иначе говоря, под каким пользователем идет выполнение команды в данном случае — под root’ом.

Также можно выполнить команду не от имени root, а от имени другого пользователя. Это делаем так:

$ sudo -u %user_name% whoami

Вместо %user_name% подставляем имя подходящего нам пользователя.
Теперь более практическая команда:

$ sudo ls /root

Она позволяет просмотреть все файлы в каталоге /root в виде списка.

6. Запуск программы

Любую программу можно запустить тем же способом, что и отдельную команду. К примеру, для запуска Firefox используем такую команду:

$ sudo firefox

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

Также с помощью sudo выполняется установка программ:

$ sudo apt install firefox

Или удаление:

$ sudo apt remove firefox

В целом, утилита позволяет реально выполнять любые действия с системой. Нужно лишь помнить, что в Linux нет кучи предупреждений, как в Windows, так что нужно быть осторожными. Здесь за все действия отвечает только пользователь.

7. Переменные окружения

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

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

Источник: losst.ru

Если нужно передавать переменную окружения, то надо использовать ключ -E. Это выглядит так:

$sudo -E env

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

8. Командный интерпретатор

Это уже специфическая вещь, которая нужна не всем. Если в системе установлен не только интерпретатор bash, но также, например, zsh, то с помощью sudo можно авторизоваться от имени другого юзера как это сделать — будет ниже и указать желаемую оболочку для работы. Это реализовано с помощью опции -s:

$ sudo -s /bin/sh

9. Редактирование файлов

Редактирование файлов через терминал возможно разными способами. Для этого применяются текстовые редакторы, которые работают в терминале. Выглядит это примерно так:

$ sudo gedit /etc/group

Или так:

$ sudo nano /etc/group

Или даже так:

$ sudo vim /etc/group

однако система позволяет использовать опцию -e или же команду sudoedit для тех же задач. Важно отметить, что в этом случае файл открывается редактором, который установлен по умолчанию в системе. Если точнее, его берут из переменной окружения EDITOR.

Для редактирования делаем так:

$ sudo -e /etc/group

Или так:

$ sudoedit /etc/group

10. Запуск в фоне

Иногда есть необходимость запустить программу в фоновом режиме. Это тоже под силу нашей утилите. К примеру, если мы хотим это сделать для OpenVPN, то вбиваем команду вида:

sudo -b openvpn -с /etc/openvpn/client.conf

Здесь опция -b отвечает за выполнение в фоновом режиме. Как видите, ничего сложного.

11. Просмотр полномочий

Еще один сценарий использования утилиты. В нем можно узнать, какие настройки разрешены для sudo, а какие — запрещены.

Если вы забыли, какие настройки разрешены для sudo, а какие нет, это можно узнать двумя путями. Первый — открыть конфигурационный файл и посмотреть. Второй — использовать саму утилиту. Для этого надо выполнить команду с опцией -l, после чего утилита выведет список разрешенных команд или ALL, если разрешено все.

Выглядит это примерно так:

sudo -l

И вывод результата в терминале:

Источник: losst.ru

Заключение

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

В качестве закрепления вот качественное видео по теме:

 

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023