Consentire l'accesso a una directory solo per determinate applicazioni

3

Vorrei limitare un accesso a una directory. Ad esempio, sul mio sistema esiste la directory ~/.thunderbird che contiene impostazioni, lettere, cache, ecc. Del client di posta Thunderbird . Ovviamente, altre applicazioni non hanno bisogno del contenuto di questa cartella. E altre applicazioni non dovrebbero accedere alla cartella non a causa della sicurezza ma solo per motivi di sicurezza (ad esempio, il comportamento "pazzo" di qualche altra applicazione causata da un bug o un errore nello script della mia shell non dovrebbe influire sul contenuto di Thunderbird directory.)

Non posso usare il bit setuid sull'eseguibile Thunderbird (ad esempio /usr/bin/thunderbird ). Poiché il set di setuid è impostato, non accedo ai file normali creati da Thunderbird (ad esempio, gli allegati scaricati).

C'è una soluzione alternativa con il bit setgid sull'eseguibile Thunderbird (gli allegati scaricati avranno thunderbird group mentre il proprietario sarà me). Ma in questo modo non è sicuro (perché il proprietario sarà me stesso, quindi posso cancellare accidentalmente qualcosa da ~/.thunderbird ).

In ogni caso, l'approccio con setuid / setgid è inaffidabile e fragile (ad esempio, dopo che Thunderbird è stato rimosso e installato di nuovo, i bit saranno non presente sulla nuova istanza di /usr/bin/thunderbird eseguibile).

chroot non è una soluzione perché Thunderbird richiede l'accesso non solo alla sua directory home anche alle librerie condivise.

Ho anche esaminato AppArmor. Sì, posso impostare restrizioni su Thunderbird . Ma sembra impossibile scrivere una regola che neghi un accesso a ~/.thunderbird per tutti gli eseguibili ad eccezione di /usr/bin/thunderbird .

Forse, l'obiettivo può essere raggiunto tramite SELinux . Ma per me è troppo complesso per ora. Ed è superfluo: potrebbe esserci un modo più semplice.

Potresti aiutarmi e indicare lo strumento (o il modulo del kernel) che può consentire l'accesso a una directory per una determinata applicazione e negare l'accesso a tutte le altre applicazioni?

PS La mia distro è LinuxMint 17.1 32bit .

    
posta flaz14 24.05.2017 - 17:14
fonte

3 risposte

1

Per questo hai considerato di usare una soluzione di containerizzazione come Docker per avere una versione isolata di Thunderbird?

Esistono alcuni esempi esistenti come questo .

Docker risolve il problema delle librerie condivise che hai identificato nella sezione chroot della tua domanda raggruppando tutte le dipendenze all'interno del contenitore e potresti limitare le autorizzazioni alle directory montate nel container.

Un avvertimento a questo approccio è che dovresti assicurarti che gli altri utenti del sistema che non vuoi leggere i dati non siano in grado di eseguire i comandi docker (quindi non aggiungerli al gruppo docker se usarlo) in quanto potrebbero quindi accedere ai dati.

    
risposta data 24.05.2017 - 18:35
fonte
1

Ciò che pensi ovvio non è per me:

Obviously, other applications don't need the content of this folder. And other applications should not access the folder not because of security but just because of safety.

Bene, e l'applicazione di backup? Non dovrebbe essere in grado di eseguire il backup di quella cartella? Vuoi esplicitamente che non venga ripristinato dopo un incidente? Un altro esempio, un mio amico aveva la sua casella di posta thunderbird apparentemente vuota dopo un'interruzione di corrente. Ho potuto ottenere il contenuto come un semplice file e leggerlo e ricostruirlo con uno script Python. Perché l'eseguibile Python e il gestore file non dovrebbero accedervi?

Ciò che è ovvio per me è che un'applicazione di cui non mi fido non dovrebbe mai trovarsi nel file system in cui memorizzo i miei dati e non dovrei mai riuscire ad accedervi: inverto il problema e isola le applicazioni che voglio testare in una macchina virtuale dedicata (anche se so che è ancora lontano da un proiettile d'argento, accetto il livello di rischio residuo). E non dimentico mai che ciò che è più pericoloso per il computer e il dato è ciò che sta tra la tastiera e la sedia ... Quindi mi attengo alle solite regole di sicurezza e ho backup regolari, un antivirus sulla mia finestra di Windows, non ho mai eseguire attività ordinarie sotto un account amministratore, disabilitare tutti i demoni oi servizi non necessari ...

    
risposta data 24.05.2017 - 20:42
fonte
1

