Команда Sudo в Linux

Обновлено: 21.11.2024

Sudo — единственная команда, которая управляет ими всеми. Это означает «суперпользователь делает!» Произносится как «судить тесто». Как системный администратор Linux или опытный пользователь, это одна из самых важных команд в вашем арсенале. Вы когда-нибудь пытались запустить команду в терминале только для того, чтобы получить «Отказано в доступе»? Что ж, это команда для вас! Но с большой силой приходит и большая ответственность! Это намного лучше, чем входить в систему как пользователь root или использовать команду su «переключить пользователя». Читайте дальше, чтобы узнать, что sudo может сделать для вас!

Что такое SUDO?

Так что же на самом деле делает sudo? Если вы поставите префикс «sudo» перед любой командой Linux, она запустит эту команду с повышенными привилегиями. Для выполнения определенных административных задач требуются повышенные привилегии. Когда-нибудь вы, возможно, захотите запустить сервер LAMP (Linux Apache MySQL PHP) и вам придется вручную редактировать файлы конфигурации. Вам также может потребоваться перезапустить или сбросить настройки веб-сервера Apache или других сервисных демонов. Вам даже нужны повышенные привилегии, чтобы выключить или перезагрузить компьютер. «Эй, кто выключил эту штуку?!» Если вы знакомы с Windows, она очень похожа на диалоговое окно «Контроль учетных записей пользователей Windows», которое появляется, когда вы пытаетесь сделать что-то важное, только не такое дружелюбное.

В Windows, если вы попытаетесь выполнить административную задачу, появится диалоговое окно с вопросом, хотите ли вы продолжить («Вы действительно уверены, что хотите запустить ту программу, на которую только что нажали?»). Затем задание выполняется. На Mac появляется диалоговое окно безопасности, и вам необходимо ввести свой пароль и нажать «ОК». В Linux это более драматическая история. Вещи могут вести себя довольно странно без надлежащих разрешений. Важный файл конфигурации, который вы редактировали, может быть сохранен неправильно. Установленная вами программа может просто отказаться запускаться. Этот удивительный исходный код, который вы скачали и который нужно скомпилировать, не будет. Возможно, вам даже посчастливится получить сообщение «Отказано в доступе» или другое понятное сообщение об ошибке. Все ваши худшие опасения сбылись, но все, что вам нужно было сделать, это спросить разрешения! Вот почему мы хотим не забыть заранее запросить права суперпользователя следующим образом:

Посмотрите, что произойдет на этом снимке экрана, если мы сначала не повысим наши разрешения с помощью sudo: сначала мы используем команду reboot, чтобы попытаться перезагрузить систему. Команда завершается со ссылкой: «должен быть суперпользователь». Затем мы пытаемся перезагрузить компьютер с помощью sudo. Sudo запрашивает ваш пароль пользователя. Обратите внимание, что он запрашивает ваш пароль, а не пароль root. Наконец мы видим широковещательное сообщение о том, что система будет перезагружена. Судо — это как сказать волшебное слово. С тем же успехом его можно было бы назвать опенсезам, абракадабра или даже биппитибоппитибекон.

Почему это лучше альтернативы?

Файл Sudoers

Этот файл является захудалой изнанкой sudo. Он контролирует, кто может использовать команду sudo для получения повышенных привилегий. Обычно он находится в /etc/sudoers. Самый лучший и безопасный способ редактирования этого файла — использовать команду visudo. Эта команда запустит редактор vi с повышенными привилегиями, чтобы вы могли отредактировать файл и сохранить его. Он также заблокирует файл sudoers, чтобы никто другой не мог его редактировать. После того, как вы закончите редактирование, он проанализирует файл на наличие простых ошибок. Это гораздо более безопасный способ редактирования файла sudo, чем просто использование любого старого текстового редактора. Этот файл содержит множество параметров. Вы можете указать, какие пользователи из каких групп могут выполнять какие команды. Мы просто предоставим себе доступ к sudo, добавив:

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

Некоторые параметры

Получить сейчас?

Sudo дает нам безопасные повышенные привилегии, когда мы хотим выполнять важные команды. Это может быть САМАЯ используемая и мощная команда среди пользователей Ubuntu, поскольку она стала предпочтительным методом в этом дистрибутиве. Теперь, когда у вас есть сила, убедитесь, что вы в безопасности, когда отдаете свои команды! Нет su-undo! Если вы готовы перейти на новый уровень обучения, вот руководство «Освоение командной строки Linux».

Повысьте уровень своей карьеры в сфере облачных технологий

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

Sudo означает SuperUser DO и используется для доступа к файлам и операциям с ограниченным доступом. По умолчанию Linux ограничивает доступ к определенным частям системы, предотвращая компрометацию конфиденциальных файлов.

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

  • Система под управлением Linux
  • Доступ к командной строке/окну терминала (Действия > Поиск > Терминал)
  • Учетная запись пользователя с правами sudo или root

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

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

Синтаксис

Чтобы начать использовать sudo , используйте следующий синтаксис:

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

Параметры

sudo можно использовать с дополнительными параметрами:

  • -h – помощь; отображает синтаксис и параметры команды
  • -V – версия; отображает текущую версию приложения sudo
  • -v – подтвердить; обновить ограничение по времени в sudo без запуска команды
  • -l – список; перечисляет привилегии пользователя или проверяет конкретную команду
  • -k – убить; отменить текущие привилегии sudo

Дополнительные параметры можно найти в параметре -h.

Примечание. Если вы останетесь в системе с правами администратора, безопасность будет нарушена. Раньше администраторы использовали su (замена пользователя), чтобы временно переключиться на учетную запись администратора. Однако для команды su требуется вторая учетная запись пользователя и пароль, что не всегда возможно.

Предоставление привилегий sudo

В большинстве современных дистрибутивов Linux пользователь должен входить в группу sudo, sudoers или wheel, чтобы использовать команду sudo. По умолчанию однопользовательская система предоставляет своему пользователю привилегии sudo. Система или сервер с несколькими учетными записями пользователей могут исключать некоторых пользователей из привилегий sudo.

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

В следующих разделах объясняется, как добавить пользователя в группу sudoers.

RedHat и CentOS

В Redhat/CentOS группа wheel управляет пользователями sudo. Добавьте пользователя в группу Wheel с помощью следующей команды:

Замените [имя пользователя] реальным именем пользователя. Возможно, вам потребуется войти в систему как администратор или использовать команду su.

Debian и Ubuntu

В Debian/Ubuntu группа sudo управляет пользователями sudo. Добавьте пользователя в группу sudo с помощью следующей команды:

Замените [имя пользователя] реальным именем пользователя. Возможно, вам потребуется войти в систему как администратор или использовать команду su.

Использование visudo и группы sudoers

В некоторых современных версиях Linux пользователи добавляются в файл sudoers для предоставления прав. Это делается с помощью команды visudo.

<р>1. Используйте команду visudo для редактирования файла конфигурации:

<р>2. Откроется /etc/sudoers для редактирования. Чтобы добавить пользователя и предоставить полные права sudo, добавьте следующую строку:

<р>3. Сохраните и закройте файл.

Вот разбивка предоставленных привилегий sudo:

Примечание. Чтобы предоставить привилегии sudo, проще просто добавить пользователя в группу sudo или wheel. Если вам нужно отредактировать файл конфигурации, делайте это только с помощью visudo. Приложение visudo предотвращает сбои, ошибки и неправильные настройки, которые могут нарушить работу вашей операционной системы.

Примеры использования sudo в Linux

Основное использование Sudo

<р>1. Откройте окно терминала и попробуйте выполнить следующую команду:

<р>2. Вы должны увидеть сообщение об ошибке. У вас нет необходимых разрешений для запуска команды.

<р>3. Попробуйте ту же команду с sudo :

<р>4. Введите пароль при появлении запроса. Система выполняет команду и обновляет репозитории.

Выполнить команду от имени другого пользователя

<р>1. Чтобы запустить команду от имени другого пользователя, введите в терминале следующую команду:

<р>2. Система должна отобразить ваше имя пользователя. Затем выполните следующую команду:

