Какова функциональная разница между sudo su и sudo -i?

Я думаю, что это руководство может вам помочь.

1
задан 11 August 2013 в 01:45

2 ответа

sudo su изменяет только текущего пользователя на root. Настройки среды (например, PATH) остаются неизменными.

sudo -i создает новую среду, как если бы root только что вошел в систему.

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

Подробнее см. [F6] о том, что [ f7] делает. К сожалению, man su подробно освещен.

Найдена версия man su (от login-1: 4.1.4.2 + svn3283-3ubuntu5.1), которая имеет после чего:

$ PATH сбрасывается в соответствии с параметрами /etc/login.defs ENV_PATH или ENV_SUPATH (см. ниже); $ IFS сбрасывается на «& lt; space> & lt; tab> & lt; newline>", если он был установлен. Обратите внимание, что поведение по умолчанию для среды следующее: переменные среды $ HOME, $ SHELL, $ USER, $ LOGNAME, $ PATH и $ IFS сбрасываются. Если --login не используется, среда копируется, за исключением перечисленных выше переменных. Если используется -login, переменные среды $ TERM, $ COLORTERM, $ DISPLAY и $ XAUTHORITY копируются, если они были установлены. Другие среды могут быть установлены модулями PAM.

Так зависит от того, изменяется ли sudo su среда, зависит от вашего распределения и настройки. Таким образом, sudo -i теоретически более портативен.

12
ответ дан 24 May 2018 в 19:09
  • 1
    su делает изменение настроек среды и может использоваться для имитации входа с использованием - или -l. Даже без -l, $PATH изменен . Испытайте эти претензии перед их созданием! (Вы имели в виду, что PWD остается прежним?) – Kyle Strand 25 February 2015 в 20:51
  • 2
    Реальный вопрос: существует ли разница между sudo su - и sudo -i? – Kyle Strand 25 February 2015 в 20:52
  • 3
    sudo su не запускается .profile (он не вошел в систему) или .bashrc (он не начал bash) или что-то еще, так как это изменит PATH? – OrangeDog 25 February 2015 в 21:00
  • 4
    Очевидно, что он меняет USER и HOME (и SUDO_COMMAND), я думаю, он должен вытащить из /etc/passwd, но я не вижу (и не тестировал), как PATH может измениться. – OrangeDog 25 February 2015 в 21:03
  • 5
    Вы явно задумываетесь над этим и на самом деле выполняете некоторые тесты в оболочке, поэтому я приношу свои извинения за мои «отрывки» и «проверяю эти утверждения», комментарий. Тем не менее, в моей системе я наблюдаю, что $PATH изменяется, когда я использую su без sudo (используя пароль root). Согласно info su (что может быть лучше, на что ссылаться в вашем ответе), su действительно читает запись пароля для пользователя, которого вы становитесь. Возможно, изменение $PATH, которое я наблюдаю, зависит от системы (я на Debian 7). – Kyle Strand 25 February 2015 в 21:17

Основная проблема - одна из (не очень) правильных настроек среды.

Используя sudo su, новая оболочка получает свою среду от пользователя, который выдает команду, что может быть проблематичным. [!d1 ]

С sudo -i вы получаете чистую корневую оболочку.

См. Особые замечания по sudo и shells

Остается заметить, что редко бывает необходимо создать корень оболочки.

6
ответ дан 24 May 2018 в 19:09
  • 1
    «Особые примечания» вы указываете, что sudo -i похож на sudo su -, который на самом деле не получает свою среду от пользователя, выдавшего команду. – Kyle Strand 25 February 2015 в 20:54
  • 2
    @KyleStrand thx для указания этого - это была опечатка, вопрос действительно о sudo su vs. sudo -i. – guntbert 26 February 2015 в 00:32

Другие вопросы по тегам:

Похожие вопросы: