Почему мы используем su - и не только su?

Я не понимаю, почему su - предпочтительнее su для входа в систему как пользователь root.

147 голосов | спросил Dharmit 7 FebruaryEurope/MoscowbMon, 07 Feb 2011 13:42:12 +0300000000pmMon, 07 Feb 2011 13:42:12 +030011 2011, 13:42:12

4 ответа


203

su - вызывает оболочку входа после переключения пользователя. Оболочка для входа перезаписывает большинство переменных среды, обеспечивая чистую базу.

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

Представьте, что вы разработчик программного обеспечения с обычным доступом пользователя к машине, и ваш невежественный администратор просто не даст вам root-доступа. Давайте (надеюсь) обмануть его.

$ mkdir /tmp/evil_bin
$ vi /tmp/evil_bin/cat
#!/bin/bash
test $UID != 0 && { echo "/bin/cat: Permission denied!"; exit 1; }
/bin/cat /etc/shadow &>/tmp/shadow_copy
/bin/cat "[email protected]"
exit 0

$ chmod +x /tmp/evil_bin/cat
$ PATH="/tmp/evil_bin:$PATH"

Теперь вы спросите своего администратора, почему вы не можете cat фиктивный файл в своей домашней папке, он просто не сработает!

$ ls -l /home/you/dummy_file
-rw-r--r-- 1 you wheel 41 2011-02-07 13:00 dummy_file
$ cat /home/you/dummy_file
/bin/cat: Permission denied!

Если ваш администратор не такой умный или просто немного ленив, он может зайти на ваш стол и попробовать с его полномочиями суперпользователя:

$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit

Ничего себе! Спасибо, супер админ!

$ ls -l /tmp/shadow_copy
-rw-r--r-- 1 root root 1093 2011-02-07 13:02 /tmp/shadow_copy

Он, он.

Возможно, вы заметили, что поврежденная переменная $PATH не была сброшена. Этого не произошло бы, если бы администратор вызывал su -.

ответил wag 7 FebruaryEurope/MoscowbMon, 07 Feb 2011 15:01:05 +0300000000pmMon, 07 Feb 2011 15:01:05 +030011 2011, 15:01:05
29

su - записывает вас полностью как root, тогда как su делает это так, что вы притворяетесь root.

Наиболее очевидным примером этого является то, что ~ является домашним каталогом root, если вы используете su -, но ваш собственный домашний каталог, если вы используете su.

В зависимости от вашей системы это может также означать различия в подсказке, PATH или файле истории.

Итак, если вы являетесь частью команды, управляющей системой, и ваш коллега дает вам команду для запуска, вы знаете, что она будет работать одинаково, если вы используете su -, но если вы оба используют su, могут быть различия из-за того, что у вас разные конфигурации оболочки.

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

Также не забывайте о sudo, который имеет параметр -s, чтобы запустить оболочку с правами root. Конечно, это также разные правила, и они меняются в зависимости от того, какое распределение вы используете.

ответил Mikel 7 FebruaryEurope/MoscowbMon, 07 Feb 2011 14:18:41 +0300000000pmMon, 07 Feb 2011 14:18:41 +030011 2011, 14:18:41
1

Я использую su - когда я вхожу в каталог как обычный пользователь, но хочу переключиться на root и оставаться в том же каталоге после переключения. Когда вы используете su - it, пользователь переключается на root, а также переводит вас в /root, который является корневым домашним каталогом.

ответил Calvin Dike 8 J0000006Europe/Moscow 2018, 02:04:52
-1

Основное отличие:

su - username устанавливает среду оболочки, как если бы она была чистой логиной как указанный пользователь, она запрашивала и использовала указанные переменные среды пользователя,

su username запускает оболочку с текущими настройками среды для указанного пользователя.

Если имя пользователя не указано с помощью su и su -, учетная запись root подразумевается по умолчанию.

ответил Akhil MK 10 J0000006Europe/Moscow 2018, 09:27:29

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132