Команда Sudo su в Linux

Обновлено: 22.11.2024

В 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.

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

В этом руководстве вы узнаете все о разнице между su и sudo .

sudo против su

И su, и sudo повышают привилегии, назначенные текущему пользователю.

Основное различие между ними заключается в том, что для su требуется пароль целевой учетной записи, а для sudo — пароль текущего пользователя. Поэтому гораздо безопаснее использовать sudo, поскольку он не включает обмен конфиденциальной информацией.

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

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

Команда su означает заменить пользователя и в основном используется для переключения с одного пользователя на другого. Он делает это, запуская оболочку входа в текущий каталог и среду ( su ) или полностью изменяя настройки целевого пользователя ( su - ).

Основной синтаксис:

Если команда используется без аргумента, она переключается на учетную запись суперпользователя (root).

Как работает команда su?

Чтобы вызвать оболочку другого пользователя в рабочем каталоге/среде пользователя, используйте команду su (без дефиса).

Например, чтобы работать от имени пользователя phoenixnap, выполните:

Затем введите пароль для учетной записи phoenixnap и нажмите Enter.

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

Как работает команда su – [дефис]?

Чтобы перейти к другому пользователю и переключиться на эту целевую пользовательскую среду, используйте команду su -.

Поэтому, чтобы переключиться на пользователя phoenixnap и перейти к его оболочке входа, введите команду:

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

Примечание. Дополнительные атрибуты, позволяющие перейти к другому пользователю и его интерфейсу входа, включают: su - l (или --login ) [имя пользователя] .

Дополнительные сведения о команде su см. в нашей статье «Как использовать команду su на примерах».

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

sudo используется в качестве префикса для команд Linux, что позволяет вошедшему в систему пользователю выполнять команды, требующие привилегий root. В отличие от su команда sudo в Linux требует ввода пароля для пользователя, запускающего команду.

Для выполнения всех административных и исполняемых задач требуются максимальные права доступа (имеющиеся у root). В таких случаях рекомендуется использовать sudo .

Основной синтаксис:

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

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

Добавление пользователя в группу Sudoers

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

Чтобы добавить пользователя в группу sudoers, выполните следующую команду (от имени root или учетной записи, у которой уже есть права sudo):

Например, чтобы добавить учетную запись phoenixnap, введите:

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

Вывод должен отображать учетную запись, добавленную на предыдущем шаге:

Как sudo и su работают в разных дистрибутивах Linux

su — более старая, но более полнофункциональная команда, включенная во все дистрибутивы Linux. Это традиционный способ переключения на учетную запись root.

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

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

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

Включение корневой учетной записи

Если вы используете дистрибутив на основе Ubuntu и пытаетесь переключиться на пользователя root, вывод сообщит вам об ошибке аутентификации.

Чтобы активировать пользователя root, выполните команду passwd:

Далее в выходных данных предлагается установить пароль для пользователя root. Введите и повторите безопасный пароль, затем нажмите Enter. Система должна уведомить вас об успешном обновлении пароля.

Убедитесь, что пользователь root активен, переключив на него его оболочку входа с помощью su - .

Примечание. Рекомендуется регулярно менять пароли. Это руководство поможет вам изменить или сбросить корневой пароль Linux в Ubuntu или CentOS.

Дополнительные функции

Хотя sudo в основном используется для выполнения команд с привилегиями root, его также можно использовать для смены пользователя root. Переключитесь на пользователя root и получите корневую среду с помощью:

Введите пароль текущего пользователя. Теперь вы должны быть в корневой оболочке.

Точно так же su может функционировать как sudo и запускать одну команду от имени пользователя root:

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

Крис Хоффман

Крис Хоффман
Главный редактор

Крис Хоффман – главный редактор How-To Geek. Он писал о технологиях более десяти лет и два года был обозревателем PCWorld. Крис писал для The New York Times, давал интервью в качестве эксперта по технологиям на телевизионных станциях, таких как NBC 6 в Майами, и освещал свою работу в таких новостных агентствах, как BBC. С 2011 года Крис написал более 2000 статей, которые были прочитаны почти миллиард раз — и это только здесь, в How-To Geek. Подробнее.

