Come limitare l'esecuzione di comandi in una directory specifica tramite SUDOERS?


13

Posso configurare sudo (tramite il file sudoers) per consentire a un utente di eseguire i comandi chowne chmodsu qualsiasi file o directory nel sistema. Tuttavia, desidero solo concedere a un utente l'autorizzazione per eseguire questi comandi su file che risiedono sotto la /var/www/htmldirectory.

Come posso limitare i comandi privilegiati in modo tale che l'utente possa eseguirli solo in una directory predefinita?

Ad esempio: il seguente comando concede 777 autorizzazioni al index.htmlfile.

sudo chmod 777 /var/www/html/index.html

Ora voglio eseguire due azioni

  1. Limitare in modo sudotale che l'utente possa solo eseguire chmode chowndall'interno/var/www/html

  2. Impedire all'utente di eseguire questi comandi in altre parti del sistema (ad es. I comandi non possono essere eseguiti /var/wwwo /var/ftp)


1
Per favore, non fare un crosspost - superuser.com/questions/456662/…
Ulrich Dangel

7
È davvero il modo giusto? Che ne dici di un www-datagruppo che elimina la necessità chmod/ chownqualcosa?
sr_

Freddo. In questo modo ottieni radice abbastanza facilmente. È una pessima idea regalare chown. A parte questo, non vedo alcun motivo per cui chmoddebba essere eseguito come root.
Nils,

Risposte:


13

Quello che stai chiedendo è difficile se non impossibile. Anche se hai limitato l'applicazione di chowne chmodai file in una directory specifica, qualcuno potrebbe comunque passare un collegamento simbolico e quindi influire sui file ovunque preferiscano.

Fortunatamente, è molto probabile che ciò che stai tentando di fare non sia la soluzione giusta al tuo problema reale, e c'è un altro metodo che funziona.

Di solito, gli utenti che necessitano di autorizzazioni aggiuntive per creare e modificare i file in /var/wwwvengono aggiunti a un gruppo (spesso www-data, oppure potresti avere gruppi diversi per parti diverse del sito). È possibile utilizzare la proprietà del gruppo e le directory setgid: chgrp www-data /var/www/html; chmod g+ws /var/www/htmlconsente a tutti gli utenti del www-datagruppo di scrivere nella /var/www/htmldirectory e i file creati in quella directory saranno di proprietà del www-datagruppo anziché del gruppo primario dell'utente che ha creato il file. Tuttavia, questo non è molto flessibile.

Quello che probabilmente dovresti fare è impostare gli elenchi di controllo di accesso per i file in /var/www. Innanzitutto, assicurati che gli ACL siano abilitati: il filesystem attivo /var/wwwdeve essere montato con l' aclopzione. Vedere Rendere tutti i nuovi file in una directory accessibili a un gruppo per assistenza. Installa anche i programmi di utilità ACL ( getfacle setfacl). Quindi concedere ulteriori autorizzazioni per l'albero sotto /var/www/htmlagli utenti che dovrebbero averli. È possibile impostare ACL per utente, ma spesso è più facile mettere gli utenti che dovrebbero avere gli stessi diritti su una parte del filesystem in un gruppo e impostare ACL per quel gruppo. Ad esempio, se gli utenti del gruppo html-writersdevono avere accesso in lettura e scrittura all'albero in /var/www/html:

setfacl -d -m group:html-writers:rwx /var/www/html
setfacl -m group:html-writers:rwx /var/www/html

Per quanto riguarda "questo non è molto flessibile" (alla fine del paragrafo 3) - perché non lo è? È perché le persone devono far parte di un certo gruppo? (Non so quasi nulla di autorizzazioni, ACL e cose correlate.)
KajMagnus

3
@KajMagnus Non è flessibile perché root deve gestire i gruppi e i file possono appartenere a un solo gruppo. ACL consente a qualsiasi utente di selezionare chi può accedere ai file di sua proprietà e in un ACL possono essere menzionati più utenti e gruppi.
Gilles 'SO- smetti di essere malvagio' il

2

È possibile limitare il comando utilizzato da "myuser" con tutti gli argomenti nel /etc/sudoersfile con il comando visudoadd:

## Allows myuser to chmod the html dir and chmod 755 the html2 dir
myuser  ALL=NOPASSWD:/bin/chmod [0-7][0-5][0-5] /var/www/html/*,/bin/chown myuser:mygroup /var/www/html/*,/bin/chmod 755 /var/www/html2/myapp/*.txt 

abilita la registrazione per ogni operazione aggiungendo:

Defaults logfile=/var/log/sudo.log

uscita campione:

[root@myhost /]# su - myuser
-sh-3.1$ sudo /bin/chmod 755 /var/www/html/index.html 
-sh-3.1$ sudo /bin/chmod 755 /var/www/html/*
-sh-3.1$ sudo /bin/chmod 777 /var/www/html2/myapp/*.txt
Sorry, user myuser is not allowed to execute '/bin/chmod 777 /var/www/html2/myapp/*.txt' as root on myhost.mydomain.
-sh-3.1$ sudo /bin/chmod 755 /var/www/html2/myapp/*.txt 
-sh-3.1$ 

Quando usi sudo, la premessa dovrebbe essere che "myuser" è una persona di fiducia. Fai attenzione alle autorizzazioni per i file, non esiste un modo semplice per impedire a un utente sudo dannoso di collegare un file da una risorsa esterna e modificarlo.


L'ho provato prima, ma ha dato l'errore come: Siamo spiacenti, l'utente prashant non può eseguire '/ bin / chmod 777 / var / www / html / a' come root su prashant.xyz.com.
PrashantB

hai cambiato utente con su - prashanto su prashant?
tombolinux il

Sì, sto eseguendo il comando dall'utente prashant. Leggo i forum, dicono che i comandi funzionano a livello di sistema. Nessuno ha scritto su questo problema.
PrashantB

Lo eseguo whooo :). Ma questo sarà un comando statico. Possiamo renderlo generale in modo da poter applicare qualsiasi autorizzazione su qualsiasi file in / var / www / html?
PrashantB

3
Questo è completamente insicuro: sudo /bin/chmod 666 /var/www/html/../../../etc/passwde se in qualche modo lo risolvi,ln -s /etc /var/www/html/foo/etc; sudo /bin/chmod 666 /var/www/html/foo/etc/passwd
Gilles 'SO- smetti di essere malvagio'

1

In realtà c'è un modo abbastanza semplice per farlo, creando uno script Bash (o shell di tua scelta) per limitare le modifiche apportate a un determinato file o directory.

Nel tuo esempio, sarebbe simile al seguente:

$ vi /usr/local/bin/mychmod

#!/bin/bash

chmod 777 /var/www/index.html

Quindi dovrai modificare il file sudoers per consentire a www-data di eseguire / usr / local / bin / mychmod.

Tieni presente, tuttavia, che consentire l'input dell'utente (ad esempio, consentire a un utente di cambiare quale file o directory è inserito) in questo spazio è estremamente pericoloso e devi sapere come filtrare gli attacchi di iniezione se vuoi fare qualcosa di simile quello. Un utente malintenzionato può facilmente eseguire qualsiasi comando come root in questo modo, compromettendo efficacemente la sicurezza del sistema.


questo è eccezionalmente pericoloso e in realtà non risolve la soluzione ...
SomeGuy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.