Командная строка: управление привилегиями
Повышение привилегий
Путь к root: Повышение привилегий
В любой операционной системе существует разделение прав. Большинство задач вы выполняете как обычный пользователь с ограниченными возможностями. Но иногда, чтобы установить программу, изменить системные настройки или выполнить диагностику, требуются права администратора. Процесс временного получения этих прав называется повышением привилегий.
Это ключевой аспект безопасности и администрирования. Постоянная работа с правами администратора опасна: одна случайная команда может повредить систему. Поэтому и в Linux, и в Windows существуют механизмы для безопасного выполнения команд от имени другого, более привилегированного пользователя.
Linux: su против sudo
В мире Linux есть два основных способа стать суперпользователем (часто называемым root).
Более старый подход — команда su (substitute user, или «заместить пользователя»). При вводе su без аргументов система попытается переключить вас на пользователя root и запросит его пароль. Это просто и прямолинейно, но не очень гибко и небезопасно, так как требует разглашения пароля root нескольким пользователям.
Современный и более безопасный метод — это sudo (superuser do, или «суперпользователь, сделай»). Эта команда позволяет выполнить одну конкретную команду с правами root, при этом запрашивая пароль вашего собственного пользователя. Главное преимущество sudo заключается в его гибкости, которая настраивается через специальный файл sudoers .
# Обновление списка пакетов с помощью sudo
sudo apt-get update
# Система запросит пароль пользователя 'your_user', а не 'root'.
sudo не только выполняет отдельные команды. Если вам нужен полноценный сеанс с правами root, можно использовать флаги -s или -i.
sudo -s запускает командную оболочку от имени root, но сохраняет переменные окружения вашего текущего пользователя (например, домашний каталог HOME останется прежним). sudo -i эмулирует полноценный вход в систему: запускается оболочка root и загружается его собственное окружение. Это более чистый способ «стать» root на время.
| Команда | Назначение | Требуемый пароль | Окружение (переменные среды) |
|---|---|---|---|
su | Переключиться на пользователя root | Пароль root | Окружение root |
sudo команда | Выполнить одну команду от имени root | Пароль текущего пользователя | Окружение текущего пользователя |
sudo -s | Запустить оболочку от имени root | Пароль текущего пользователя | Окружение текущего пользователя |
sudo -i | Запустить оболочку входа от имени root | Пароль текущего пользователя | Окружение root |
Windows: RunAs и UAC
В Windows повышение привилегий тесно связано с механизмом User Account Control (UAC). Даже если вы вошли в систему как администратор, большинство программ по умолчанию запускаются с обычными правами. Когда приложению требуются права администратора, UAC показывает диалоговое окно с запросом подтверждения. Это защищает систему от несанкционированных изменений.
В командной строке (CMD или PowerShell) для запуска процесса от имени другого пользователя используется команда runas.
# Запуск блокнота от имени администратора на локальной машине
runas /user:Administrator notepad.exe
# Система запросит пароль для пользователя Administrator.
runas полезна для запуска приложений от имени любой учетной записи, не обязательно администратора. Однако, чтобы просто запустить что-то с повышенными привилегиями из текущего сеанса, чаще используется другой подход.
В PowerShell можно запустить новый процесс с правами администратора, используя Start-Process с параметром -Verb RunAs. Это программный аналог клика правой кнопкой мыши по иконке и выбора «Запуск от имени администратора».
# Запускает новый экземпляр PowerShell с правами администратора.
Start-Process powershell -Verb RunAs
Этот метод инициирует тот самый запрос UAC, который вы привыкли видеть в графическом интерфейсе. После подтверждения откроется новое окно PowerShell, уже обладающее полными административными правами.
Почему постоянная работа с правами администратора считается небезопасной практикой?
В чем ключевое отличие команды sudo от su в Linux?