GNU/Linux >> Linux Esercitazione >  >> Linux

Comprensione delle autorizzazioni UNIX e dei tipi di file

Risponderò alle tue domande in tre parti:tipi di file, permessi e casi d'uso per le varie forme di chmod .

Tipi di file

Il primo carattere in ls -l output rappresenta il tipo di file; d significa che è una directory. Non può essere impostato o non impostato, dipende da come è stato creato il file. Puoi trovare l'elenco completo dei tipi di file nella documentazione di ls; quelli che potresti incontrare sono

  • - :file “normale”, creato con qualsiasi programma in grado di scrivere un file
  • b :blocchi di file speciali, in genere dispositivi di disco o partizione, possono essere creati con mknod
  • c :file di caratteri speciali, può essere creato anche con mknod (vedi /dev per esempi)
  • d :directory, può essere creata con mkdir
  • l :collegamento simbolico, può essere creato con ln -s
  • p :named pipe, può essere creato con mkfifo
  • s :socket, può essere creato con nc -U
  • D :porta, creata da alcuni processi server su Solaris/openindiana.

Autorizzazioni

chmod 0777 è usato per impostare tutti i permessi in un chmod esecuzione, piuttosto che combinare le modifiche con u+ ecc. Ciascuna delle quattro cifre è un valore ottale che rappresenta un insieme di permessi:

  • suid , sgid e "appiccicoso" (vedi sotto)
  • autorizzazioni utente
  • autorizzazioni di gruppo
  • "altri" permessi

Il valore ottale è calcolato come somma dei permessi:

  • "leggere" è 4
  • "scrivi" è 2
  • "esegui" è 1

Per la prima cifra:

  • suid è 4; i file binari con questo set di bit vengono eseguiti come utente proprietario (comunemente root )
  • sgid è 2; i binari con questo set di bit vengono eseguiti come gruppo proprietario (questo è stato utilizzato per i giochi in modo che i punteggi più alti potessero essere condivisi, ma spesso è un rischio per la sicurezza se combinato con le vulnerabilità nei giochi) e i file creati nelle directory con questo set di bit appartengono al gruppo proprietario della directory per impostazione predefinita (utile per creare cartelle condivise)
  • "sticky" (o "cancellazione limitata") è 1; i file nelle directory con questo set di bit possono essere eliminati solo dal loro proprietario, dal proprietario della directory o da root (vedi /tmp per un esempio comune di questo).

Vedi il chmod manpage per i dettagli. Nota che in tutto questo sto ignorando altre funzionalità di sicurezza che possono alterare i permessi degli utenti sui file (SELinux, file ACL...).

I bit speciali vengono gestiti in modo diverso a seconda del tipo di file (file o directory normale) e del sistema sottostante. (Questo è menzionato nel chmod manpage.) Sul sistema che ho usato per testare questo (con coreutils 8.23 su un ext4 filesystem, che esegue il kernel Linux 3.16.7-ckt2), il comportamento è il seguente. Per un file, i bit speciali vengono sempre cancellati a meno che non siano impostati esplicitamente, quindi chmod 0777 equivale a chmod 777 ed entrambi i comandi cancellano i bit speciali e danno a tutti i permessi completi sul file. Per una directory, i bit speciali non vengono mai cancellati completamente utilizzando la forma numerica a quattro cifre, quindi in effetti chmod 0777 è anche equivalente a chmod 777 ma è fuorviante poiché alcuni dei bit speciali rimarranno così come sono. (Una versione precedente di questa risposta ha sbagliato.) Per cancellare bit speciali nelle directory è necessario utilizzare u-s , g-s e/o o-t esplicitamente o specificare un valore numerico negativo, quindi chmod -7000 cancellerà tutti i bit speciali su una directory.

In ls -l uscita, suid , sgid e "sticky" appaiono al posto del x voce:suid è s o S invece del x dell'utente , sgid è s o S invece del x del gruppo e "appiccicoso" è t o T invece del x degli altri . Una lettera minuscola indica che sono impostati sia il bit speciale che il bit eseguibile; una lettera maiuscola indica che è impostato solo il bit speciale.

Le varie forme di chmod

A causa del comportamento sopra descritto, utilizzando le quattro cifre complete in chmod può creare confusione (almeno risulta che ero confuso). È utile quando si desidera impostare bit speciali oltre a bit di autorizzazione; altrimenti i bit vengono cancellati se stai manipolando un file, conservati se stai manipolando una directory. Quindi chmod 2750 assicura che riceverai almeno sgid ed esattamente u=rwx,g=rx,o=; ma chmod 0750 non cancellerà necessariamente i bit speciali.

