Основна відмінність цих команд полягає в тому, як вони обмежують доступ до своїх функцій.
su (що означає "заміна користувача" або "користувач комутації") - робить саме це, він запускає інший екземпляр оболонки з привілеями цільового користувача. Щоб переконатися, що у вас є права на це, він запитає пароль цільового користувача . Отже, щоб стати root, вам потрібно знати пароль root. Якщо на вашій машині є кілька користувачів, яким потрібно запускати команди як root, всі вони повинні знати пароль root - зауважте, що це буде той самий пароль. Якщо вам потрібно відкликати права адміністратора у одного з користувачів, вам потрібно змінити кореневий пароль і повідомити його лише тим людям, яким потрібно зберегти доступ - безладно.
sudo (хм ... що таке мнемонічне? Super-User-DO?) зовсім інше. Він використовує конфігураційний файл (/ etc / sudoers), в якому перераховується, які користувачі мають права на певні дії (запускати команди як root тощо). Після виклику він запитує пароль користувача, який його запустив - щоб переконатися, що людина в термінал - це той самий "джоу", який вказаний у списку /etc/sudoers. Щоб скасувати права адміністратора у людини, вам просто потрібно відредагувати файл конфігурації (або видалити користувача з групи, яка вказана в цьому конфігурації). Це призводить до набагато більш чіткого управління привілеями.
Як результат цього, у багатьох системах на базі Debian rootкористувач не встановлює пароль - тобто неможливо ввійти як root безпосередньо.
Також /etc/sudoersдозволяє вказати деякі додаткові параметри - наприклад, користувач X може запускати програму лише Y
sudo suКомбінація, що часто використовується, працює наступним чином: спочатку sudoзапитає ваш пароль, і, якщо вам це дозволено, викликає наступну команду ( su) як суперкористувача. Оскільки suвін викликається root, він не вимагає введення пароля цільового користувача. Отже, sudo suдозволяє відкрити оболонку як інший користувач (включаючи root), якщо вам дозволяється суперкористувач за допомогою /etc/sudoersфайлу.
su userдля входу з ненадійних оболонок, алеsu - user. Дивіться unix.stackexchange.com/q/7013/8250