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

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


MarvinD
Если что-то в процессе разработки, то, пожалуй, лучше подождать. А сама идея неплохая — запрос доступа на выполнение операции. Но «поворот двух ключей» все же подразумевает другое — не родительский контроль, а одновременное совпадение двух условий для чего-то. Например, с помощью одноразовых паролей с приложения на смартфоне подтвердить выполнение команды.
Это было бы неплохо — например, выполнение команды rm от рута. Или даже так — если та же команда rm затрагивает файл в /etc, /usr и т.п., например. Т.е. ставишь в соответствие «команда — директория — необходимость доп. подтверждения»:
rm /etc/* require
mv /usr/* require
Но это надо только для интерактивных сеансов! А как быть со скриптами тогда? Exeption вызывать, если в «запретную область» влезть? Так можно и работу системы нарушить. Это всего-то моя фантазия, но именно поэтому ничего такого на стадии «в процессе разработки» я бы себе никуда не ставил бы.