Come impedire a un nuovo utente di fare qualcosa di pericoloso?


31

Di recente ho installato il server Ubuntu sul mio server per provare Linux come nuovo utente. Ho seguito un tutorial su come configurare il web server che diceva che avevo bisogno chmod 777della directory del web server in modo che potesse essere scritta.

Comunque, ho creato un nuovo account per un tizio per consentirgli di vedere alcuni file sul server che ho inserito nella sua home directory:

adduser francis

Dopo aver creato l'account ho verificato con che accesso ha

groups francis

Diceva "francis: francis", quindi non è stato un problema, ho pensato che Ubuntu non lo includesse in nessun gruppo per impostazione predefinita, il che ha senso, lo ha creato senza permessi extra dal punto di vista della sicurezza, quindi tutto è a posto e dandy. Una settimana dopo, in assoluto e totale orrore, ho scoperto che anche se non poteva fare cose come SUDO o scherzare nelle directory di sistema, aveva pieno accesso a quasi tutto il resto sul server. Ad esempio, aveva pieno accesso in lettura / scrittura ai file del mio server Web su / var / www (e quindi password archiviate in file di configurazione php ecc.) Anche se quella directory NON si trova nella sua directory home e non l'ho mai aggiunto in nessun gruppo che potesse accedere a quella directory, né gli ho concesso alcun accesso speciale a qualsiasi cosa dopo aver fatto l'adduser.

Comunque, cosa sta succedendo qui? Come posso uccidere il suo accesso a qualcosa di importante? Non dovrebbe essere in grado di accedere a cose come / media o / var / www. Per impostazione predefinita, ho pensato che ai nuovi utenti fosse impedito di fare qualcosa di pericoloso o curiosare dove non dovevano essere.

Quindi riassumendo, ho solo bisogno di permettergli di accedere alle directory che specifico manualmente + alle directory di cui ha bisogno per funzionare correttamente (la sua home directory, vim, nano ecc.)

Grazie


30
Stai facendo chmod 777 e stai chiedendo perché tutti possono leggere scrivere lì? leggi la pagina man di chmod
Anwar,

16
Sì, 777 è il tuo problema, per diversi motivi.
Dev Android

21
@Askerman - No, quando dai 777, tutti possono accedere a tutto , per favore dai una lettura: linux.com/learn/understanding-linux-file-permissions
Android Dev

11
Tutti commettiamo errori, soprattutto quando stiamo imparando in un ambiente completamente nuovo. È una buona idea da cui imparare, è sicuramente saggio abbandonare le tue nozioni su come funzionano le cose in Windows quando usi un sistema operativo basato su Linux. Dopo aver ripristinato le tue autorizzazioni, dovresti notare che l'utente non può modificare nulla che non dovrebbe essere in grado di fare. Se hai usato chmodaltrove, potresti avere altri problemi.
Arronical,

8
Cordiali saluti, sto votando questa domanda perché in realtà è una buona notizia da trovare per le nuove persone. E questo malinteso è probabilmente più comune di quanto pensiamo. Questo è anche un buon esempio del perché non dovresti semplicemente copiare i comandi che trovi su Internet (anche qui) senza sapere cosa fanno.
Aaron,

Risposte:


40

Questo è come progettato. E peggio. chmod 777 significa ... "Vorrei che il proprietario, chiunque nel suo gruppo e chiunque avesse i permessi di lettura, scrittura ed esecuzione"

Il che è piuttosto terribile.

E per un server Web, 777 non è ottimale. 755 (Il proprietario ha un gruppo di autorizzazioni completo e altri hanno letto + esegui) è un valore predefinito comune ma da quello che hai detto che vuoi almeno leggere-scrivere o leggere-scrivere eseguire per il proprietario (l'utente del server web), e forse il gruppo e nessuna autorizzazione per l'utente. C'è una domanda più completa su quali siano i livelli di autorizzazione appropriati su serverfault ma considera qualcosa come 640 o 740.

detto questo, potresti anche mettere l'utente nel suo piccolo mondo - impostando chroot per mantenere l'utente nel suo spazio nel sistema. Ci sono guide che fluttuano in giro per fare questo - per esempio l'eccellente risposta di oli qui che può essere un'opzione a seconda delle tue esigenze.


4
Punto minore: "il proprietario, chiunque nel suo gruppo ..." - il proprietario del file non deve necessariamente appartenere al gruppo di file.
alex_d,

2
Bello. Mi piace che tu abbia fatto riferimento alla risposta canonica sul servfault.
Elder Geek,

3
Il gergo storico per questa situazione è " leggibile / scrivibile dal mondo ".
Kaz,

19

In sostanza, si scompone così:

R = 4 (read)
W = 2 (write)
X = 1 (execute)

Quindi, le autorizzazioni di lettura sarebbero solo 4, leggi e scrivi sarebbe 6, leggi ed esegui sarebbe 5, e tutto (leggi, scrivi, esegui) è 7. Ecco come calcolare un valore di ottetto di autorizzazione per un proprietario, gruppo di proprietari o tutti.

Quando si applicano tali autorizzazioni chmoda un percorso di file o directory, i numeri calcolati sopra vengono applicati in questo modo, con un ottetto ciascuno per proprietario, gruppo e tutti:

     $ chmod _ _ _ <file or directory>
             | | |
owner--------  | |
owner's group--  |
everyone---------

Quindi, se volessi dare a me stesso e al mio gruppo di leggere, scrivere ed eseguire le autorizzazioni per una cartella di mia proprietà, ma non volevo che tutti fossero in grado di leggerlo, avrei usato:

$ chmod 770 myDirectory

Per maggiori informazioni, controlla la pagina man per chmod :

$ man chmod

Se non ricordi i bit da aggiungere per rendere i permessi giusti nell'ordine giusto, puoi anche usare il più facilmente leggibile chmod ugo+rwx <...>. I caratteri rappresentano u ser, g ruppo, o ther; r ead, w rite, e x ecute. È possibile utilizzare '-' per rimuovere (ad esempio:) chmod go-wx <...>. Basta notare che ciò aggiunge o rimuove solo esattamente ciò che si digita. chmod ugo+rwx <file>; chmod u+rwx <file> non rimuove l'accesso per gruppo / altro.
ReactiveRaven,

@ReactiveRaven Questo è un ottimo punto. Ma l'OP era ovviamente confuso su ciò che chmod 777faceva, quindi era lì che ho diretto la mia spiegazione.
Aaron,

@Zanna Buona chiamata!
Aaron,

6

Come altri hanno già detto, non dovresti avere le autorizzazioni impostate su 777

Ecco un utile foglio di riferimento che utilizzo.

+-----+---+--------------------------+
| rwx | 7 | Read, write and execute  |
| rw- | 6 | Read, write              |
| r-x | 5 | Read, and execute        |
| r-- | 4 | Read,                    |
| -wx | 3 | Write and execute        |
| -w- | 2 | Write                    |
| --x | 1 | Execute                  |
| --- | 0 | no permissions           |
+------------------------------------+
You can use the octal notation, where the three digits correspond to the user, then group, then other. 
Perhaps this might help 
+------------+------+-------+
| Permission | Octal| Field |
+------------+------+-------+
| rwx------  | 700  | User  |
| ---rwx---  | 070  | Group |
| ------rwx  | 007  | Other |
+------------+------+-------+

1
Bello! Questo è di grande aiuto per le persone (come me) che sono studenti visivi.
Aaron,

3

Per condividere file con una persona a cui hai effettuato l'accesso, non devi fare nulla in particolare. In un'installazione Debian predefinita, gli utenti hanno accesso alle reciproche home directory.

Per esempio,

$ ls -ld ~
drwxr-xr-x 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

Le autorizzazioni sulla mia home directory sono read (r) e access (x) per qualsiasi utente sul mio sistema. Solo io ho accesso in scrittura (w) .

Inoltre, l'impostazione predefinita umasksu Ubuntu è tale che i file e le directory creati dagli utenti sono leggibili dal mondo per impostazione predefinita . È possibile impostare umasksu 077se non lo si desidera.

Cosa significa che in una configurazione predefinita, se l'utente youdesidera condividere documenti ~/README.txtcon me, non c'è nulla youda fare. Posso semplicemente vederlo:

$ who am i
zwets    pts/26       2016-09-29 08:05 (:pts/19:S.6)
$ ls -l ~you/README.txt
-rw-r--r-- 1 you you 24 Sep  8 11:23 /home/you/README.txt
$ cat ~you/README.txt
You's shared thoughts.

Non riesco a modificare o rimuovere il file, ma posso copiarlo in una posizione in cui ho il permesso di scrittura. Quindi possiedo la copia:

$ echo "Adding my thoughts." >> ~you/README.txt
bash: /home/you/README.txt: Permission denied
$ rm ~you/README.txt
rm: remove write-protected regular file '/home/you/README.txt'? yeah!
rm: cannot remove '/home/you/README.txt': Permission denied
$ cp ~you/README.txt ~zwets
$ ls -l ~/README.txt
-rw-r--r-- 1 zwets zwets 24 Sep  29 14:09 /home/zwets/README.txt

Ci sono buone ragioni per cui la maggior parte del sistema è leggibile dal mondo per impostazione predefinita, come ho spiegato in un'altra risposta su AskUbuntu . Tuttavia, su un sistema condiviso può avere senso rendere le home directory inaccessibili ai non proprietari:

$ chmod o-rwx ~
$ ls -l ~
drwxr-x--- 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

... poiché molti utenti apparentemente non sono a conoscenza del valore predefinito - QED ;-). Sarebbe più saggio, tuttavia, rendere gli utenti consapevoli che le autorizzazioni dei file non proteggono i segreti.


1

In Ubuntu, qualsiasi utente ha il privilegio di superutente che viene aggiunto nel gruppo "sudo". Verificare che non vengano aggiunti altri utenti in questo gruppo.

Per proteggere i file e la directory da altri utenti è possibile impostare l'autorizzazione, come suggerito dal Sig. Journeyman Geek nella risposta sopra.

È inoltre possibile utilizzare autorizzazioni speciali per proteggere file e directory da altri.

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.