sudo und kernel capabilities

27/11/2009 - 03:40 von Hauke Laging | Report spam
Moinsen,

gibt es eigentlich eine Möglichkeit, statt der großen "alles
root"-Keule auch die feingranularen capabilities mit sudo zu nutzen?
Ich habe keine Hinweise darauf gefunden. Schade eigentlich, denn die
neueren Kernel unterstützen capabilities auch im Dateisystem. Nur
hilft das denjenigen, die mit Shellscripten arbeiten, vermutlich
wenig (ich gehe mal davon aus, dass Shellscripten capabilities
ebenso verweigert werden wie SUID).

Als Workaround wàre wohl schon ein Wrapper ausreichend, den man pro
Aufruf konfigurieren kann, welche capabilities er behàlt/wegwirft
und welches Programm er dann starten soll. Dann könnte man diesen
Aufruf mit in die sudoers schreiben (oder das über ein Wrapperscript
umbiegen).

Aus
Cmnd_Alias SYSINIT = /root/mein_script
würde dann
Cmnd_Alias SYSINIT = \
/sbin/capsconfig -I CAP_CHOWN,CAP_FOWNER /root/mein_script


Gibt es so was schon? Will das außer mir niemand? :-)


CU

Hauke


X-Post & F'up2 dcoulm
http://www.hauke-laging.de/ideen/
 

Lesen sie die antworten

#1 Thomas Bächler
27/11/2009 - 10:56 | Warnen spam
Hauke Laging schrieb:
Moinsen,

gibt es eigentlich eine Möglichkeit, statt der großen "alles
root"-Keule auch die feingranularen capabilities mit sudo zu nutzen?
Ich habe keine Hinweise darauf gefunden. Schade eigentlich, denn die
neueren Kernel unterstützen capabilities auch im Dateisystem. Nur
hilft das denjenigen, die mit Shellscripten arbeiten, vermutlich
wenig (ich gehe mal davon aus, dass Shellscripten capabilities
ebenso verweigert werden wie SUID).

Als Workaround wàre wohl schon ein Wrapper ausreichend, den man pro
Aufruf konfigurieren kann, welche capabilities er behàlt/wegwirft
und welches Programm er dann starten soll. Dann könnte man diesen
Aufruf mit in die sudoers schreiben (oder das über ein Wrapperscript
umbiegen).

Aus
Cmnd_Alias SYSINIT = /root/mein_script
würde dann
Cmnd_Alias SYSINIT = \
/sbin/capsconfig -I CAP_CHOWN,CAP_FOWNER /root/mein_script


Gibt es so was schon? Will das außer mir niemand? :-)



http://projects.archlinux.org/users...psudo.git/
Allerdings ist der Prozess ein wenig komplizierter: Nicht nur musst du
im Thread mittels obigem Tool die Capability setzen, sondern du musst
auch im Dateisystem dem Binary die entsprechenden inheritable und
effective caps geben.

Beispiel: Ausschnitt aus /etc/capsudoers:
[wireshark]
caps = cap_net_raw
command = /usr/bin/wireshark
allow_user_args = 1
users = thomas

Dann: setcap cap_net_raw=ei /usr/bin/dumpcap

Nun starte "capsudo wireshark" und benutze die capture-Funktionen von
Wireshark als User (an diesem Beispiel sieht man gut wie ich beim Aufruf
von wireshark die Capability setze, sie aber erst beim Aufruf von
dumpcap permitted+effective wird).

Das Tool ist noch nicht perfekt, Patches sind willkommen.

Ähnliche fragen