<р>3. Введите пароль для [иное_имя_пользователя] , и команда whoami запустится и отобразит другого пользователя.

Переключиться на пользователя root

Эта команда переключает вашу командную строку на оболочку BASH в качестве пользователя root:

Ваша командная строка должна измениться на:

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

Выполнение предыдущих команд с помощью sudo

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

Это также работает со старыми командами. Укажите исторический номер следующим образом:

В этом примере повторяется 6-я запись в истории с помощью команды sudo.

Чтобы узнать, как эффективно использовать команду history, ознакомьтесь с нашей статьей о команде sudo history с примерами.

Выполнение нескольких команд в одной строке

Объедините несколько команд, разделив их точкой с запятой:

Добавить строку текста в существующий файл

Добавление текстовой строки в файл часто используется для добавления имени репозитория программного обеспечения в исходный файл без открытия файла для редактирования. Используйте следующий синтаксис с командой echo, sudo и tee:

Примечание. Это добавит репозитории программного обеспечения Nginx в вашу систему.

Теперь вы должны понимать, что такое команда sudo и как ее использовать. Затем изучите разницу между командами sudo и su.

В Unix-подобных операционных системах команда sudo ("superuser do") позволяет пользователю с соответствующими разрешениями выполнять команду от имени другого пользователя. По умолчанию sudo выполняет команды от имени пользователя root.

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

На этой странице описывается версия sudo для Linux.

Описание

sudo позволяет разрешенному пользователю выполнять команду от имени другого пользователя в соответствии со спецификациями в файле /etc/sudoers. Реальный и эффективный uid и gid выдавшего пользователя затем устанавливаются в соответствии с учетной записью целевого пользователя, как указано в файле passwd.

По умолчанию sudo требует, чтобы пользователи аутентифицировались с помощью пароля. По умолчанию это пароль пользователя, а не сам пароль root.

После аутентификации пользователя записывается метка времени, и пользователь может использовать sudo без пароля в течение короткого времени (5 минут, если в sudoers не настроено иначе). Эта метка времени может быть обновлена, если пользователь выполнит sudo с флагом -v.

Если пользователь, не указанный в sudoers, пытается выполнить команду с помощью sudo, это считается неудачной попыткой нарушить безопасность системы, и сообщение отправляется в соответствующие органы, как указано во время настройки или в файле sudoers. Полномочием по умолчанию, которое будет уведомлено о неудачных попытках sudo, является root. Обратите внимание, что почта не отправляется, если неавторизованный пользователь пытается запустить sudo с флагами -l или -v; это позволяет пользователям самостоятельно определять, разрешено ли им использовать sudo.

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

Чтобы отредактировать файл sudoers, используйте команду visudo.

Синтаксис

Параметры

-V Опция -V (версия) заставляет sudo печатать номер версии и завершать работу. Если вызывающий пользователь уже является пользователем root, параметр -V распечатывает список значений по умолчанию, с которыми был скомпилирован sudo, и адреса локальной сети машины.
-l Опция -l (список) выводит команды, разрешенные (и запрещенные) пользователю на текущем хосте.
-L Опция -L (перечислить значения по умолчанию) перечисляет параметры, установленные в строке «Значения по умолчанию», с кратким описанием каждого из них. Эта опция полезна в сочетании с grep.
-h Опция -h (справка) заставляет sudo печатать сообщение об использовании и завершать работу.< /td>
-v Если задан параметр -v (проверить), sudo обновляет временную метку пользователя, запрашивая пароль пользователя, если это необходимо. Это продлевает тайм-аут sudo еще на 5 минут (или любой другой тайм-аут, установленный в sudoers), но не запускает команду.
-k Параметр -k (kill) для sudo аннулирует отметку времени пользователя, устанавливая для нее время в эпоху. При следующем запуске sudo потребуется пароль. Этот параметр не требует пароля и был добавлен, чтобы позволить пользователю отозвать разрешения sudo из файла .logout.
-K The -K (уверенное убийство) для sudo полностью удаляет временную метку пользователя. Точно так же для этой опции не требуется пароль.
-b Опция -b (фоновая) указывает sudo запустить данную команду в фоновом режиме. . Обратите внимание, что если вы используете параметр -b, вы не можете использовать управление заданиями оболочки для управления процессом.
-p Параметр -p (приглашение) позволяет переопределить запрос пароля по умолчанию и использовать собственный. Поддерживаются следующие проценты ('%') побегов:

%u расширяется до логина вызывающего пользователя;

%U заменяется на имя входа пользователя, от имени которого будет выполняться команда (по умолчанию root);

%h расширяется до локального имени хоста без имени домена;

%H заменяется на локальное имя хоста, включая имя домена (только если имя хоста машины полностью определено или установлен параметр sudoers "fqdn");

Возвращаемые значения

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

В противном случае sudo завершает работу со значением выхода 1, если есть проблема с конфигурацией/разрешениями или если sudo не может выполнить данную команду. В последнем случае строка ошибки выводится в stderr. Если sudo не может указать одну или несколько записей в PATH пользователя, на stderr будет напечатана ошибка. (Если каталог не существует или это не каталог, запись игнорируется и сообщение об ошибке не выводится.) В нормальных условиях этого не должно происходить. Наиболее распространенная причина, по которой stat возвращает «отказано в доступе», заключается в том, что вы используете автомонтирование, а один из каталогов в вашем PATH находится на машине, которая в данный момент недоступна.

Примечания по безопасности

sudo пытается обеспечить безопасность при выполнении команд. Переменные, управляющие динамической загрузкой и привязкой, могут нарушить работу программы, которую запускает sudo. Чтобы бороться с этим, некоторые системные переменные среды удаляются из среды, которая передается выполняемым командам. Другие переменные, которые sudo удаляет из среды, включают:

  • ИФС
  • ОКРУГ
  • BASH_ENV
  • KRB_CONF
  • KRBCONFDIR
  • KRBTKFILE
  • KRB5_CONFIG
  • МЕСТНЫЙ ДОМЕН
  • RES_OPTIONS
  • ХОСТАЛИАЗЫ
  • NLSPATH
  • PATH_LOCALE
  • ТЕРМИНФО
  • TERMINFO_DIRS
  • ТЕРМПАТИ

так как они тоже могут представлять угрозу. Если переменная TERMCAP установлена ​​и является путем, она также игнорируется. Кроме того, если некоторые переменные содержат символы / или %, они игнорируются.

Если sudo был скомпилирован с поддержкой SecurID, переменные VAR_ACE, USR_ACE и DLC_ACE также очищаются. Список переменных среды, которые очищает sudo, содержится в выводе sudo -V при запуске от имени пользователя root.

Чтобы предотвратить спуфинг команд, sudo проверяет "." и "" (оба обозначают текущий каталог) последними при поиске команды в PATH пользователя (если одна или обе находятся в PATH). Обратите внимание, однако, что фактическая переменная среды PATH не изменяется и передается в неизменном виде программе, которую выполняет sudo.

Из соображений безопасности, если ваша ОС поддерживает общие библиотеки и не отключает определяемые пользователем пути поиска библиотек для программ с setuid (большинство так и делают), либо используйте параметр компоновщика, отключающий такое поведение, либо статически связывайте sudo.

sudo проверяет владельца своего каталога временных меток (по умолчанию /var/run/sudo) и игнорирует содержимое каталога, если он не принадлежит root и доступен только для записи root. В системах, которые позволяют пользователям без полномочий root передавать файлы через chown, если каталог временных меток находится в каталоге, доступном для записи любым пользователем (например, /tmp), пользователь может создать каталог временных меток до запуска sudo.Однако, поскольку sudo проверяет владельца и режим каталога и его содержимого, единственный ущерб, который можно нанести, — это «скрыть» файлы, поместив их в каталог с меткой времени. Маловероятно, что это произойдет, поскольку, как только каталог временной метки принадлежит пользователю root и недоступен для любого другого пользователя, пользователь, помещающий туда файлы, не сможет получить их обратно. Чтобы обойти эту проблему, вы можете использовать каталог, который не доступен для записи для всех, для меток времени (например, /var/adm/sudo) или создать /var/run/sudo с соответствующим владельцем (root) и разрешениями (0700) в файлах запуска системы.

