Существует много разных способов получить root-сессию в терминале Linux. Это может создать некоторую путаницу, поскольку большинство начинающих пользователей, желающих получить root-права, могут быть не знакомы с тем, как каждая команда может получить root-доступ, чем они отличаются и когда эти различия имеют значение. Здесь мы разберем каждую из множества различных команд, используемых для получения root-доступа в терминале, объясним, как они получают root, когда их использовать, и все, что между ними.
Читайте также: Что такое Doas и как его установить
вс
Команда su
заменяет текущего пользователя root в текущей оболочке.
Вы можете переключиться на любого пользователя, набрав su
и добавив после него имя пользователя.
Contents
вс
witchuser">Это заставит систему переключиться (и, по сути, выйти из системы) текущего пользователя на указанного. Альтернативно, команда su
может получить root-доступ, введя su
, не указывая ничего после команды.
su
лучше всего использовать, когда пользователю нужен прямой доступ к учетной записи root в системе. Он не проходит через sudo
или что-то в этом роде. Вместо этого вас попросят ввести пароль пользователя root, поскольку вы буквально входите в него. Более того, другие способы получения root-доступа не дают возможности получить доступ к корневому домашнему каталогу и корневой среде.
Внимание: использование su
— наименее безопасный способ выполнения корневого действия. Как правило, если вы можете этого избежать, не используйте это.
Читайте также: Полное руководство по командам Apt и Apt-Get
су -c
Эта команда передает другие команды непосредственно пользователю root.
Подобно вводу sudo
перед командой, su -c
запустит команду от имени пользователя root. Однако вместо того, чтобы просто вводить команду, вам придется взять ее в кавычки.
Это быстрый способ запустить одну команду через терминал с повышенными привилегиями. Это очень полезно, если sudo
по какой-то причине недоступен (он не предустановлен в таких дистрибутивах, как Arch Linux) или не работает корректно из-за повреждения.
Поскольку вы передаете что-то непосредственно пользователю root, если ваш пароль пользователя и пароль root различны, вам придется ввести пароль root для аутентификации.
судо су
Эта команда запрашивает пароль текущего пользователя, а не root.
По сути, это то же самое, что просто запустить su
в оболочке, за исключением одного существенного различия: вместо того, чтобы напрямую говорить системе «переключить пользователей», вы говорите ей запустить su
команда с правами суперпользователя. При запуске sudo su
будут запущены «.profile»,
су -c
etc/profile», во многом аналогично запускуsu
(или su root
). Если какая-либо команда запускается с sudo
перед ней, ей предоставляются права root.
Хотя большой разницы между sudo su
и su
нет, первая по-прежнему остается очень полезной командой по одной важной причине: когда пользователь запускает su
чтобы получить root-доступ в системе, они должны знать пароль root. Root предоставляется с помощью sudo su
путем запроса пароля текущего пользователя, что позволяет получить root без пароля root.
Это полезно в ситуациях, когда вы забыли пароль root, если он отличается от пароля вашей учетной записи. Пока вы можете это сделать, в какой-то момент вам все равно понадобится сбросить пароль root .
Читайте также: Как использовать команду Rm в Linux
судо -i
Использование sudo -i
практически аналогично команде sudo su
, за одним исключением: она не взаимодействует напрямую с пользователем root.
Как и sudo su
, флаг -i
позволяет пользователю получить root-среду без необходимости знать пароль учетной записи root. sudo -i
также очень похож на использование sudo su
: он считывает все файлы среды («.profile» и т. д.) и устанавливает среду внутри оболочки.п>
От sudo su
он отличается тем, что sudo -i
— это гораздо более чистый способ получения root-прав и корневой среды без прямого взаимодействия с root-пользователем.
Для пояснения: с sudo su
вы используете более одной корневой команды setuid
в фоновом режиме. Это значительно усложняет определение того, какие переменные среды будут сохранены, а какие будут изменены (при переходе на корневую среду). Это не относится к sudo -i
. По этой причине большинство людей считают его предпочтительным способом получения root-прав без непосредственного входа в систему.
Проще говоря: sudo -i
предоставит вам «чистый» root-логин в вашей папке «/root», которая является «домашней» папкой для пользователя root.
Читайте также: Как использовать команду dd в Linux
судо -s
Эта команда вызывает оболочку с вашей переменной $SHELL.
Переключатель -s
для команды sudo
считывает переменную $SHELL текущего пользователя, выполняющего команды. Эта команда работает так, как если бы пользователь использовал sudo /bin/bash
, если оболочка, из которой он работает, — bash.
В нашем случае sudo -s
предоставил нам интерактивную оболочку fish, поскольку ранее мы установили fish в качестве оболочки по умолчанию, так что это будет так, как если бы мы запускали sudo /usr/bin/fish
.
Sudo -s
— это оболочка в стиле «без входа в систему». В отличие от таких команд, как sudo -i
или sudo su
, система не будет читать файлы среды. Когда пользователь сообщает оболочке запустить sudo -s
, она получает root-права, но н
судо -i
ательскую среду. Ваш дом не будет корневым домом и т. д.Эту команду лучше всего использовать, когда пользователь хочет переключиться на root, но сохранить ту же среду оболочки. Например, вы можете захотеть использовать запустить рыбный скрипт , а не принудительно использовать оболочка bash по умолчанию , который root часто получает в большинстве дистрибутивов.
Другие команды, описанные выше, получают root-доступ, но также предоставляют вам переменные оболочки и среды, которые есть в дистрибутиве для root. Возможно, вы просто хотите перейти на пользователя без всего этого багажа!
Читайте также: Основные команды Bash для новичков в Linux
Часто задаваемые вопросы
Почему оболочка, с которой я работаю, имеет значение?
Если вы используете немодифицированную оболочку bash для своей учетной записи, разница в основном философская. В большинстве случаев получение root-прав через любую оболочку не приведет к каким-либо заметным изменениям. Но если вы запустите что-нибудь еще, вы сразу заметите, насколько все может быть по-другому!
Например, предположим, что вы используете оболочку fish для своей учетной записи пользователя и сохраняете корневую оболочку в bash. Загрузка пользовательской оболочки с помощью sudo -s
дает совершенно другой результат.
Оболочка будет следовать любой конфигурации, установленной в домашней папке root. Если у вас такой штуки нет, то она просто загрузит конфигурацию по умолчанию вместо вашей личной. (В нашем случае это будет «~/.config/fish/config.fish».) В любом случае, лучше оставить все как есть, а не копировать пользовательскую конфигурацию в «/root».
Переключение на оболочку вашей учетной записи при переключении на root следует выполнять только в том случае, если вам необходимо запустить сценарий, кот
судо -s
необходима эта конкретная оболочка.Может ли доступ к root-правам нанести вред моей системе?
В некоторых случаях да. Если вы не абсолютно уверены, что вам нужен доступ к root для всего в конкретном сеансе терминала, часто лучше просто набрать sudo
, а затем команду, если вы хотите получить доступ к root для этой конкретной команды. Например, если ввести sudo apt install vlc
в любой версии Linux на базе Debian, операционной системе будет предоставлен доступ к root только для запуска менеджера пакетов APT для установки VLC.
Одно очень важное предостережение относительно запуска sudo -i
или любого другого варианта, который мы обсуждали ранее, в отличие от ввода sudo
перед каждой командой, которую вы хотите запустить от имени пользователя root, заключается в том, что первый не записывает историю ваших команд в «/var/log/auth.log». Если вы ошиблись, вы не сможете вернуться и проверить, что вы сделали, чтобы исправить это. Вам придется работать с нехваткой памяти, поскольку сеансы root не записываются.
Когда я набираю «sudo» перед командой, какой вариант «sudo su» я запускаю?
Вводя sudo
для выполнения команды (т. е. вы вводите ее в той же строке, что и команду, которую хотите запустить), вы, по сути, запускаете ее под интерактивной корневой оболочкой. Это то же самое, что делает автономная команда sudo -s
. Это также очень похоже на запуск команды su -c
.
Все скриншоты Мигеля Лейва-Гомеса.