При этом 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обратно туда, где вы были, хотя.
sudo su -этот способ, вам не нужен пароль root, и он-гарантирует, что домашний каталог установлен правильно.