Кнопка VPN требует sudo: ограничьте правило, проверьте политику
Кнопка на рабочем столе — не повод давать root без пароля. Проверьте, справится ли менеджер сети сам, ограничьте одну команду, затем проверьте всю политику sudo.
Кнопка VPN работает у администратора и не работает у всех остальных, поэтому кто-то добавляет строку в sudoers. Эта строка обычно живёт дольше проблемы, ради которой её добавили, и часто даёт больше, чем нужно кнопке. Прежде чем править политику, проверьте, может ли поддерживаемый владелец соединения уже выполнить работу. Три условия ниже решают, участвует ли sudo вообще.
Условие 1: поддерживаемый владелец может сделать это без sudo
На большинстве рабочих столов Linux менеджер сети уже владеет VPN-соединениями, и его авторизация идёт через polkit, а не через sudo. Пользователь, которому разрешено поднять соединение, может сделать это из командной строки без всякого правила root. Проверьте, что разрешает менеджер, прежде чем предполагать, что кнопке нужны привилегии. Если ответ да, то изменение в sudoers решает проблему, которой нет.
nmcli connection show
nmcli connection up "Work VPN"
Если менеджер отказывает, прочитайте почему: нет правила polkit, соединение принадлежит другому пользователю или профиль хранится там, где пользователь не может его прочитать. У каждого из этих случаев есть поддерживаемое решение, более узкое, чем правило sudo. Повышение привилегий — последнее средство, а не первое.
Условие 2: правило называет один исполняемый файл и его аргументы
Если sudo действительно нужен, правило должно называть точную команду и, где возможно, аргументы, которые ей разрешено использовать. Правило, позволяющее пользователю запускать скрипт-обёртку, безопасно ровно настолько, насколько безопасны права этого скрипта, потому что пользователь может изменить то, что выполнит root. Правило с шаблоном после команды — та же проблема в более короткой форме.
sudo -l -U alice
ls -l /usr/local/sbin/vpn-up
Проверьте каждый путь в цепочке команды: бинарный файл, вызываемый им скрипт, читаемый им файл конфигурации и любой каталог между ними. Если любой из них доступен пользователю на запись, ограниченное правило фактически даёт неограниченный root. Аргументы тоже важны: команду, принимающую путь к конфигурации, можно направить на файл, который контролирует пользователь. Пишите правило для операции, а не для кнопки.
Остановитесь, если команде для работы нужен файл, контролируемый пользователем. Тогда проект неверен, и никакой синтаксис sudoers не сделает его безопасным.
Условие 3: разбирается вся политика, а не только ваша строка
Проверяйте редактором, который блокирует файл и проверяет синтаксис, и проверяйте собранную политику, а не фрагмент. Файл, который разбирается сам по себе, всё равно может нарушить порядок включения или продублировать правило так, что изменится поведение.руководство visudo описывает и блокирующий редактор, и используемый здесь режим только проверки.
sudo visudo -c
sudo visudo -cf /etc/sudoers.d/vpn-launcher
Проверка сообщает файл и строку при сбое, и именно этот отчёт и есть полезная часть. Исправляйте задуманное изменение через редактор, а не сохраняйте насильно известную ошибку, потому что сломанная политика может разом отрезать всех администраторов. Файлам в каталоге включения тоже нужны владелец и режим, которых требует руководство, иначе их проигнорируют или отклонят. Синтаксис — лишь первые ворота: после их прохождения перечитайте правило и спросите, что оно на самом деле разрешает.
Остановитесь, если единственный способ заставить изменение работать — отключить проверку синтаксиса. Это не политика, это простой, ждущий перезагрузки.
Восстановление: сохраните сеанс, который ещё работает
Перед сохранением убедитесь, что авторизованный административный сеанс уже открыт и что существует второй путь в машину. Ошибка в sudoers может лишить вас возможности её исправить, а кнопка на рабочем столе не стоит такого риска. Если sudo уже сломан, используйте документированный путь восстановления системы, а не изобретайте свой.
sudo -n true
id
Альтернативы вроде pkexec зависят от собственной установки и политики, поэтому не являются гарантированным вторым запросом root. Держите локальную авторизацию отдельно и от выдачи секрета VPN: правило sudo не разблокирует отсутствующий агент секретов и не удовлетворяет MFA шлюза. После исправления проверьте обычную учётную запись, выполняющую только задуманную операцию, затем пользуйтесь обычными средствами менеджера.
Решение заканчивается, когда вы можете сказать, какое условие оправдало sudo, что называет правило, что вся политика разбирается и как вы восстановились бы, если нет. Привилегированный запускатель, который стоит вам административного доступа, — плохая сделка, и обычно её можно избежать.