Бутонът на 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, какво назовава правилото, че цялата политика се разбира и как бихте я възстановили, ако не се. Привилегирован стартер, който ви струва административния достъп, е лоша сделка и обикновено е избежима.