Ci sono un paio di approcci, alcuni per lo più sicuri, altri per niente.
Il modo insicuro
Lascia correre qualsiasi uso mount
, ad esempio, tramite sudo. Potresti anche dare loro radice; è la stessa cosa. L'utente può montare un filesystem con una copia root suid di bash
—running che fornisce immediatamente root (probabilmente senza alcuna registrazione, oltre al fatto che è mount
stato eseguito).
In alternativa, un utente può montare il proprio filesystem sopra /etc
, contenente la propria copia di /etc/shadow
o /etc/sudoers
, quindi ottenere root con su
o sudo
. O eventualmente bind-mount ( mount --bind
) su uno di quei due file. O un nuovo file in /etc/sudoers.d
.
Attacchi simili potrebbero essere respinti in /etc/pam.d
molti altri luoghi.
Ricorda che i filesystem non devono nemmeno essere su un dispositivo, -o loop
monteranno un file di proprietà (e quindi modificabile) dell'utente.
Il modo più sicuro: udisks o simili
I vari ambienti desktop hanno già creato soluzioni per questo, per consentire agli utenti di montare supporti rimovibili. Funzionano montando in una sottodirectory di /media
solo e disattivando il supporto set-user / group-id tramite le opzioni del kernel. Opzioni qui includono udisks
, udisks2
, pmount
, usbmount
,
Se è necessario, potresti scrivere il tuo script per fare qualcosa di simile e invocarlo tramite sudo, ma devi stare molto attento a scrivere questo script per non lasciare exploit root. Se non vuoi che i tuoi utenti debbano ricordare sudo, puoi fare qualcosa del genere in uno script:
#!/bin/bash
if [ $UID -ne 0 ]; then # or `id -u`
exec sudo -- "$0" "$@"
fi
# rest of script goes here
Un giorno il modo sarà sicuro: spazi dei nomi utente
Gli spazi dei nomi di Linux sono una forma di virtualizzazione molto leggera (contenitori, per essere più specifici). In particolare, con gli spazi dei nomi utente, qualsiasi utente sul sistema può creare il proprio ambiente in cui è root. Ciò consentirebbe loro di montare filesystem, ad eccezione del fatto che è stato esplicitamente bloccato, ad eccezione di alcuni filesystem virtuali. Alla fine, i file system FUSE saranno probabilmente consentiti, ma le patch più recenti che ho trovato non coprono i dispositivi a blocchi, ma solo cose come sshfs.
Inoltre, molti kernel di distro hanno (per motivi di sicurezza) il default di non consentire agli utenti non privilegiati di usare spazi dei nomi utente; per esempio Debian ha un kernel.unprivileged_userns_clone
valore predefinito di 0. Altre distribuzioni hanno impostazioni simili, sebbene spesso con nomi leggermente diversi.
La migliore documentazione che conosco sugli spazi dei nomi utente è un articolo LWN Spazi dei
nomi in funzione, parte 5: Spazi dei nomi utente .
Per ora, andrei con udisks2.
gvfs-mount
-d /dev/sdX