È possibile impedire a qualsiasi utente di non utilizzare comandi come ls, rm e altri comandi di sistema che potrebbero danneggiare il sistema. Ma gli utenti dovrebbero essere in grado di eseguire programmi shell.
ls
comando pericoloso !
È possibile impedire a qualsiasi utente di non utilizzare comandi come ls, rm e altri comandi di sistema che potrebbero danneggiare il sistema. Ma gli utenti dovrebbero essere in grado di eseguire programmi shell.
ls
comando pericoloso !
Risposte:
La tua domanda dovrebbe essere:
Non mi fido dei miei utenti. Quelli stupidi vedono qualcosa su Internet e provano senza capire cosa fa. Ai subdoli piace curiosare in giro e guardare i file degli altri e rubare le loro idee. E i pigri, non farmi iniziare dai pigri.
Come posso proteggere il mio sistema e i miei utenti dai miei utenti?
Innanzitutto, unix ha un sistema di autorizzazioni per filesystem molto completo. Questo sembra essere un tutorial decente sulle autorizzazioni del filesystem unix . L'essenza di questo è che le directory possono essere impostate in modo tale che un utente possa andare in una directory e può eseguire programmi da quella directory ma non può visualizzare il contenuto di quella directory. Se lo fai, ad esempio, su / home, se l'utente esegue ls su / home, viene visualizzato un errore di autorizzazione negata.
Se hai davvero paura dei tuoi utenti e vuoi inserirli in un tipo supermax di ambiente limitato, usa qualcosa come le prigioni di freebsd o le zone di solaris - ogni utente ha il suo ambiente su misura. Per i punti aggiunti usa ZFS in modo da poter scattare un'istantanea dell'ambiente quando effettuano l'accesso, quindi se eliminano i loro file puoi semplicemente estrarli dall'istantanea.
Ci sono tre cose che devono essere in atto per fare pienamente quello che stai chiedendo:
Cintura, bretelle e una pistola di base per buona misura. Difficile sbagliare lì.
AppArmor è interessante poiché il MAC per un eseguibile specifico è ereditato da tutti i suoi figli. Imposta come utente il login dell'utente /bin/bash-bob
, imposta il profilo AppArmor per quel diritto binario specifico e l'unico modo per uscire da quel carcere di autorizzazione è attraverso exploit del kernel. Se alcuni script di installazione pigri lasciano /var/opt/vendor/tmp
scrivibile a livello globale per qualche stupida ragione, l'utente che usa /bin/bash-bob
come shell non sarà in grado di scrivere lì . Imposta il profilo bash-bob per consentire solo la scrittura nella loro directory home e /tmp
, e tali errori di autorizzazione non possono essere sfruttati. Anche se in qualche modo trovano la password di root, il profilo AppArmor per /bin/bash-bob
si applicherà anche dopo che si sono verificati su
da allora su
e il bash
processo che genera sono figli /bin/bash-bob
.
La parte difficile è costruire quel profilo AppArmor.
A mio avviso, hai solo bisogno dei passaggi 2 e 3, poiché in combinazione entrambi impediscono la possibilità di fare qualcosa di dannoso al di fuori della scatola accuratamente costruita che hai impostato in entrambi quei passaggi.
Bene, puoi impostare la shell dell'utente su un programma che hai scritto che consente loro solo di eseguire determinati script di shell.
Naturalmente questo sarebbe sicuro solo come il programma e gli script della shell; in pratica, questo tipo di shell limitata in genere non è sicura contro un aggressore intelligente.
Se si desidera che l'utente sia in grado di eseguire solo determinati script / binari, è possibile utilizzare una shell con restrizioni . Questo (come menziona l'articolo di Wikipedia) non è completamente sicuro, ma se puoi garantire che nessuna applicazione autorizzata a eseguire sia in grado di eseguire una nuova shell, allora è una buona alternativa.
Per impostare una shell con restrizioni dell'utente, impostare /bin/rbash
(o simile, la maggior parte delle shell entra in modalità limitata quando il binario è chiamato r *** name *) come shell degli utenti. Quindi, modifica **. Bashrc (o equivalente) e imposta $PATH
una directory in cui sono memorizzati tutti i binari / script consentiti.
Sì, è possibile, ma in pratica ci vorrebbe molto lavoro e pianificazione. È possibile creare script e farli funzionare come uso privilegiato, quindi rimuovere tutti i privilegi dall'utente in questione. In alternativa, è possibile impostare la shell dell'utente su qualcosa di proprio che consente loro di fare solo ciò che si consente esplicitamente.
Tuttavia, i permessi standard in Linux rendono quasi impossibile per un utente normale "danneggiare il sistema". Che tipo di danno stai cercando di prevenire? È banale impedire agli utenti di installare software o eseguire programmi al di fuori della loro home directory e puoi usare chroot per bloccare ulteriormente il sistema.
Potresti provare [lshell] [1] (shell limitata).
lshell è una shell codificata in Python, che ti consente di limitare l'ambiente di un utente a serie limitate di comandi, scegliere di abilitare / disabilitare qualsiasi comando su SSH (ad esempio SCP, SFTP, rsync, ecc.), registrare i comandi dell'utente, implementare la limitazione di temporizzazione, e altro ancora
[1]: http://lshell.ghantoos.org/Overview lshell
Il modo in cui di solito implemento questo tipo di restrizioni richiede che siano soddisfatte diverse condizioni, altrimenti la restrizione può essere facilmente aggirata:
wheel
gruppo, l'unico autorizzato ad utilizzare su
(applicato tramite PAM).All'utente viene fornito un oggetto protetto in modo sicuro rbash
con una sola lettura che PATH
punta a un privato ~/bin
, questa ~/bin/
directory contiene collegamenti a utilità semplici:
$ ll ~/bin
total 0
lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear*
lrwxrwxrwx. 1 root dawud 7 Sep 17 08:58 df -> /bin/df*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep*
lrwxrwxrwx. 1 root dawud 8 Sep 17 08:58 env -> /bin/env*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep*
lrwxrwxrwx. 1 root dawud 9 Sep 17 08:58 grep -> /bin/grep*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview*
lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim*
lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo*
lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit*
lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail*
lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
l'utente viene dato un ambiente di sola lettura limitata (si pensi a cose come LESSSECURE
, TMOUT
, HISTFILE
variabili).
staff_u
e gli viene dato il diritto di eseguire comandi come altri utenti come richiesto tramite sudo
.l'utente /home
, /tmp
e possibilmente /var/tmp
sono polinistanziati tramite /etc/security/namespace.conf
:
/tmp /tmp/.inst/tmp.inst-$USER- tmpdir:create root
/var/tmp /tmp/.inst/var-tmp.inst-$USER- tmpdir:create root
$HOME $HOME/$USER.inst/ tmpdir:create root
Inoltre, /etc/security/namespace.init
rende tutti i file scheletrici di sola lettura per l'utente e di proprietà di root
.
In questo modo è possibile scegliere se $USER
eseguire qualsiasi comando per proprio conto (tramite un collegamento nella ~/bin
directory privata , eseguito il provisioning tramite /etc/skel
, come spiegato sopra), per conto di un altro utente (tramite sudo
) o nessuno.