Non sono sicuro di quanto sia accettabile quanto segue, ma è una soluzione a quello che chiedi e che uso da circa 3-4 anni. La configurazione iniziale è dolorosa ma una volta impostata funziona correttamente. Nota che usando questo metodo immagino di essere immune praticamente a qualsiasi cosa che non sia un tipo di attacco di escalation di privilegi - in particolare, la corsa degli attacchi basati su browser, attacchi basati su file multimediali e persino qualsiasi ransomware (se iniziano targeting per Linux) ecc.

Per cominciare, ho 3 utenti: u0, u1 e u2. (I nomi effettivi sono diversi; usa questi per facilitare la spiegazione).

Il pubkey di u2 è nel file ~ / .ssh / authorized_keys di u0. "ssh u0" di u2 funziona senza richiedere nulla. Lascio l'impostazione keychain / ssh-agent come esercizio per il lettore:)

u2 è dove sono tutte le cose reali - tutti i file, ecc., per esempio. Solo thunderbird viene eseguito qui, ma non ha accesso a Internet (imposta il proxy su qualcosa di inesistente, come 127.0.0.22:2222 o qualcosa di casuale come quello). I browser sono bloccati in modo simile, principalmente per impedirmi di dimenticare e di eseguire qualcosa in questo ID utente. Tutti i lettori multimediali sono anche disabilitati usando programmi fittizi collocati in precedenza in $ PATH.

Quando thunderbird apre un file, fallo passare attraverso un programma che sul mio sistema è chiamato "xo-deleg" (abbreviazione di "delegate xdg-open"). Questo è doloroso da configurare - per ogni tipo di file / tipo mime, devi fare in modo che TB scelga di eseguire questo script. Se lo dimentichi, finisci per eseguirlo localmente - non ho trovato un modo per automatizzarlo, ma sono sicuro che ci sono alcune impostazioni in TB che potrebbero aiutarti.

Questo programma "scp" è il file in / tmp / xo sotto l'utente "u0", quindi spara uno script chiamato "xo-run" (cioè, esegue "ssh u0 xo-run").

xo-run è un po 'complicato. Non sono sicuro che SO prenda il codice correttamente, ma proverò, sperando che funzioni come markdown:

#!/bin/bash

# runs on 'u0' only

exec >>/tmp/xo.$USER.log
exec 2>&1

( (

    export DISPLAY=:0.0
    cd /tmp/xo

    file='ls -Atc | head -1'
    xdg-open    "/tmp/xo/$file"
    sleep 1h
    /bin/rm -vf "/tmp/xo/$file"

) & )

Come puoi vedere, il file viene richiamato con l'app desktop appropriata, nell'utente u0. Inoltre viene eliminato dopo 1 ora. Il trucco a doppia forcella, con "&" dopo il primo fork, assicura che il genitore (in esecuzione sotto utente "u2", ricorda, che ha sparato "ssh u0 xo-run"?) non aspetti.

Ogni volta che devo effettivamente salvare un file che arriva via email, devo farlo manualmente. Ad esempio, in u2 userid, esegui "scp u0: / tmp / xo / FILENAME."

C'è molto di più nella mia configurazione (non ho spiegato cosa sta facendo l'utente "u1", per esempio, né ho menzionato che effettivamente eseguo due server x (uno su tty1 e uno su tty2) e non ho nemmeno toccato la sicurezza del browser e la sicurezza dei media, che fanno tutti parte di questo complicato gioco), ma per i tuoi scopi, questo dovrebbe essere sufficiente.

Si prega di notare anche se questo sembra doloroso, questo è solo un dolore di una volta. L'uso effettivo è praticamente indistinguibile da un setup di vanilla tranne che per il salvataggio permanente dei file.

    
risposta data 03.06.2017 - 06:17
fonte

Leggi altre domande sui tag