Добавить в корзинуПозвонить
Найти в Дзене
Герман Геншин

Эксперимент десятилетия: нашёл 3 крутых альтернативы sudo, но один метод делает его абсолютно бесполезным!

Сменить инструмент запуска sudo — не самое захватывающее занятие, почти как поменять носки, а вот попытаться освоить новую операционную систему — это уже по-настоящему острые впечатления. Пока все продолжают спорить о тонких настройках sudo и рисках setuid, немногие замечают настоящую угрозу: в одной из популярных систем до сих пор прячется дыра, о которой мало кто знает. Есть несколько способов решить «проблему sudo»: выбрать другую реализацию, усилить безопасность кода или вовсе полностью изолировать доступ. Run0, opendoas и sudo-rs подходят к вопросу по-своему, но Qubes OS настолько меняет правила игры, что о sudo можно вообще забыть. Sudo служит пользователям *nix ещё с 80-х, но за это время накопились две главные беды. Во-первых, у него огромная база кода — больше 100 тысяч строк, и каждая строчка может быть уязвимой. В таком «море» найти баг непросто, зато спрятаться он может где угодно. Вторая проблема — использование setuid: этот бит позволяет запускать файл с правами его влад
Оглавление

Сменить инструмент запуска sudo — не самое захватывающее занятие, почти как поменять носки, а вот попытаться освоить новую операционную систему — это уже по-настоящему острые впечатления. Пока все продолжают спорить о тонких настройках sudo и рисках setuid, немногие замечают настоящую угрозу: в одной из популярных систем до сих пор прячется дыра, о которой мало кто знает.

Есть несколько способов решить «проблему sudo»: выбрать другую реализацию, усилить безопасность кода или вовсе полностью изолировать доступ. Run0, opendoas и sudo-rs подходят к вопросу по-своему, но Qubes OS настолько меняет правила игры, что о sudo можно вообще забыть.

В чём подвох sudo

Лёгкая мишень для атак и коварный setuid

-2

Sudo служит пользователям *nix ещё с 80-х, но за это время накопились две главные беды. Во-первых, у него огромная база кода — больше 100 тысяч строк, и каждая строчка может быть уязвимой. В таком «море» найти баг непросто, зато спрятаться он может где угодно.

Вторая проблема — использование setuid: этот бит позволяет запускать файл с правами его владельца. Поскольку sudo принадлежит root, любой пользователь получает root-права при запуске. Стоит только найти баг в бинарнике, и злоумышленник сможет внедрить вредоносный код, чтобы получить полный контроль над системой. Именно так обычно происходит взлом с повышением привилегий.

Эти 7 TUI-оболочек преобразят ваш терминал до неузнаваемости

GUI удобен, но TUI дарит настоящее удовольствие!

Run0

Новый взгляд на права доступа

-3

Первая альтернатива — run0, который с версии 256 уже есть практически во всех системах на systemd. Его суть — не пытаться «подшаманить» старое sudo, а полностью отказаться от привычных схем в пользу современных решений. Вместо setuid тут работает polkit — отдельная служба, с которой можно очень гибко настраивать, кто и какие действия может запускать.

Run0 устроен совсем иначе. Пока sudo foo просто запускает программу "foo" с повышенными правами, унаследовав почти все параметры среды, run0 разворачивает процесс в отдельном псевдотерминале (PTY), полностью изолируя его. Там нет старых переменных среды, cgroup, контекстов безопасности или открытых файловых дескрипторов — никаких «хвостов» не останется.

Хотя run0 пока не идеален: он не сохраняет введённые пароли, так что вводить его придётся для каждой команды — не слишком удобно, но этот вопрос наверняка решат.

Если у вас уже стоит systemd, скорее всего run0 тоже установлен, так что смело экспериментируйте:

Можно также открыть полноценную оболочку (аналог su или sudo su):

Sudo-rs

После этого обзора хочется переписать всё на Rust

-4

Run0 — не единственный достойный вариант. Второй — sudo-rs: почти полноценная замена sudo, которую сначала создавали энтузиасты Trifecta Tech Foundation, а потом проект подхватила Canonical и решила «переплавить» Ubuntu на современные языки. Козырь sudo-rs — защита от уязвимостей, связанных с памятью: весь код написан на Rust. Именно на ошибках работы с памятью чаще всего «горит» безопасность и теряются root-права, так что если сам язык защищает память — многие дыры исчезают, а привычный функционал остаётся.

Эти 7 приёмов с Bash изменят вашу работу в терминале навсегда

В Bash полно скрытых возможностей. Вот семь из них — экономьте время каждый день.

Opendoas

Минимум кода — минимум багов

-5

Ещё один участник гонки — opendoas, наследник doas из OpenBSD. Суть та же: заменить sudo, но здесь во главу угла поставлен минимализм. Чем меньше строк кода, тем меньше риск, что внутри затаился баг или лазейка для хакера.

Для сравнения: у opendoas примерно 3000 строк кода, а у sudo — в десятки раз больше. Минимализм позволяет буквально за вечер просмотреть проект целиком, а значит уязвимости сложнее ускользнуть даже от среднестатистического разработчика.

Минус — разработка идёт очень неспешно: за последние годы изменений было немного. Может, проект и вправду почти идеален, а может просто активность чуть снизилась. Кстати, оригинальный doas обновлялся и в 2024 году.

Qubes OS

В Qubes sudo не нужен — и это революция!

В своё время Qubes OS буквально взорвала ИТ-сообщество, полностью убрав sudo. Отправная точка — максимально жёсткая изоляция процессов и личных данных, чтобы никакой взлом не привёл к беде.

В Qubes OS все ваши рабочие «домены безопасности» — это отдельные виртуальные машины: для банков, для работы, для интернета, для хобби. Файлы root вынесены в отдельную систему, которую невозможно заразить навсегда: после перезагрузки всё вновь идеально чисто, а внутри содержатся только системные файлы. Всё важное — от паролей до сессий браузера — хранится в вашей домашней папке. Поэтому хакеру даже не нужен root-доступ, чтобы украсть ваши данные: основной риск — не захват системы, а обмен между доменами безопасности. Здесь sudo просто ни при чём.

Проще говоря, sudo нужен для того, чтобы не дать взломщику навсегда изменить вашу систему. А в Qubes после перезагрузки всё откатывается, и уязвима лишь «песочница» пользователя. В любой другой ОС это тоже неизбежно.

Все три варианта хороши, но Qubes делает sudo ненужным навсегда

Run0 работает почти везде, где есть systemd — это большое преимущество. Но интерфейс пока далёк от идеала, и не все любят systemd, что может сдерживать рост популярности.

Перевести sudo на Rust — отличная идея, ведь Rust автоматически избавляет от многих «дыр» на уровне языка. Для критичных систем я бы доверил память только ему, хотя ярых фанатов C этим не переубедить — споры будут вечными.

Если бы выбирать идеальный инструмент, то взял бы от каждого по лучшему: минимализм opendoas, защиту памяти Rust и отказ от setuid. Такой микс сохранил бы дух open source!

Но большинство пользователей пока не планируют отказываться от sudo — привычка и инерция сильнее всего. Для многих sudo — просто раздражающий момент, а не жизненно важный компонент системы.

Впрочем, у меня на рабочем столе sudo давно запускается без пароля — и, может быть, вскоре мы увидим нечто совершенно иное, что перевернёт наши представления о безопасности root-доступа.

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в: