Когда я делаю то, что требует, чтобы root набирался десятки раз подряд, я предпочитаю переключать сеанс на сеанс root. В различных учебных пособий и инструкций я использовал в Интернете, я вижу sudo su
, sudo su -
, sudo -i
и sudo /bin/bash
используется , чтобы открыть корневой сеанс, но я не ясно , о разнице между ними и когда или если это различие имеет большое значение.
Может кто-нибудь прояснить это для меня?
command-line
bash
sudo
su
Павел
источник
источник
sudo -s
иsudo su
.Ответы:
Чтобы объяснить это, вам нужно знать, что делают программы:
su
- Командаsu
используется для переключения на другой пользователь ( ей ведьма у Ser), но вы также можете переключиться на суперпользователь, вызвав команду без параметров.su
запрашивает пароль пользователя для переключения после ввода пароля, который вы переключили в среду пользователя.sudo
-sudo
предназначен для запуска одной команды с привилегиями root. Но в отличие отsu
него запрашивает пароль у текущего пользователя. Этот пользователь должен быть в файле sudoers (или в группе, которая находится в файле sudoers). По умолчанию Ubuntu «запоминает» ваш пароль на 15 минут, чтобы вам не приходилось каждый раз вводить пароль.bash
- Текстовый интерфейс для взаимодействия с компьютером. Важно понимать разницу между логином, без входа в систему, интерактивными и неинтерактивными оболочками:Типы снарядов:
Итак, случаи:
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
это встроенная команда):источник
sudo
позволяет разрешенному пользователю выполнять команду от имени суперпользователя или другого пользователя . В любом случае +1 за ваши усилия.root
пользовательского сеанса (вместо использованияsudo
) - это когда я делаю что-то, что требует интенсивного использованияroot
привилегий, например, при установке чего-то нового или выполнении основной реконфигурации , Я использовалsudo /bin/bash
, но, видимо, этот метод имеет плохой рэп по какой-то причине, которую я не понимаю.sudo -i
предлагается. Читайте здесь: ubuntuforums.org/showthread.php?t=1817402 и здесь: unix.stackexchange.com/questions/98531/…Чтобы найти различия, вы можете разбить полученную среду на разные вызовы.
Вы можете найти некоторые «небольшие» различия в некоторых критических переменных:
PATH
,LD_LIBRARY_PATH
,LD_PRELOAD
или какая-то разница в ~ /. Обработка точечных файлов (
~/.config
).Также
~/.xsession.errors
обратите внимание на владение файлами журналов на основе $ HOME ( и т. Д.) Или файлами cookie xauth (~/.Xauthority
), которые генерируют команды.Попробуйте эти команды:
источник