В чем разница между следующими командами:
su
sudo -s
sudo -i
sudo bash
Я знаю, потому что su
мне нужно знать пароль root, и sudo
я должен быть в sudoers
файле, но когда он будет выполнен, какая разница?
Я знаю, что есть разница между su
и sudo -s
тем, что мой домашний каталог находится /root
после того, как я выполню su
, но мой домашний каталог все еще /home/myname
после sudo -s
. Но я подозреваю, что это всего лишь симптом основного различия, которое я пропускаю.
sudo su -
этот способ, вам не нужен пароль root, и он-
гарантирует, что домашний каталог установлен правильно.Ответы:
При этом
su
вы становитесь другим пользователем - по умолчанию root, но потенциально другим пользователем. Если вы говоритеsu -
, ваша среда также заменяется средой входа этого пользователя, так что то, что вы видите, неотличимо от входа в систему от имени этого пользователя. Система не может сказать, что вы делаете в то время, как вы выполняетеsu
действия другого пользователя при входе в систему.Вещи очень разные с
sudo
:Команды, которые вы запускаете через
sudo
execute как целевой пользователь - по умолчанию root, но изменяемые с помощью-u
- но он регистрирует команды, которые вы выполняете через него, помечая их своим именем пользователя, чтобы потом можно было назначить вину. :)sudo
очень гибкий. Например, вы можете ограничить количество команд, которые могут выполнять данный пользователь или группа пользователей. Сsu
этим все или ничего.Эта функция обычно используется для определения ролей. Например, вы могли бы определить группу «резервных копий», которую разрешено запускать,
dump
и дляtar
каждой из которых необходим root-доступ для правильного резервного копирования системного диска.Я упоминаю об этом здесь, потому что это означает, что вы можете дать кому-то
sudo
привилегии, не давая имsudo -s
илиsudo bash
способностям. У них есть только те разрешения, которые им необходимы для выполнения своей работы, в то время какsu
у них запущена вся система. Вы должны быть осторожны с этим, хотя: если вы даете кому-то возможность сказатьsudo vi
, например, они могут вырватьсяvi
и эффективно иметь ту же силу, что и сsudo -s
.Поскольку он принимает пароль пользователя sudoer вместо пароля root,
sudo
изолирует разрешение между несколькими пользователями sudoer.Это решает административную проблему
su
, заключающуюся в том, что при смене пароля root нужно было сообщить всем, кто должен был его знатьsu
.sudo
позволяет пароли sudoers изменить самостоятельно. Фактически, это обычная блокировка паролем учетной записи пользователя root в системе, с помощью которойsudo
все задачи sysadmin должны выполняться через нееsudo
. В большой организации со многими доверенными пользователями sudo это означает, что когда один из системных администраторов уходит, вам не нужно менять пароль root и распространять его среди оставшихся администраторов.Основное различие между
sudo bash
иsudo -s
заключается в том, что-s
он короче и позволяет передавать команды для выполнения в стандартной оболочке вашего пользователя двумя способами:Вы можете сказать,
sudo -s some-command
что работаетsome-command
под вашей оболочкой. Это в основном сокращение дляsudo $SHELL -c some-command
.Вместо этого вы можете передавать команды на стандартный ввод оболочки, например
sudo -s < my-shell-script
. Вы можете использовать это с помощью heredoc для отправки нескольких команд на одинsudo
вызов, избегая необходимостиsudo
повторного ввода .Оба эти поведения являются необязательными. Чаще всего вы даете в
-s
одиночку, поэтому он просто запускает оболочку вашего пользователя в интерактивном режиме. В этом режиме он отличаетсяsudo bash
тем, что может запускать другую оболочку, отличную от той, которая выполняетсяbash
сначала вSHELL
переменной среды, а затем, если она не установлена, в настройках оболочки входа пользователя, обычно в/etc/passwd
.Оболочка, запущенная пользователем,
sudo -s
наследует вашу текущую пользовательскую среду. Если то, что вы действительно хотите, это чистая среда, как вы получаете сразу после входа в систему, то, что вы хотите вместо этогоsudo -i
, является относительно недавним дополнением кsudo
. Грубо говоря,sudo -i
этоsudo -s
какsu -
естьsu
: он сбрасывает все, кроме нескольких ключевых переменных среды, и отправляет вас обратно в домашний каталог вашего пользователя. Если вы также не дадите ей команды для запуска под этой оболочкой через стандартный ввод илиsudo -i some-command
, она запустит эту оболочку как интерактивную оболочку входа в систему, так что сценарии запуска оболочки вашего пользователя (например.bash_profile
) будут запущены снова.Все это делает
sudo -i
значительно более безопасным, чемsudo -s
. Почему? Потому что если кто-то может изменить вашу среду раньшеsudo -s
, это может привести к выполнению непреднамеренных команд. Наиболее очевидный случай - это модификацияSHELL
, но она также может происходить реже, например, через,PAGER
если вы говорите,man foo
находясь подsudo -s
.Вы можете сказать: «Если они могут изменить
PAGER
, они могут изменитьPATH
, и тогда они могут просто заменить злуюsudo
программу», но кто-то достаточно параноик может сказать,/usr/bin/sudo /bin/bash
чтобы избежать этой ловушки. Вы, вероятно, не настолько параноик, что вы также избегаете ловушек во всех других восприимчивых переменных окружения. Вы также не забыли проверитьEDITOR
, например, перед выполнением любой команды VCS ? Таким образомsudo -i
.Поскольку
sudo -i
ваш рабочий каталог также изменяется на домашний каталог вашего пользователя, вы все равно можете использовать егоsudo -s
в тех ситуациях, когда вы знаете, что хотите остаться в том же каталоге, в котором находилисьcd
при запускеsudo
. Это все еще безопаснееsudo -i
иcd
обратно туда, где вы были, хотя.источник
vi
напечатайте:sh
и нажмите Enter. Теперь вы находитесь в подчиненной оболочке со всеми привилегиямиvi
процесса, который породил эту оболочку. Еслиvi
запущен с правами root, то и оболочка. Или вы можете запустить что-то кроме оболочки через:!cmd
, прочитать вывод команды из буфера редактирования через:r !cmd
и т. Д. Если все они заблокированы,Makefile
цели - это скрипты оболочки, а у Vim есть:make
команда, которая эффективно позволяет запускать произвольную оболочку. скрипты из редактора. Возможности для озорства слишком велики, чтобы это поле для комментариев имело место./usr/bin/sudo
PATH
это не единственная проблема.Из поста Ubuntuforums, который я сделал недавно:
Рассмотрим следующий эксперимент:
Вот различия, которые я нашел:
С
sudo -s
:С
sudo su
:Обратите внимание на разницу в
$HOME
. Будучи пользователем root и$HOME
установив дом обычного пользователя, может вызвать проблемы. Например, если вы запускаете графическое приложение, обычный пользователь~/.Xauthority
может быть перезаписан пользователем root. В дальнейшем это вызывает обычные пользовательские проблемы, такие как невозможность запуска определенных графических приложений через cron.Обобщить:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
вероятно установлено/etc/environment
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Нижняя строка -
sudo -i
это правильная команда для запуска, когда вам нужна корневая оболочка, которая не поддерживается средой пользователя.источник
sudo
(в/etc/sudoers
и связанных файлах). Параметры конфигурации , такие какalways_set_home
,env_reset
,env_keep
,env_check
иenv_reset
, и они могут варьироваться в зависимости от пользователя и команды. Смотрите «Командная среда» и SUDOERS OPTIONS часть из sudoers (5) Manpage.sudo -Hs
когда хочу, чтобы окружение не зависело от моих настроек, потому что я использую zsh и все учетные записи приложений, которые я мог бы изменить, чтобы использовать bash. Это позволяет определенному числу переменных среды проходить без изменений, но я обычно нахожу те, которые имеют значение, перезаписываются /etc/profile.d/*.su
( S ведьма у Ser или с ubstitute у сер) позволяет переключать пользователя.su
в основном запускает другой экземпляр оболочки с привилегиями предполагаемого пользователя. По умолчанию он переключает вас наroot
пользователя, если мы хотим переключить конкретного пользователя, нам нужно передать пользователя следующим образом:su -
означает, что переменные среды будут сброшены в корень иsu
означает переменные среды как старый пользователь.например: домашний каталог пользователя root, если вы используете,
su -
или домашний каталог старого пользователя, если вы его используетеsu
.Судо ( s уперло у сер делать ) это утилита командной строки , которая позволяет пользователям запускать программы с привилегиями безопасности другого пользователя, по умолчанию суперпользователя т.е.
root
. Он использует файл конфигурации, в/etc/sudoers
котором указывается, какие пользователи имеют права на определенные действияsudo следует читать как / ˈsuːduː / . Синтаксис
sudo command
т.е. с ведьмой ˙U сер и сделать эту команду.su
эквивалентноsudo -i
и имитирует вход в систему с учетной записью root. Ваш рабочий каталог будет/root
, и он будет читать root'ы и.profile
т. Д. Приглашение изменится с $ на #, указывая, что у вас есть root-доступ.sudo -s
запускает оболочку как root, но не меняет ваш рабочий каталог.sudo bash
гдеbash
команда для запускаsudo
. Эта команда запускаетсяbash
как суперпользователь.sudo
может быть зарегистрировано все, что кто-то делает.sudo
позволяет пользователю знать пароль пользователя root.sudo
мы можем ограничить команды, разрешенные для запуска.источник