Если вы пользователь Linux, вы, вероятно, видели упоминания как sudo, так и su. Статьи здесь, на How-To Geek, и в других источниках инструктируют пользователей Ubuntu использовать sudo, а пользователей других дистрибутивов Linux — использовать su, но в чем разница?

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

Привилегированный пользователь

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

Чтобы сделать что-то, для чего требуются эти разрешения, вам придется получить их с помощью su или sudo.

Су vs.Судо

Команда su переключается на суперпользователя — или пользователя root — при ее выполнении без дополнительных параметров. Вам нужно будет ввести пароль учетной записи root. Это не все, что делает команда su — вы можете использовать ее для переключения на любую учетную запись пользователя. Если вы выполните команду su bob, вам будет предложено ввести пароль Боба, и оболочка переключится на учетную запись пользователя Боба.

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

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

Это ключевое различие между su и sudo. Su переключает вас на учетную запись пользователя root и требует пароль учетной записи root. Sudo выполняет одну команду с привилегиями root — она не переключается на пользователя root и не требует отдельного пароля пользователя root.

Ubuntu и другие дистрибутивы Linux

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

Есть несколько преимуществ использования sudo вместо su по умолчанию. Пользователям Ubuntu нужно указать и запомнить только один пароль, в то время как Fedora и другие дистрибутивы требуют, чтобы во время установки вы создавали отдельные пароли root и учетной записи пользователя.

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

В дистрибутивах на основе Ubuntu, включая Linux Mint, по умолчанию также используется sudo вместо su.

Несколько хитростей

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

Чтобы запустить одну команду от имени пользователя root с помощью su, выполните следующую команду:

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

Чтобы получить полноценную интерактивную корневую оболочку с помощью sudo, запустите sudo –i.

Вам потребуется указать пароль текущей учетной записи пользователя вместо пароля учетной записи root.

Включение привилегированного пользователя в Ubuntu

Чтобы включить учетную запись пользователя root в Ubuntu, используйте следующую команду, чтобы установить для нее пароль. Имейте в виду, что Ubuntu не рекомендует этого делать.

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

Добавление пользователей в файл Sudoers

Только учетные записи администратора в Ubuntu могут запускать команды с помощью sudo. Вы можете изменить тип учетной записи пользователя в окне конфигурации учетных записей пользователей.

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

Если вы используете другой дистрибутив Linux, вы можете предоставить пользователю разрешение на использование sudo, выполнив команду visudo с привилегиями root (поэтому сначала запустите su или используйте su -c).

Добавьте в файл следующую строку, заменив пользователя именем учетной записи пользователя:

Нажмите Ctrl-X, а затем Y, чтобы сохранить файл. Вы также можете добавить пользователя в группу, указанную в файле. Пользователи в группах, указанных в файле, автоматически получат привилегии sudo.

Графические версии Su

Linux также поддерживает графические версии su, которые запрашивают ваш пароль в графическом окружении. Например, вы можете запустить следующую команду, чтобы получить графический запрос пароля и запустить файловый браузер Nautilus с правами root. Нажмите Alt-F2, чтобы запустить команду из графического диалогового окна без запуска терминала.

У команды gksu есть еще несколько хитростей: она сохраняет текущие настройки рабочего стола, поэтому графические программы не будут выглядеть неуместно, когда вы запускаете их от имени другого пользователя. Такие программы, как gksu, являются предпочтительным способом запуска графических приложений с привилегиями root.

Gksu использует серверную часть на основе su или sudo, в зависимости от используемого вами дистрибутива Linux.

Теперь вы должны быть готовы встретить как su, так и sudo! Вы столкнетесь с обоими, если используете разные дистрибутивы Linux.

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 будет установлено его значение
< /tbody>
Команды Linux
Файлы tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm
Процессы alias · screen · top · nice · renice · прогресс · strace · systemd · tmux · chsh · история · at · пакетное · бесплатное · которое · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · стена · yes · kill · спать · sudo · su · время · groupadd · usermod · группы · lshw · выключение · перезагрузка · halt · poweroff · passwd · lscpu · crontab · date · bg · fg
Сеть netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · копать · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw
  • › Как установить и управлять пакетами Snap в Ubuntu 16.04 LTS
  • › Добавление пользователя в группу (или вторую группу) в Linux
  • › Как использовать BleachBit в Linux
  • › Как войти в две или более учетных записей Skype одновременно
  • › Как управлять службами Systemd в системе Linux
  • › Как установить программное обеспечение из сторонних PPA в Ubuntu
  • › Как получить доступ к файлам Ubuntu Bash в Windows (и системному диску Windows в Bash)
  • › Худшее, что есть в телефонах Samsung, — это программное обеспечение Samsung.

