[Перевод] Кунг-фу стиля Linux: sudo и поворот двух ключей

Если вы работали в современных Linux-системах, включая большинство ОС для Raspberry Pi, то вы, возможно, знакомы с командой sudo. Обычно она позволяет авторизованному пользователю повышать свои полномочия до уровня суперпользователя и решать в таком режиме различные задачи, требующие соответствующих привилегий.

Правда, тут есть одна проблема. Если у вас есть sudo-доступ к системе, то это значит, что вы сможете сделать с ней всё что угодно — по крайней мере, всё, что вам позволено в файле sudoers. А как насчёт операций, ошибка при выполнении которых способна серьёзно нарушить работу системы? Все видели фильмы, в которых для запуска ядерной ракеты нужен одновременный поворот двух ключей, за которым следует нажатие на кнопку «Пуск». Есть ли нечто подобное в Linux?

-mbogielinkquwyxgyneys-mzwi.jpeg

В Linux есть похожий механизм, но это, на самом деле, не совсем «поворот двух ключей». Речь идёт о проекте sudo_pair, работой над которым занимается компания Square. Это — плагин для sudo, который даёт нам похожие возможности. А именно, речь идёт о том, что один пользователь запрашивает выполнение некоего действия, требующего повышенных привилегий, а другой пользователь авторизует запрос. Причём этот второй пользователь может не только одобрить выполнение операции, но и понаблюдать за тем, что происходит, и даже отменить операцию в том случае, если увидит, что происходит что-то неправильное.
Команда sudo, на самом деле, устроена сложнее, чем полагает большинство Linux-пользователей. Если вы читали справку по ней, то вы знаете о том, что можно настроить её так, чтобы у неких пользователей или групп пользователей были бы права лишь на выполнение определённых операций. Причина того, что о возможностях настройки sudo знают немногие, заключается в том, что этими возможностями пользуются нечасто. Например, можно сделать так, чтобы некая программа всегда, запущенная любым пользователем (или любым пользователем из некоей группы), выполнялась бы с root-привилегиями. При этом всем пользователям необязательно давать полный доступ к другим возможностям системы. Это значит, что sudo-pair необязательно использовать для организации полного root-доступа к системе. Утилиту можно использовать для наблюдения за использованием особых, очень важных, приложений.

Легче всего разобраться в том, что происходит, можно, посмотрев на следующее анимированное изображение, на котором представлены экраны двух пользователей. Один запрашивает выполнение sudo-операции, а второй этот запрос одобряет (чтобы лучше всё увидеть — откройте изображение в отдельной вкладке).

9e5d998d2dd829328c0dac733a784837.gif


Экраны двух пользователей, один из которых запрашивает выполнение операции, а второй — одобряет запрос

Это — очень гибкая система, но она пока находится в процессе разработки, поэтому перед её настройкой стоит почитать README. Скрипт следит за тем, чтобы пользователь не мог бы сам одобрять собственные sudo-запросы, он поддерживает и другие возможности. Это ведёт к известной проблеме курицы и яйца. Скрипт нужно защитить, но у пользователей обязательно должна быть возможность его выполнять. Система позволяет запускать скрипт в текущем сеансе без привлечения второго пользователя. Есть различные подходы к работе с пользователями, на которых не накладываются ограничения по работе с sudo. Например, от ограничений могут быть избавлены пользователи, входящие в группу дежурных администраторов. Кроме того, ограничения никогда не налагаются на пользователя root. Но при этом надо следить за тем, чтобы в системе было бы не слишком много пользователей с полным root-доступом к ней. Это, конечно, справедливо для тех случаев, когда речь идёт о системе, в которой такие ограничения оправданы.

Код sudo_pair написан на Rust, там пока нет никаких предустановок. Это подходит для случаев, когда есть некая рабочая среда, пользователи, имеющиеся в которой, заняты какими-то очень важными делами. Но полагаю, что для продакшн-использования этот проект пока не готов. В частности, как предупреждают разработчики проекта, неправильная настройка sudo может привести к невозможности входа в систему. Поэтому действуйте осторожно (и я надеюсь на то, что у вас есть свежая резервная копия ваших данных).

Если ваша система решает какие-то очень важные задачи, то вам необходимо в деталях разобраться с sudo и научиться настраивать эту команду с использованием или без использования sudo-pair. Можно ограничить выполнение неких операций на уровне отдельных пользователей или групп. Но почти ни у кого не должно быть полного root-доступа к системе. Это справедливо даже в том случае, если речь идёт о системе, основанной на Raspberry Pi, в которой вы — единственный пользователь. Если такая система управляет чем-то важным, то вам нужно сделать так, чтобы хакеру, который, возможно, её взломает, пришлось бы пробиться через несколько паролей для того чтобы получить над ней контроль. В подобной ситуации можно даже подумать о многофакторной аутентификации. Нечто похожее, хоть кому-то это и может показаться странным, можно сделать и для Arduino.

Приходилось ли вам настраивать sudo?

8xzqbhb0at3_pjylb5c4366w_t8.png

oug5kh6sjydt9llengsiebnp40w.png

© Habrahabr.ru