Ariadne Conillová, tvůrkyně hudebního přehrávače Audacious a kompozitního serveru Wayback, iniciátorka protokolu IRCv3 a vedoucí bezpečnostního týmu Alpine Linux, развивает инструментарий capsudo для выполнению команд с повышенными привилегиями. В отличие от sudo в новом проекте задействована модель предоставления полномочий на уровне отдельных объектов (object-capability). Код проекта написан на языке Си и распространяется под лицензией MIT.
Mezi nedostatky sudo, které se nová sada nástrojů snaží řešit, patří jeho dodávání jako spustitelného souboru s příznakem root suid; monolitická architektura bez oddělení privilegií (veškeré funkce sudo se spouští s root oprávněními); složitý, nehierarchický a nedeklarativní konfigurační formát; podpora pluginů běžících přímo v privilegovaném procesu; a nafouklá kódová základna s velkým potenciálem pro útok.
Místo použití monolitického nástroje sudo využívá capsudo tandem privilegovaného procesu na pozadí, capsudod, a neprivilegovaného nástroje capsudo. Komunikace mezi capsudod a capsudo probíhá prostřednictvím souboru socketu a privilegované provádění příkazů je určeno přístupovými právy socketu. Pouze uživatelé s přístupem k socketu mohou spouštět privilegované příkazy, které jsou k němu vázány. Nevýhodou tohoto přístupu je potřeba samostatného procesu na pozadí pro koordinaci provádění každé privilegované operace.
Například, aby administrátor udělil uživateli možnost spustit utilitu reboot se zvýšenými oprávněními, může vytvořit socket „reboot-capability“ v domovském adresáři uživatele, svázat jej s utilitou reboot a omezit přístup k zápisu do socketu požadovanému uživateli. Uživatel pak může spustit příkaz reboot spuštěním „capsudo -s reboot-capability“. # capsudod -s /home/user/reboot-capability reboot & # chown user:user /home/user/reboot-capability # chmod 700 /home/user/reboot-capability spusťte reboot pomocí příkazu: $ capsudo -s /home/user/reboot-capability
Chcete-li replikovat chování příkazu sudo a povolit libovolné aplikaci spuštění se zvýšenými oprávněními pro uživatele ve skupině wheel, můžete použít následující nastavení: # mkdir -p /run/cap # capsudod -s /run/cap/sudo-capability & # chgrp wheel /run/cap/sudo-capability # chmod 770 /run/cap/sudo-capability $ capsudo -s /run/cap/sudo-capability
Příklad nastavení pro privilegované spuštění příkazu /usr/sbin/mount /dev/sdb1: # capsudod -s /run/user/mountd/cap/mount-dev-sdb1 — /usr/sbin/mount /dev/sdb1 … nastavení přístupových práv k socketu /run/user/mountd/cap/mount-dev-sdb1 připojení /dev/sdb1 k /media/usb jako neprivilegovaný uživatel $ capsudo -s /run/user/mountd/cap/mount-dev-sdb1 — /media/usb
Zdroj: opennet.ru
