Come interpretare le regole di autorizzazione booleane di SELinux?

1

Sto cercando di capire quali permessi sono consentiti da alcuni dei booleani di SELinux per il dominio httpd, poiché è la mia principale fonte di preoccupazione e l'attuale politica della mia organizzazione è di dare veramente il minimo privilegio richiesto per ottenere un applicazione funzionante.

Leggendo con sesearch cosa fanno alcuni booleani, è chiaro che non ne ho davvero bisogno, quindi li abbiamo disabilitati. Ad esempio, non abbiamo bisogno che nginx sia in grado di connettersi alle porte squid, ftp, gopher e memcache, tra le altre cose il permesso booleano httpd_can_network_relay , perché passiamo le nostre richieste tramite socket. Booleano httpd_can_network_connect è troppo ampio per noi, poiché l'unica porta di cui abbiamo bisogno è aperta, è già etichettata per i redis e abbiamo un modulo di policy molto facile da capire per questo: link

Ho faticato un po 'a far funzionare alcuni script PHP, anche dopo aver etichettato attentamente alcuni percorsi pubblici, al fine di consentire solo le scritture dalla webapp su upload e cache per le directory captchas, ma non lasciare magicamente quell'aggiornamento da solo o scaricare da script di terze parti che potrebbero essere eseguiti. Inoltre, è sufficiente consentire l'esecuzione di script in percorsi specifici.

Ho già realizzato questo obiettivo e le persone esterne all'IT stanno lavorando senza lamentarsi, ma non riesco ancora a capire completamente ciò che i booleani che ho dovuto abilitare stanno permettendo, perché le pagine man sono utile per abilitare rapidamente qualcosa ma non capire come funziona magic . E l'output di sesearch è troppo confuso.

Ad esempio: sesearch -AC -b httpd_anon_write indica che solo le scritture in public_content_rw_t sono etichettate, ma non capisco perché non ha funzionato con httpd_sys_content_rw_t .

Ma l'output di booleans httpd_unified e httpd_builtin_scripting è in conflitto, e sono francamente preoccupato di consentire senza troppe cose. Specialmente sugli oggetti con httpd_sys_rw_content_t non sono riuscito a far funzionare le scritture senza abilitare entrambi i booleani e non ho attivato httpd_enable_cgi perché le autorizzazioni sembrano essere larghe per me. Guarda la parte più confusa:

DT allow httpd_t httpd_sys_rw_content_t : file { ioctl read write create getattr setattr lock append unlink link rename open } ; [ httpd_enable_cgi httpd_unified && httpd_builtin_scripting && ]

ET allow httpd_t httpd_sys_rw_content_t : file { ioctl read write create getattr setattr lock append unlink link rename open } ; [ httpd_builtin_scripting ]

Forse è che non capisco dove è il AND e se c'è un OR , ma non capisco perché tutte le operazioni siano consentite secondo la precedente regola , abilitando solo httpd_builtin_scripting , e perché secondo la prima regola, deve essere abilitato lo stesso booleano, AND httpd_unified AND httpd_enable_cgi .

Onestamente sarei più che felice di non dipendere da nessun booleano che permetta più di quello che è strettamente necessario, ecco perché sarei grato di ottenere una mano aiutandomi a capire la sintassi dei booleani necessari per una regola essere abilitato.

FWIW, la webapp che sto proteggendo è basata su WordPress, e le esercitazioni in giro dipendono dai booleani senza spiegare perché sono necessari e quali rischi introducono. La mia organizzazione ha un brutto disgusto per gli aggiornamenti automatici anche per le interruzioni di compatibilità.

    
posta Jesús Franco 02.11.2017 - 01:17
fonte

1 risposta

1

Qual è esattamente la tua domanda?

Fondamentalmente quello che penso sesearch sta cercando di dirti è che hai due opzioni se vuoi consentire ai processi associati al tipo httpd_t di "leggere scrivere" httpd_sys_rw_content_t tipo "file" associati

O puoi impostare questi tre:

  • link
  • link
  • link

O imposti questo:

  • link

Che ovviamente non sembra ha senso dal momento che il primo è un super set di quest'ultimo. L'autore della politica potrebbe o non aver fatto un errore lì.

L'ex set di booleans può avere le stesse regole del secondo booleano come parte di permessi più ampi. La tua query era abbastanza ristretta e quindi corrispondeva a entrambi gli scenari

Potresti usare sesearch per vedere quali regole sono associate a ciascuno dei booleani e quindi determinare se l'impostazione dei primi tre o l'impostazione di quest'ultimo è a tuo favore

Certo che questo sembra non essere molto intuitivo, ma sesearch ti dà informazioni accurate e al punto.

Il criterio del server web usato comunemente dalle distribuzioni mira a essere una politica generale, e questo lo rende piuttosto complesso e introduce alcuni trade-off. Esistono molti modi diversi per utilizzare i server Web. I booleani ei tipi offrono una certa flessibilità, ma se si desidera avere una politica adeguata alle proprie esigenze, è sempre possibile scegliere di scrivere la propria politica per il proprio server web. Sfortunatamente potrebbe non essere così semplice come dovrebbe essere, ma è possibile.

Per quanto riguarda il motivo per cui le cose "non hanno funzionato per te", dovrei vedere alcuni diniegati AVC per essere in grado di interpretare gli eventi e suggerire soluzioni.

    
risposta data 02.11.2017 - 11:52
fonte

Leggi altre domande sui tag