Когда я делаю что-то, что требует ввода root десятки раз подряд, я предпочитаю переключать сеанс на сеанс root. В различных учебниках и инструкциях, которые я использовал в Интернете, я вижу, что sudo su , sudo su - , sudo -i и sudo /bin/bash используются для открытия корневого сеанса, но я не понимаю разницу между ними. и когда и если это различие имеет значение.

Может ли кто-нибудь прояснить это для меня?

@RaduRădeanu Когда я ввел вопрос, я просмотрел предложенные вопросы, и ни один из них не дал полного ответа на мой вопрос. То же самое относится и к вопросам, на которые вы ссылаетесь. Хотя они содержат много новой информации для меня, и спасибо за ссылку на них, я нашел их не такими полными, как приведенный ниже ответ пользователя хаоса, который намного больше соответствует тому, что я искал.

2 ответа 2

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

  • su — команда su используется для переключения на другого пользователя (s и пользователя), но вы также можете переключиться на пользователя root, вызвав команду без параметров. su запрашивает пароль пользователя для переключения, после ввода пароля вы переключились на среду пользователя.
  • sudo — sudo предназначен для запуска одной команды с привилегиями root. Но в отличие от su он запрашивает пароль текущего пользователя. Этот пользователь должен быть в файле sudoers (или группе, которая находится в файле sudoers). По умолчанию Ubuntu «запоминает» ваш пароль на 15 минут, поэтому вам не нужно каждый раз вводить пароль.
  • bash — текстовый интерфейс для взаимодействия с компьютером. Важно понимать разницу между интерактивными и неинтерактивными оболочками с входом в систему, без входа в систему:

Типы оболочек:

  • оболочка входа: оболочка входа регистрирует вас в системе как указанный пользователь, для этого необходимы имя пользователя и пароль.Когда вы нажимаете ctrl + alt + F1 для входа в виртуальный терминал, вы получаете после успешного входа оболочку входа в систему.
  • оболочка без входа в систему: оболочка, которая выполняется без входа в систему, для этого необходим вошедший в систему пользователь. Когда вы открываете графический терминал в gnome, это оболочка без входа в систему.
  • интерактивная оболочка: оболочка (с входом или без входа), в которой вы можете в интерактивном режиме вводить или прерывать команды. Например, терминал гнома.
  • неинтерактивная оболочка: (под)оболочка, которая, вероятно, запускается из автоматизированного процесса. Вы не увидите ни ввода, ни вывода.

sudo su Вызывает sudo с помощью команды su . Bash называется интерактивной оболочкой без входа в систему. Таким образом, bash выполняет только .bashrc . Вы можете видеть, что после переключения на root вы все еще находитесь в том же каталоге:

sudo su — на этот раз это оболочка входа в систему, поэтому /etc/profile , .profile и .bashrc выполняются, и вы окажетесь в домашнем каталоге root с окружением root.

sudo -i Это почти то же самое, что и sudo su. Параметр -i (имитировать начальный вход в систему) запускает оболочку, указанную записью базы данных паролей целевого пользователя, в качестве оболочки входа в систему. Это означает, что файлы ресурсов для входа в систему, такие как .profile , .bashrc или .login, будут прочитаны и выполнены оболочкой.

sudo /bin/bash Это означает, что вы вызываете sudo с помощью команды /bin/bash. /bin/bash запускается как оболочка без входа в систему, поэтому все точечные файлы не выполняются, но сам bash читает .bashrc вызывающего пользователя. Ваше окружение остается прежним. Ваш дом не будет домом root. Итак, вы являетесь пользователем root, но находитесь в среде вызывающего пользователя.

sudo -s считывает переменную $SHELL и выполняет содержимое. Если $SHELL содержит /bin/bash, он вызывает sudo /bin/bash (см. выше).

Проверить:

Чтобы проверить, находитесь ли вы в оболочке входа в систему или нет (работает только в bash, поскольку shopt является встроенной командой):

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