Командная строка и привилегии
Механизмы повышения прав
Повышение прав в Linux
Принцип наименьших привилегий — это основа безопасности любой системы. Он гласит, что учетная запись пользователя должна иметь только те права, которые необходимы для выполнения ее задач. Вход в систему под учетной записью root, или суперпользователя, нарушает этот принцип и создает ненужные риски. Случайная опечатка в команде может привести к необратимым последствиям. Для временного повышения прав существуют специальные инструменты, и самый известный из них — sudo.
sudo (superuser do) позволяет обычному пользователю выполнить команду от имени другого пользователя, по умолчанию — root. Это делается путем добавления sudo перед нужной командой. Система запросит пароль текущего пользователя, а не пароль root, что повышает безопасность, так как пароль суперпользователя остается в секрете.
Например, для обновления списка пакетов в Debian-based дистрибутивах вы бы выполнили
sudo apt updateвместо того, чтобы сначала входить в сессию root.
Настройка sudo
Правила, определяющие, кто и какие команды может выполнять через sudo, хранятся в файле /etc/sudoers. Редактировать этот файл напрямую опасно: синтаксическая ошибка может заблокировать доступ к sudo для всех пользователей, и для исправления придется загружаться в однопользовательском режиме. Для безопасного редактирования используется специальная утилита — visudo.
# Запуск редактора для файла sudoers
sudo visudo
Внутри файла sudoers вы увидите строки, похожие на эту:
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
Здесь %admin ALL=(ALL) ALL означает, что любой пользователь из группы admin может выполнять любую команду от имени любого пользователя на любом хосте. Чтобы дать пользователю alex права на выполнение всех команд, нужно добавить строку:
alex ALL=(ALL) ALL
По умолчанию, после ввода пароля sudo запоминает сессию на 15 минут. Это время можно изменить, добавив в sudoers строку Defaults timestamp_timeout=X, где X — время в минутах. Установка timestamp_timeout=0 заставит sudo запрашивать пароль при каждом вызове.
Повышение прав в Windows
В Windows также существует механизм для запуска программ от имени другого пользователя, включая администратора. Это знакомый многим пункт контекстного меню «Запуск от имени администратора». Его аналогом в командной строке является команда runas.
# Запуск командной строки от имени локального администратора
runas /user:Administrator cmd.exe
После выполнения этой команды система запросит пароль пользователя Administrator, и откроется новое окно командной строки с повышенными правами.
Другой важный механизм в Windows — это Контроль учетных записей (UAC). Когда вы пытаетесь выполнить действие, требующее прав администратора, UAC затемняет экран и запрашивает подтверждение. Это сделано для защиты от вредоносных программ, которые могли бы выполнять административные задачи в фоновом режиме без вашего ведома.
В PowerShell можно запустить процесс с повышенными правами с помощью команды Start-Process, используя параметр -Verb RunAs.
# Запуск нового экземпляра PowerShell с правами администратора
Start-Process powershell -Verb RunAs
Эта команда вызовет стандартное окно UAC для подтверждения действия. Это более современный и интегрированный в систему способ повышения прав по сравнению с runas, который требует ручного ввода пароля.
В чем заключается основной принцип наименьших привилегий?
Почему использование sudo считается более безопасным, чем прямой вход в систему под пользователем root?
Использование инструментов повышения прав вместо постоянной работы под суперпользователем — это ключевой навык для безопасного администрирования систем.
