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

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

  • Su как root и запустить команду в одной строке
  • выполнение команды как su
  • bash - su и $ HOME
  • Нужно ли для командной строки вводить запись в utmp?
  • Загруженный из NFS Linux не имеет права на команду su
  • Как отключить вывод dd?
  • Расшифровка с помощью GPG после «su - другого пользователя»
  • Выполнение некоторых частей скрипта как непривилегированного пользователя с оболочкой
  • 2 Solutions collect form web for “Почему мы используем su – и не только su?”

    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 - вас в качестве root, тогда как su делает это так, что вы притворяетесь root.

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

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

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

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

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

    Linux и Unix - лучшая ОС в мире.