Linux Capabilities - ita - v2.1.5 - compatta

Embed Size (px)

Citation preview

1. Linux CapabilitesIndiceTitolo Pagine Titolo PagineIndice 1 Estrazione/Decodifica... 4Diritti 1 File di configurazione 2LC: cosa sono e... 3 Assegnazione delle cap. 10Il caso di ping 4 Stato di alcune distribuz. 7Quale LC per ping? 3 Problemi? 2Gestione delle LC 4 Ringraziamenti 1Altri esempi 10 2. DDiirriittttiiPresentazione di: Alessandro Selli Copyright 2014 Alessandro Selli.Si concede il permesso di effettuare copie, di distribuire e/o dimodificare di questo documento secondo quanto stabilito nella licenzaGNU Free Documentation License, versione 1.3 o successivapubblicata dalla Free Software Foundation, stante la presentediapositiva (numero 2) quale Sezione Invariante e nessun testo diprima o di quarta di copertina.Una copia della licenza disponibile in linea come pure pressol'autore.Versione 2.1.5, 2014/10/27 3. Linux Capabilites:cosa sono e fanno 1-3 Inizialmente implementavano POSIX: 1003.1e (API), "Protection, Audit andControl Interfaces" 1003.2c (Shell and Utilities), "Protectionand Control Interfaces"Detti infatti a volte Linux POSIX CapabilitiesUltima revisione di 1003.1e e 1003.2c nel 1997Nel 1999 sono stati dichiarati bozze ritirate Linux quindi andato per la sua strada 4. Linux Capabilites:cosa sono e fanno 2-3Vantaggi: Permettono la delega di diritti di superutente aprocessi non privilegiati, come il bit suid Sono registrati sul filesystem, come il bit suid Non funzionano sul principio o tutto o nulla,diversamente dal bit suidIn breve: permettono ad un processo di fare alcune cosecon i privilegi di root, ma null'altro 5. Linux Capabilites:cosa sono e fanno 3-3Svantaggi: I comandi necessitano di codice LC specifico Alcuni FS non supportano LC (NFS v.3, ma squashfs,tmpfs e f2fs adesso si):[root@debian ~]# getcap /mnt/nfs/nfsserver/dumpdatesFailed to get capabilities of file `/mnt/nfs/nfsserver/dumpdates'(Operation not supported)[root@debian ~]# I privilegi LC non sono ridotti come il SUID root Ma le recenti libcap-ng rendono facile farlo 6. IIll ccaassoo ddii ppiinngg 11--44 Un esempio classico: ping Ha bisogno dei diritti di superutente per inviarepacchetti ICMP di tipo echo-request Nessuno vorrebbe permettere a chiunque diprodurre pacchetti ICMP arbitrari! L'approccio tradizionale il seguente: 7. IIll ccaassoo ddii ppiinngg 22--44Situazione iniziale:[alessandro@ubuntu ~]$ lsb_release drcDescription: Ubuntu 14.04.1 LTSRelease: 14.04Codename: trusty[alessandro@ubuntu ~]$ ll /bin/pingrwsrxrx1 root root 44178 mag 7 23:51 /bin/ping[alessandro@ubuntu ~]$ ping c3 routeadd.netPING routeadd.net (195.182.210.166) 56(84) bytes of data.64 bytes from routeadd.net (195.182.210.166): icmp_seq=1 ttl=55 time=46.8 ms64 bytes from routeadd.net (195.182.210.166): icmp_seq=2 ttl=55 time=46.6 ms64 bytes from routeadd.net (195.182.210.166): icmp_seq=3 ttl=55 time=45.5 msrouteadd.net ping statistics 3packets transmitted, 3 received, 0% packet loss, time 2002msrtt min/avg/max/mdev = 45.549/46.329/46.829/0.558 ms[alessandro@ubuntu ~]$ 8. IIll ccaassoo ddii ppiinngg 33--44 Secondo gli standard i diritti del processo sonoquelli dell'utente che ha lanciato l'eseguibileNon del proprietario del file eseguibile! A meno che il bit suid bit non sia impostato.rwsrxrx1 root root 44178 mag 7 23:51 /bin/ping 9. IIll ccaassoo ddii ppiinngg 44--44Sabotiamo ping:[root@ubuntu ~]# chmod us/bin/ping[root@ubuntu ~]# ll /bin/pingrwxrxrx1 root root 44178 mag 7 23:51 /bin/ping[root@ubuntu ~]#Conseguenza:[alessandro@ubuntu ~]$ ping c3 routeadd.netping: icmp open socket: Operazione non permessa[alessandro@ubuntu ~]$Se non specificato diversamente, Ubuntu = Fedora. 10. QQuuaallee LLCC ppeerr ppiinngg?? 11--33 Vogliamo tanto i privilegi quanto la sicurezza Vogliamo poter creare socket ICMP senzaassumere tutti I privilegi di root! Come ci aiutano le Linux Capabilities? RTFM, ovviamente! man capabilities(7) Lista & informazioni pi aggiornate:linux/include/uapi/linux/capability.h 11. QQuuaallee LLCC ppeerr ppiinngg?? 22--33Ci sono molte capability tra cui scegliere:AUDIT_CONTROL AUDIT_WRITE BLOCK_SUSPEND CHOWN DAC_OVERRIDE DAC_READ_SEARCHCAP_LEASEFOWNER FSETID IPC_LOCK IPC_OWNER KILL LEASELINUX_IMMUTABLE MAC_ADMIN MAC_OVERRIDE MKNOD NET_ADMIN NET_BIND_SERVICEQuesta quella che ci serveNET_RAW SETGID SETFCAP SETPCAP SETUID SYS_ADMINSYS_BOOT SYS_CHROOT SYS_MODULE SYS_NICE SYS_PACCT SYS_PTRACESYS_RAWIO SYS_RESOURCE SYS_TIME SYS_TTY_CONFIG SYSLOG WAKE_ALARM 12. QQuuaallee LLCC ppeerr ppiinngg?? 22--33Ci sono molte capability tra cui scegliere:AUDIT_CONTROL AUDIT_WRITE BLOCK_SUSPEND CHOWN DAC_OVERRIDE DAC_READ_SEARCHCAP_LEASEIl CAP_ iniziale sato omesso nei nomiFOWNER FSETID IPC_LOCK IPC_OWNER KILL LEASELINUX_IMMUTABLE MAC_ADMIN MAC_OVERRIDE MKNOD NET_ADMIN NET_BIND_SERVICEQuesta quella che ci serveNET_RAW SETGID SETFCAP SETPCAP SETUID SYS_ADMINSYS_BOOT SYS_CHROOT SYS_MODULE SYS_NICE SYS_PACCT SYS_PTRACESYS_RAWIO SYS_RESOURCE SYS_TIME SYS_TTY_CONFIG SYSLOG WAKE_ALARM 13. QQuuaallee LLCC ppeerr ppiinngg?? 33--33Il manuale dice:CAP_NET_RAW* use RAW and PACKET sockets;* bind to any address for transparent proxying.Sembra quella che ci serve.Come la usiamo? 14. GGeessttiioonnee ddeellllee LLCC 11--44Le capability sono gestite con i comandi: getcap, mostra le capability dei file setcap, imposta le capability ai file getpcaps, mostra le cap. dei processi capsh, capability shell wrapperCiascuna capability pu essere associata ai set: p, al processo permessa la capability e, la capability resa effettiva i, la capab. ereditata dopo un execve() 15. GGeessttiioonnee ddeellllee LLCC 11--44Le capability sono gestite con i comandi: getcap, mostra le capability dei file setcap, imposta le capability ai file getpcaps, mostra le cap. dei processi capsh, capability shell wrapperCiascuna capability pu essere associata ai set: p, al processo permessa la capability e, la capability resa effettiva i, la capab. ereditata dopo un execve()Questa diventata un bit 16. GGeessttiioonnee ddeellllee LLCC 22--44Iniziamo ad usarle:[root@ubuntu ~]# chmod us/bin/ping[root@ubuntu ~]# ll /bin/pingrwxrxrx1 root root 44168 mag 7 23:51 /bin/ping*[root@ubuntu ~]# getcap /bin/ping[root@ubuntu ~]# setcap CAP_NET_RAW=ep /bin/pingMaiuscole o minuscoleSempre minuscole! 17. GGeessttiioonnee ddeellllee LLCC 22--44Iniziamo ad usarle:[root@ubuntu ~]# chmod us/bin/ping[root@ubuntu ~]# ll /bin/pingrwxrxrx1 root root 44168 mag 7 23:51 /bin/ping*[root@ubuntu ~]# getcap /bin/ping[root@ubuntu ~]# setcap CAP_NET_RAW=ep /bin/ping[root@ubuntu ~]# getcap /bin/ping/bin/ping = cap_net_raw+ep[root@ubuntu ~]#Questa notatione vabene anche per setcap 18. GGeessttiioonnee ddeellllee LLCC 33--44Funziona?[alessandro@ubuntu ~]$ ping c3 routeadd.netPING routeadd.net (195.182.210.166) 56(84) bytes of data.64 bytes from routeadd.net (195.182.210.166): icmp_seq=1 ttl=55 time=30.7 ms64 bytes from routeadd.net (195.182.210.166): icmp_seq=2 ttl=55 time=30.9 ms64 bytes from routeadd.net (195.182.210.166): icmp_seq=3 ttl=55 time=31.3 msrouteadd.net ping statistics 3packets transmitted, 3 received, 0% packet loss, time 2000msrtt min/avg/max/mdev = 30.709/30.988/31.350/0.304 ms[alessandro@ubuntu ~]$ 19. GGeessttiioonnee ddeellllee LLCC 44--44Da notare: le capability di ping in Fedora 20:[root@fedora ~]# getcap /bin/ping/bin/ping = cap_net_admin,cap_net_raw+ep[root@fedora ~]#CAP_NET_ADMIN contrassegna i pacchetti:[alessandro@fedora ~]$ ping c1m123 routeadd.netPING routeadd.net (195.182.210.166) 56(84) bytes of data.Warning: Failed to set mark 12364 bytes from routeadd.net (195.182.210.166): icmp_seq=1 ttl=53 time=45.8 msrouteadd.net ping statistics 1packets transmitted, 1 received, 0% packet loss, time 0msrtt min/avg/max/mdev = 45.802/45.802/45.802/0.000 ms[alessandro@fedora ~]$ 20. AAllttrrii eesseemmppii 11--1111Tutti conoscono gli Attributi Estesi POSIX, vero?VVeerroo??Se no, dovreste. Le LC sono utili, persino necessarie per usare gliAEP. 21. AAllttrrii eesseemmppii 22--1111AEP permettono di, ad es., impostare file:a:cui si possono solo aggiungere datii:immutabili (n sovrascrivibili n cancell.)S:eseguono scritture sincroneD:directory che eseguono scritture sincrone... (ce ne possono essere fino a 19)Capire quale filesystem supporta quali AEP equali no una vincita al lotto... 22. AAllttrrii eesseemmppii 33--1111C' per un inghippo: chattr non funziona per gli utenti ordinari:[alessandro@fedora ~]$ chattr +i .bashrcchattr: Operazione non permessa impostando i flag di.bashrc[alessandro@fedora ~]$ 23. AAllttrrii eesseemmppii 44--1111La soluzione classica UNIX di farlo SUID root:[root@fedora ~]# ll /usr/bin/chattrrwxrxrx1 root root 10528 giu 24 13:10 /usr/bin/chattr[root@fedora ~]# chmod u+s /usr/bin/chattr[root@fedora ~]# ll /usr/bin/chattrrwsrxrx1 root root 10528 giu 24 13:10 /usr/bin/chattr[root@fedora ~]#Funzionerebbe:[alessandro@fedora ~]$ chattr +i .bashrc[alessandro@fedora ~]$ lsattr .bashrcie.bashrc[alessandro@fedora ~]$ 24. AAllttrrii eesseemmppii 55--1111Per...[alessandro@fedora ~]$ lsattr ~games/.profilee/opt/games/.profile[alessandro@fedora ~]$ chattr +i ~games/.profile[alessandro@fedora ~]$ lsattr ~games/.profileie/usr/games/.profile[alessandro@fedora ~]$Il che normale per i privilegi di superutente.Decisamente non vogliamo che questo accada. 25. AAllttrrii eesseemmppii 66--1111Questa la cosa giusta da fare:[root@fedora ~]# chmod us/bin/chattr[root@fedora ~]# ll /bin/chattrrwxrxrx1 root root 10736 Aug 3 11:36 /bin/chattr[root@fedora ~]# setcap CAP_LINUX_IMMUTABLE=ep /bin/chattr[root@fedora ~]# getcap /bin/chattr/bin/chattr = cap_linux_immutable+ep[root@fedora ~]# 26. AAllttrrii eesseemmppii 77--1111Che fa succedere le cose giuste:[alessandro@fedora ~]$ lsattr .bashrce.bashrc[alessandro@fedora ~]$ chattr +i .bashrc[alessandro@fedora ~]$ lsattr .bashrcie.bashrc[alessandro@fedora ~]$ chattr +i ~games/.profilechattr: Operazione non permessa impostando i flag di/usr/games/.profile[alessandro@fedora ~]$ 27. "Mi spiace Dave, purtroppo nonposso farlo". 28. AAllttrrii eesseemmppii 88--1111DAC = Discretionary Access Control il meccanismo classico Unix per decidere chipu fare cosa Nel filesystem appare in forma dei diritti rwx Le LC possono incasinare anche loro! :-) 29. AAllttrrii eesseemmppii 99--1111Suoniamo il cicalino! (In un xterm)[alessandro@fedora ~]$ beep f2000 l100Could not open /dev/tty0 or /dev/vc/0 for writingopen: No such file or directory[alessandro@fedora ~]$Il manuale dice:Di default beep non installato con il bit suid impostato, farlofarebbe ridere. D'altra parte, renderlo suid root farebbe svaniremagicamente tutti i problemi con le chiamate ioctl, il che fapiacere, e la sola regione di non volerlo fare che ogniprogramma suid una potenziale falla di sicurezza. Per fortunabeep molto piccolo, ispezionarne il codice piuttosto facile. 30. AAllttrrii eesseemmppii 1100--1111Usiamo le LC invece. L'errore era:Could not open /dev/tty0 or /dev/vc/0 for writingOssia, un problema di DAC.[root@fedora ~]# setcap CAP_DAC_OVERRIDE=pe /bin/beep[root@fedora ~]#[alessandro@fedora ~]$ beep f2000 l100ioctl: Operation not permittedioctl: Operation not permitted[alessandro@fedora ~]$CAP_SYS_TTY_CONFIGUse vhangup(2); employ various privileged ioctl(2) operationson virtual terminals.Dalmanuale: 31. AAllttrrii eesseemmppii 1111--1111Tutte e due le capability insieme:[root@fedora ~]# setcap > CAP_DAC_OVERRIDE,CAP_SYS_TTY_CONFIG=pe /bin/beep[root@fedora ~]#[alessandro@fedora ~]$ beep f2000 l100[alessandro@fedora ~]$ 32. "Va bene Dave, credo di avercapito come fare questo" 33. Estrazione/Decodifica informazioni1-4Quali LC sono attive adesso?[root@ubuntu ~]# cp /bin/bash /tmp/[root@ubuntu ~]# setcap CAP_KILL,CAP_DAC_OVERRIDE+epi /tmp/bash[root@ubuntu ~]# getcap /tmp/bash/tmp/bash = cap_dac_override,cap_kill+eip[root@ubuntu ~]#Ereditariet impostata[alessandro@ubuntu ~]$ /tmp/bash l[alessandro@ubuntu ~]$ getpcaps $$Capabilities for `15400': = cap_dac_override,cap_kill+ep[alessandro@ubuntu ~]$ grep ^Cap /proc/$$/statusCapInh: 0000000000000000CapPrm: 0000000000000022CapEff: 0000000000000022CapBnd: 0000001fffffffff[alessandro@ubuntu ~]$Ereditariet assente! 34. Estrazione/Decodifica informazioni2-4Decodifica della mappa di bit esadecimale LC:[alessandro@ubuntu ~]$ grep ^Cap /proc/$$/statusCapInh: 0000000000000000CapPrm: 0000000000000022Rappresentata ancoraCapEff: 0000000000000022come un setCapBnd: 0000001fffffffff[alessandro@ubuntu ~]$ capsh decode=00000000000000000x0000000000000000=[alessandro@ubuntu ~]$ capsh decode=00000000000000220x0000000000000022=cap_dac_override,cap_kill[alessandro@ubuntu ~]$ 35. Estrazione/Decodifica informazioni3-40000001fffffffff = Capability Bounding Set1 = cap permessa (mantenuta se presente)0 = cap mascherata (o nessuna LC associata al bit)I bit sono mappati uno-ad-uno alle LC0000001fffffffff una maschera a 64-bit un campo a 64 bit dalla libcap versione 2.03 Prima era a 32 bit 36. Estrazione/Decodifica informazioni4-4Il numero delle capability mappate consistentecon il valore del conteggio da zero manteutoin /proc/sys/kernel/cap_last_capKernel 3.14.19:1fffffffff 1+9*4=37/proc/sys/kernel/cap_last_cap = 36Kernel 3.16.3: 3fffffffff 2+9*4=38/proc/sys/kernel/cap_last_cap = 37 37. FFiillee ddii ccoonnffiigguurraazziioonnee 11--22capability.conf1: utenti che ereditano le LC[root@ubuntu ~]# cat /etc/security/capability.confcap_kill alessandronone *[root@ubuntu ~]#Se assente tutti gli utenti avrannoereditabili tutte le capability!Le modifiche hanno effetto dopo un nuovo login:Ubuntu 14.04.1 LTS ubuntu tty1CAP_KILL adesso ereditabileubuntu login: alessandroPassword:[alessandro@ubuntu ~]$ getpcaps $$Capabilities for `8586': = cap_kill+i[alessandro@ubuntu ~]$ 38. FFiillee ddii ccoonnffiigguurraazziioonnee 22--22Il processo figlio della nuova shell eredita le LC:[alessandro@ubuntu ~]$ getpcaps $$Capabilities for `16332': = cap_kill+i[alessandro@ubuntu ~]$ getcap /tmp/bash/tmp/bash = cap_dac_override,cap_kill+eip[alessandro@ubuntu ~]$ /tmp/bash l[alessandro@ubuntu ~]$ getpcaps $$Capabilities for `16849': = cap_kill+eip cap_dac_override+ep[alessandro@ubuntu ~]$Cap presente nel filedi configurazioneCap assente nel file diconfigurazione1) Serve il pacchetto Ubuntu libpam-cap. Fedora ha quello libcap, maqueste operazioni falliscono (PAM failure: System error) 39. Assegnazione ddeellllee ccaappaabbiilliittyy 11--11002.2.11 2.6.25 opzionaleBounding-set di sistema Bounding-set per thread2.6.33 integrato Prima del 2.6.25 Bounding Set era di sistema Dal 2.6.25 per thread Dismesso da processo dotato di CAP_SETPCAPcon operazione prctl(2) PR_CAPBSET_DROP Ereditato in fork(2), mantenuto dopo execve(2) Opzionale dal 2.6.33, da allora integrato 40. Assegnazione ddeellllee ccaappaabbiilliittyy 22--1100N Nuovo P Precedente F Cap. impostata nel Filee capabilityEffettiva p Capability Permessa i Capability ereditataCBS Capability Bounding Set1Le nuove capability erano calcolate cos:Np (PiFi)(FpCBS)Ne FeNpNi Pi1) Maschera delle capability permesse mantenute dopo execve(2). Nessun effetto su quelle ereditate.Dal kernel 2.6.25 limita quelle ereditate che possono essere aggiunte a se stessi anche se permesse. 41. Assegnazione ddeellllee ccaappaabbiilliittyy 33--1100N Nuovo P Precedente F Cap. impostata nel Filee capabilityEffettiva p Capability Permessa i Capability ereditataCBS Capability Bounding Set1Adesso sono calcolate cos:Np (PiFi)(FpCBS)Ne Fe ? Np : 02Ni Pi2) Non pi un AND perch il set Effettivo un bit, non pi un set (un bit per capability). 42. Assegnazione ddeellllee ccaappaabbiilliittyy 44--1100Cosa fa il Capability Bounding Set?1) In un execve(2) toglie al thread lecapability permesse con un AND cap file.2) Limita le cap ereditabili del thread chepossono essere aggiunte con un capset(2)(kernel >= 2.6.25). Per:a) la capability pu essere ancora permessa;b)la cap pu essere ancora impostata se nel set ereditabile del file. 43. Assegnazione ddeellllee ccaappaabbiilliittyy 55--1100Potenziale rischio: cap accidentalmente permesse.Si consideri la situazione:1) processo genitore: CAP_X ered., non in CBS2)CAP_X non sar nel set permessoa) ma rimane nel set ereditato dei figli3) Il processo pu eseguire figlio con CAP_Xnei set sia permesso che ereditato!Togliere cap da CBS pu dare un falso senso disicurezza! Da solo non basta! 44. Assegnazione ddeellllee ccaappaabbiilliittyy 66--1100Come per SUID, le LC degli script sono ignorati:[alessandro@ubuntu ~]$ cat ~/bin/test_cap.sh#!/bin/dashgetpcaps $$grep ^Cap /proc/$$/status[alessandro@ubuntu ~]$ getcap ~/bin/test_cap.sh/home/alessandro/bin/test_cap.sh = cap_linux_immutable+ep[alessandro@ubuntu ~]$ test_cap.shCapabilities for `9093': =IgnorataCapInh: 0000000000000000CapPrm: 0000000000000000CapEff: 0000000000000000IgnorataCapBnd: 0000001fffffffff[alessandro@ubuntu ~]$ 45. Assegnazione ddeellllee ccaappaabbiilliittyy 77--1100Solo le LC degli eseguibili binari fanno testo:[alessandro@ubuntu ~]$ cat ~/bin/test2_cap.sh#!/tmp/dashgetpcaps $$grep ^Cap /proc/$$/status[alessandro@ubuntu ~]$ getcap ~/bin/test2_cap.sh /tmp/dash/tmp/dash = cap_linux_immutable+ep[alessandro@ubuntu ~]$ test2_cap.shCapabilities for `9218': = cap_linux_immutable+epCapInh: 0000000000000000CapPrm: 0000000000000200CapEff: 0000000000000200Presente PresenteCapBnd: 0000001fffffffff[alessandro@ubuntu ~]$ 46. Assegnazione ddeellllee ccaappaabbiilliittyy 88--1100capsh pu ridurre le CBS della shell:[alessandro@ubuntu ~]$ getcap $(which capsh)/sbin/capsh = cap_setpcap+p[alessandro@ubuntu ~]$ grep ^Cap /proc/$$/statusCapInh: 0000000000000000CapPrm: 0000000000000000CapEff: 0000000000000000CapBnd: 0000001fffffffff[alessandro@ubuntu ~]$ capsh drop=cap_net_raw [alessandro@ubuntu ~]$ grep ^Cap /proc/$$/statusCapInh: 0000000000000000CapPrm: 0000000000000000CapEff: 0000000000000000CapBnd: 0000001fffffdfff[alessandro@ubuntu ~]$ 47. Assegnazione ddeellllee ccaappaabbiilliittyy 99--1100Riduzione CBS con capsh. Situazione iniziale:[alessandro@ubuntu ~]$ getcap $(which capsh ping)/sbin/capsh = cap_setpcap+p/bin/ping = cap_net_raw+p[alessandro@ubuntu ~]$ getpcaps $$Capabilities for `7842': =[alessandro@ubuntu ~]$ ping qc1routeadd.netPING routeadd.net (195.182.210.166) 56(84) bytes of data.routeadd.net ping statistics 1packets transmitted, 1 received, 0% packet loss, time 0msrtt min/avg/max/mdev = 27.718/27.718/27.718/0.000 ms[alessandro@ubuntu ~]$ 48. Assegnazione ddeellllee ccaappaabbiilliittyy 1100--1100Esecuzione shell con CBS ridotte via capsh:[alessandro@ubuntu ~]$ capsh drop=cap_net_raw [alessandro@ubuntu ~]$ grep ^Cap /proc/$$/statusCapInh: 0000000000000000CapPrm: 0000000000000000!CapEff: 0000000000000000CapBnd: 0000001fffffdfff[alessandro@ubuntu ~]$ capsh decode=20000x0000000000002000=cap_net_raw[alessandro@ubuntu ~]$ ping qc1routeadd.netping: icmp open socket: Operation not permitted[alessandro@ubuntu ~]$ 49. SSttaattoo ddii aallccuunnee ddiissttrriibbuuzziioonnii 11--77Lo scopo di sostituire ovunque possibile aglieseguibili i bit SUID/SGID con le capability: Fedora: ultimo aggiornamento: 2011-04-05,completato: 100% (molti, non tutti, i SUIDtolti) Ubuntu: lavori in corso (ultimo aggiornamento:2011-09-27)Non ancora possibile sostituire tutti i SUID conle Linux Capabilities 50. SSttaattoo ddii aallccuunnee ddiissttrriibbuuzziioonnii 22--77Fedora 20 (Heisenbug): un paio di dozzine di filesuid (in un'installazione LXDE non-standard)# find / xdevtypef perm/111 perm/4000 userroot | wc l23#/usr/sbin/mount.nfs /usr/bin/mount /usr/bin/chsh /usr/bin/write/usr/bin/fusermount /usr/bin/umount /usr/bin/chage /usr/bin/passwd/usr/bin/newgrp /usr/bin/locate /usr/bin/su /usr/bin/sudo/usr/bin/gpasswd /usr/bin/cgexec /usr/bin/chfn /usr/bin/Xorg/usr/bin/sshagent/usr/bin/crontab /usr/bin/at /usr/bin/ksu/usr/sbin/postqueue /usr/sbin/postdrop /usr/sbin/ssmtp /usr/bin/pkexec 51. SSttaattoo ddii aallccuunnee ddiissttrriibbuuzziioonnii 33--77Ubuntu 14.04.1 (Trusty Tahr): alcune di pi(ancora in un'installazione XFCE non-standard)# find / /usr xdevtypef perm/111 perm/4000 userroot | wc l29#Erano 34 in 13.10 (Saucy Salamander) 52. Stato ddii aallccuunnee ddiissttrriibbuuzziioonnii 44--77Vediamo un caso in cui le LC non funzionano:[alessandro@fedora ~]$ ll /usr/bin/atrwsrxrx1 root root 53208 5 dic 12.34 /usr/bin/at[alessandro@fedora ~]$ getcap /usr/bin/at[alessandro@fedora ~]$Togliamo il bit SUID e qualsiasi capability:[root@fedora ~]# chmod us/usr/bin/at[root@fedora ~]# setcap r/usr/bin/at[root@fedora ~]#[alessandro@fedora ~]$ at f~/bin/at.sh now+5mincannot set egid: Operation not permitted[alessandro@fedora ~]$ 53. Stato ddii aallccuunnee ddiissttrriibbuuzziioonnii 55--77Cerchiamo di farlo felice:[root@fedora ~]# setcap CAP_SETGID+ep /usr/bin/at[root@fedora ~]#Nessuna fortuna:[alessandro@fedora ~]$ at f~/bin/at.sh now+5mincannot set euid: Operation not permitted[alessandro@fedora ~]$[root@fedora ~]# setcap CAP_SETUID,CAP_SETGID+ep /usr/bin/at[root@fedora ~]#[alessandro@fedora ~]$ at f~/bin/at.sh now+5minPAM failure: System error[alessandro@fedora ~]$ :( 54. Stato ddii aallccuunnee ddiissttrriibbuuzziioonnii 66--77Nel file di log compare:[alessandro@fedora ~]$ tail 1/var/log/secureFeb 23 10:08:43 fedora at: PAM audit_log_acct_message()failed: Operation not permitted[alessandro@fedora ~]$Nulla da fare, per ora. 55. Stato ddii aallccuunnee ddiissttrriibbuuzziioonnii 77--77Ubuntu ha seguito una strada diversa: usa la stessa implementazione di at/atd (diThomas Koenig, [email protected]) il demone gira come utente daemon l'eseguibile del client SUID e SGUIdaemon:daemon, il che gli permette di: scrivere in /var/spool/cron/atjobs/.SEQ mandare segnali ad atdVecchia scuola, semplice, efficace, sicuro. 56. PPrroobblleemmii?? 11--22Perch cos poche persone conoscono e usanole capability? Credo che la documentazionescarsa sia la ragione principale. Per esempio,la Fedora 10 non ha le pagine man digetpcaps, capsh e pam_cap, e la Guidaalla Sicurezza di Fedora neppure nomina lecapability(Finnbarr P. Murphy, 28 maggio 2009 )Tutto vero ancora oggi! 57. PPrroobblleemmii?? 22--22Documentazione online distrib. ferma da anni La Guida alla Sicurezza di Fedora nelle stessecondizioni alla vers. 19.1, e manca nella 20Ma almeno le pagine man ci sono Nel suo futuro solo SELinux? Il comportamento delle LC cambiato Gli stessi comandi, capability e set hannoeffetti diversi rispetto a 2.6.24 senza errori libcap-ng rende la programmazione pi facile 58. RRiinnggrraazziiaammeennttii 11--11 Quelli del progetto Linux man-pages (https://www.kernel.org/doc/man-pages/) Finnbarr P. Murphy (post di blog e riferimenti,utile anche se superato) E gli sviluppatori del kernel, naturalmente! Andrew G. Morgan Alexander Kjeldaas concontributi di Aleph1, Roland Buresund e AndrewMain.