sudo не будет учитывать метки времени, установленные далеко в будущем. Временные метки с датой, превышающей текущее_время + 2 * TIMEOUT, игнорируются, и sudo регистрирует и жалуется. Это делается для того, чтобы пользователь не создавал свою собственную временную метку с фиктивной датой в системах, которые позволяют пользователям раздавать файлы.

Обратите внимание, что sudo записывает в журнал только те команды, которые он явно запускает. Если пользователь запускает команду, такую ​​​​как «sudo su» или «sudo sh», последующие команды, запускаемые из этой оболочки, не регистрируются, и контроль доступа sudo не влияет на них. То же самое верно для команд, предлагающих экранирование оболочки (включая большинство редакторов). Из-за этого необходимо соблюдать осторожность при предоставлении пользователям доступа к командам через sudo, чтобы убедиться, что команда непреднамеренно не предоставит пользователю действующую корневую оболочку.

Переменные среды

sudo использует следующие переменные среды:

< tr >

Примеры

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

Перечислите содержимое каталога /home/otheruser/Documents по желанию пользователя.

Создайте новый каталог с помощью команды mkdir, как надеется пользователь, с текущей группой надежды, установленной для otherusers. Надежда должна быть членом группы otherusers.

Продлить/сбросить тайм-аут автоматической аутентификации sudo, чтобы вы могли продолжать выполнять команды sudo без ввода пароля.

"Убить" аутентификацию sudo для текущего пользователя. Для следующей команды sudo требуется пароль.

Связанные команды

su — стать суперпользователем или другим пользователем.
visudo — отредактировать файл sudoers, определяющий, кто может запускать sudo.

Команды Unix sudo и su разрешают доступ к другим командам от имени другого пользователя.

Команда sudo

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

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

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

Команда sudo также упрощает применение принципа наименьших привилегий (PoLP), который представляет собой концепцию компьютерной безопасности, помогающую контролировать доступ к системе, а также возможные уязвимости и компрометацию системы. Дополнительные сведения о команде sudo см. на странице A. P. Lawrence, посвященной использованию sudo.

Команда su

Команда su позволяет вам стать другим пользователем. Чтобы использовать команду su для каждой команды, введите:

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

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

Пользовательская функция не является обязательной; если вы не укажете пользователя, команда su по умолчанию использует учетную запись root, которая в Unix является учетной записью системного администратора. В любом случае вам будет предложено ввести пароль, связанный с учетной записью, для которой вы пытаетесь выполнить команду.Если вы укажете пользователя, вы будете входить в систему под этой учетной записью, пока не выйдете из нее. Для этого нажмите Ctrl-d или введите exit в командной строке.

Использование su создает угрозу безопасности, потенциально опасно и требует дополнительного административного обслуживания. Не рекомендуется, чтобы большое количество людей знали и использовали пароль root, потому что, войдя в систему как root, вы можете делать с системой все, что угодно. Это может дать слишком много мощности для неопытных пользователей, которые могут непреднамеренно повредить систему. Кроме того, каждый раз, когда пользователь больше не должен использовать учетную запись root (например, сотрудник уходит), системный администратор должен будет изменить пароль root.

В Университете Индианы для личной или ведомственной поддержки систем Linux или Unix см. раздел Получение справки по Linux или Unix в IU.

Читайте также:

PATH Установите нормальное значение, если установлен SECURE_PATH
SHELL Используется для определения оболочки для запуска с параметром -s
ПОЛЬЗОВАТЕЛЬ Установите целевого пользователя (root, если не указан - указана опция u)
HOME В режиме -s или -H (или если sudo был настроен с параметром --enable-shell-sets- home), установите домашний каталог целевого пользователя.
SUDO_PROMPT Используется как запрос пароля по умолчанию
SUDO_COMMAND Установить команду, запускаемую sudo
SUDO_USER Установить логин пользователя, который вызвало sudo
SUDO_UID Установить uid пользователя, вызвавшего sudo
SUDO_GID< /td> Установить GID пользователя, вызвавшего sudo
SUDO_PS1 Если установлено, для PS1 будет установлено его значение