В чем разница между sudo -i и sudo su -

Ответы:

30

Они могут быть функционально близки к одной и той же вещи, но кажется, что «sudo -i» имеет меньший вес и сохраняет некоторые удобные обратные ссылки в вашей среде.

Вы можете увидеть дополнительные процессы, посмотрев на «ps auxf» (f дает представление о лесе)

sudo -i возвращает это дерево процессов

jkrauska  4480  0.0  0.0  76828  1656 ?        S    23:38   0:00  |   \_ sshd: jkrauska@pts/0
jkrauska  4482  0.0  0.0  21008  3816 pts/0    Ss   23:38   0:00  |       \_ -bash
root      4675  0.6  0.0  19512  2260 pts/0    S+   23:42   0:00  |           \_ -bash

sudo su - возвращает это дерево процессов

jkrauska  4480  0.0  0.0  76828  1656 ?        S    23:38   0:00  |   \_ sshd: jkrauska@pts/0
jkrauska  4482  0.0  0.0  21008  3816 pts/0    Ss   23:38   0:00  |       \_ -bash
root      4687  0.5  0.0  43256  1488 pts/0    S    23:42   0:00  |           \_ su -
root      4688  0.5  0.0  19508  2252 pts/0    S+   23:42   0:00  |               \_ -su

Обратите внимание, что они запускаются с того же pid процесса bash, 4482, но это su - кажется, порождает еще один шаг.)

Ваш первый sudo уже повышает уровень доступа к root. Запуск su без указания имени пользователя внутри sudo изменяет текущего пользователя на root дважды.

Другой способ проверить это - запустить обе команды с помощью strace -f.

strace -f -o sudoi sudo -i

против

strace -f -o sudosu sudo su -

Если вы измените эти две расы, вы увидите, что больше exeve работает за sudo su -.

Еще кое-что.

sudo -i поддерживает дополнительные переменные окружения, установленные SUDO.

SUDO_USER=jkrauska
SUDO_UID=1000
SUDO_COMMAND=/bin/bash
SUDO_GID=1000

sudo su - забивает эти переменные.

Джоэл К
источник
Спасибо, я проголосовал за тебя как за правильный ответ. Еще один вопрос, так sudo su -бессмысленно?
Говард
Если вы хотите заглушить обратные ссылки SUDO, это может быть полезно. Так что не бессмысленно в этом случае.
Джоэл К
Существуют также большие различия в обработке аргументов, обработке переменных среды и в безопасности, когда вы становитесь пользователем без полномочий root. Посмотрите, что я добавил здесь: serverfault.com/q/601140/102814
Крейг Рингер,
1

Снимок ответа: нет, они не одинаковы.

Длинный ответ: sudo и su - это разные программы, которые выполняют одну и ту же задачу, то есть повышают привилегии пользователя root.

Раньше su был способом де-факто стать пользователем root в системах Linux. Однако всегда была необходимость разделить привилегии и оставить некоторую информацию об аудите. Также, когда вы делаете su - все, что вы делаете, делается от имени root и опасно иметь такую ​​большую силу. Вот где на помощь пришла Судо.

У sudo есть некоторые характеристики, которых нет у su . Ключевым элементом в sudo является возможность запускать «одну» команду от имени пользователя root и затем передавать привилегии обычному пользователю. Пример: удалить файл, принадлежащий пользователю root.

sudo rm /root/someFile

Эта команда удалит файл, потому что sudo будет поднимать вас до уровня root каждый раз, когда вы используете команду sudo перед другой командой. Следующая команда, которую вы запустили, будет выполняться как обычный пользователь (если вы не добавите команду sudo в начале). Это позволяет вам выполнить административную задачу, а затем сразу же отбросить привилегии, помогая избежать опасных ситуаций.

sudo также предоставляет другие преимущества, такие как ограничение набора программ, которые может запускать пользователь, команды журналов, запускаемые с помощью sudo, и другие вещи. Для получения дополнительной информации sudo в двух словах

Когда вы делаете su - или sudo -i, вы делаете то же самое. Это становится root, но имейте в виду, что su и sudo совершенно разные и предоставляют вам различные инструменты как системный администратор. Лично я НИКОГДА не запускаю su - и моя политика pam запрещает это , не позволяя никому запускать его. В моих системах вы всегда должны использовать sudo из-за дополнительных преимуществ.

Больше информации: Использование и включение sudo

Termiux
источник
suТакже можно запустить только одну команду:su -c 'command ...'
Элия ​​Каган
Вопрос был о разнице между sudo -iа sudo su -, а не между sudoи su.
Алессио Гаэта