Usare modalità numeriche invece di comandi di testo ([ugo][=+-][rwxXst] ) è probabilmente più un caso di abitudine e lo scopo del comando. Una volta che sei abituato a utilizzare le modalità numeriche, spesso è più semplice specificare semplicemente la modalità completa in quel modo; ed è utile poter pensare ai permessi usando modalità numeriche, dato che molti altri comandi possono usarli (install , mknod ...).

Alcune varianti di testo possono tornare utili:se vuoi semplicemente assicurarti che un file possa essere eseguito da chiunque, chmod a+x lo farà, indipendentemente da quali siano le altre autorizzazioni. Allo stesso modo, +X aggiunge il permesso di esecuzione solo se uno dei permessi di esecuzione è già impostato o il file è una directory; questo può essere utile per ripristinare le autorizzazioni a livello globale senza dover ricorrere a file in casi speciali rispetto a directory. Quindi, chmod -R ug=rX,u+w,o= equivale ad applicare chmod -R 750 a tutte le directory e ai file eseguibili e chmod -R 640 a tutti gli altri file.


Quindi, le autorizzazioni in Linux sono molto importanti. Cercherò di fare una breve spiegazione.

Per parti di una modalità file

Ogni file Unix ha una serie di permessi che determinano se puoi leggere, scrivere o eseguire il file. Runningls -l visualizza le autorizzazioni. Ecco un esempio di tale visualizzazione:

-rw-r--r-- 1 user somegroup 7041 Mar 26 19:34 somefile

Allego un'immagine di pezzi di un file mode:

Il tipo può essere una cosa diversa. Ad esempio:

  • d (cartella)
  • c (dispositivo carattere)
  • l (collegamento simbolico)
  • p (pipa con nome)
  • s (presa)
  • b (dispositivo di blocco)
  • D (door, non comune sui sistemi Linux, ma è stato portato)

Se vuoi impostare alcuni permessi per tutte le directory puoi usare l'attributo R, per esempio:

chmod -R 777 /some/directory/

Per chmod 777 vs 0777

Il chmod Il comando di solito si aspetta che l'input sia un numero ottale, lo zero iniziale si riferisce al valore della tripletta di bit sticky/sgid/suid. In C, tuttavia, farebbe la differenza, poiché 777 verrebbe tradotto in 01411 (ottale), impostando così lo sticky bit (vedi il chmod(2) pagina man), permessi di lettura per proprietario e bit eseguibile per gruppo e altri (che è una combinazione piuttosto strana).

MODIFICA 1

Ho trovato un'altra immagine sui permessi di Linux e allego per capire più facilmente:


d significa che è una directory, se hai un file è - e se si tratta di un link troverai un l . Non può essere impostato/disattivato.

Se usi 0777 come permessi stai dando il pieno controllo (lettura+scrittura+esecuzione) ad ogni utente/gruppo del sistema. È un modo pigro per risolvere i problemi quando hai utenti/gruppi che non possono accedere a directory/file.

Ad esempio, se elenchi il contenuto di una directory e ottieni questo:

-rw-r--r-- 1 root root 42596 jun 7 2012 preloadable_libintl.so

preloadable_libintl.so è un file di proprietà dell'utente root e del gruppo root. Il proprietario ha accesso in lettura e scrittura, il gruppo ha solo accesso in lettura e qualsiasi altro utente ha accesso in lettura. Questo può essere tradotto come 644.

Se lo cambio in 777 sarà simile a questo:

-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so


Linux
  1. Permessi Linux:un'introduzione a chmod

  2. Linux chmod and chown - Come modificare le autorizzazioni e la proprietà dei file in Linux

  3. Tabella delle autorizzazioni per tipi di utenti di file/directory e file system

  4. unix - testa E coda del file

  5. Come si applicano i permessi dei file ai collegamenti simbolici?

Comando Chmod in Linux (autorizzazioni file)

Comando Chmod:come modificare le autorizzazioni dei file in Linux

Comprendere i permessi dei file Linux

Esempi di comandi chmod di Linux

Gestisci le autorizzazioni di directory e file con chmod Recursive

Comprendere le autorizzazioni di base dei file e la proprietà in Linux