Non ho mai capito come funzionasse chmod
fino ad oggi. Ho seguito un tutorial che mi ha spiegato un grosso problema.
Ad esempio, ho letto che hai tre diversi gruppi di autorizzazioni:
- proprietario (
u
) - gruppo (
g
) - tutti (
o
)
Sulla base di questi tre gruppi, ora so che:
- Se il file è di proprietà dellutente, le autorizzazioni dellutente determinano laccesso .
- Se il gruppo del file è lo stesso del gruppo dellutente, lautorizzazione del gruppo determina laccesso.
- Se lutente non è il proprietario del file e non lo è nel gruppo, viene utilizzato laltro permesso.
Ho anche appreso che hai i seguenti permessi:
- read (
r
) - write (
w
) - esegui ()
Ho creato una directory per testare le mie nuove conoscenze acquisite:
mkdir test
Quindi Ho fatto alcuni test:
chmod u+rwx test/ # drwx------ chmod g+rx test/ # drwxr-x--- chmod u-x test/ # drw-r-x---
Dopo aver scherzato per un po penso di aver finalmente capito chmod
e il modo in cui imposti i permessi usando questo comando.
Ma …
Ho ancora alcune domande:
- Che cosa fa il
d
allinizio sta per? - Qual è il nome e luso dello spazio contenitore e quali altri valori può contenere?
- Come posso impostarlo e annullarlo?
- Qual è il valore di questo
d
? (Dato che hai solo 7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1) - Perché le persone a volte usano
0777
invece di777
per impostare i loro permessi?
Ma poiché non dovrei fare più domande, cercherò di farle in una domanda.
In sistemi basati su UNIX come tutte le distribuzioni Linux, per quanto riguarda i permessi, cosa significa la prima parte (d
) e cosa “è il utilizzare per questa parte dei permessi?
Commenti
Rispondi
Risponderò alle tue domande in tre parti: tipi di file, autorizzazioni, e casi duso 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 disattivato, dipende da come è stato creato il file. Puoi trovare lelenco completo dei tipi di file nella documentazione ls ; quelli che probabilmente incontrerai sono
-
-
: file “normale”, creato con qualsiasi programma in grado di scrivere un file -
b
: file speciali di blocco, in genere dischi o dispositivi di partizione, possono essere creati conmknod
-
c
: file speciale di caratteri, può essere creato anche conmknod
(vedi/dev
per esempi) -
d
: directory, può essere creata conmkdir
-
l
: link simbolico, può essere creato conln -s
-
p
: named pipe, può essere creato conmkfifo
-
s
: socket, può essere creato connc -U
-
D
: door , creato da alcuni processi server su Solaris / openindiana.
Autorizzazioni
chmod 0777
viene utilizzato per impostare tutte le autorizzazioni in ununica chmod
esecuzione, anziché combinare le modifiche con u+
ecc.Ciascuna delle quattro cifre è un valore ottale che rappresenta un insieme di autorizzazioni:
-
suid
,sgid
e “permanenti” (vedi sotto) - autorizzazioni utente
- autorizzazioni di gruppo
- autorizzazioni “altro”
Lottale il valore viene calcolato come la somma delle autorizzazioni:
- “read” è 4
- “write” è 2
- “execute” è 1
Per la prima cifra:
-
suid
è 4; i binari con questo bit impostato vengono eseguiti come utente proprietario (comunementeroot
) -
sgid
è 2; binari con questo set di bit vengono eseguiti come gruppo proprietario (questo è stato utilizzato per i giochi in modo da poter condividere i punteggi più alti, ma è spesso un rischio per la sicurezza se combinato con le vulnerabilità nei giochi) ei file creati nelle directory con questo set di bit appartengono al il gruppo di proprietari della directory per impostazione predefinita (questo è utile per creare cartelle condivise) - “sticky” (o “eliminazione limitata”) è 1; i file nelle directory con questo bit impostato possono essere eliminati solo dal proprietario, dal proprietario della directory o da
root
(vedere/tmp
per un esempio comune di questo).
Vedere la 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 sono gestiti in modo diverso a seconda del tipo di file (normale file o directory) e il sistema sottostante. (Questo è menzionato nella manpage chmod
.) Sul sistema che ho usato per testarlo (con coreutils
8.23 su un ext4
filesystem, con 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
è equivalente a chmod 777
ed entrambi i comandi cancellano i bit speciali e concedi a tutti le autorizzazioni complete sul file. Per una directory, i bit speciali non vengono mai cancellati completamente utilizzando il formato numerico 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 specifica un valore numerico negativo, quindi chmod -7000
cancellerà tutti i bit speciali su una directory.
Nelloutput ls -l
, suid
, sgid
e “sticky” vengono visualizzati al posto di x
voce: suid
è s
o S
invece di x
, sgid
è s
o S
invece di x
e” sticky “è t
o T
invece di x
di 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 descritto sopra, utilizzando le quattro cifre complete in chmod
può creare confusione (almeno si scopre che ero confuso). È utile quando si desidera impostare bit speciali e bit di autorizzazione; altrimenti i bit vengono cancellati se stai manipolando un file, conservati se stai manipolando una directory. Quindi chmod 2750
ti assicura di ottenere almeno sgid
ed esattamente u=rwx,g=rx,o=
; ma chmod 0750
non cancella necessariamente i bit speciali.
Utilizzo di 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 la modalità completa in questo modo; ed è utile essere in grado di pensare alle autorizzazioni utilizzando le modalità numeriche, poiché molti altri comandi possono utilizzarle (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 cosa le altre autorizzazioni sono. Allo stesso modo, +X
aggiunge lautorizzazione di esecuzione solo se una delle autorizzazioni di esecuzione è già impostata o il file è una directory; questo può essere utile per ripristinare i permessi a livello globale senza dover utilizzare file per casi speciali v. directory. Pertanto, 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.
Commenti
- Sebbene le altre risposte fossero abbastanza buone, hai davvero speso un po di tempo a rispondere a questa domanda. Grazie.
- Su * BSD le directory si comportano come se il loro bit
sgid
fosse sempre impostato, indipendentemente dal suo valore effettivo. Su FreeBSD il bitsuid
può essere configurato per agire in modo analogo asgid
(cioè i file e le sottodirectory create allinterno avranno lo stesso proprietario della directory ), a condizione che il filesystem sottostante lo supporti e sia montato con lopzionesuiddir
. - ”
+X
aggiunge lautorizzazione di esecuzione solo se una delle autorizzazioni di esecuzione è già impostata o il file è una directory ” grazie a te @ stephen-kitt manca la documentazione ” già impostata ” mi ha davvero spaventato!
Risposta
Quindi, i permessi in Linux sono molto importanti. Proverò a dare una breve spiegazione.
Per pezzi di una modalità file
Ogni file Unix ha una serie di permessi che determinano se puoi leggere, scrivere o eseguire il file. Lesecuzione di ls -l mostra le autorizzazioni. Ecco un esempio di tale visualizzazione:
-rw-r--r-- 1 user somegroup 7041 Mar 26 19:34 somefile
Allego unimmagine di parti di una modalità file:
Il tipo può essere diverso. Ad esempio:
- d (directory)
- c (dispositivo a caratteri)
- l (collegamento simbolico)
- p (denominato pipe)
- s (socket)
- b (dispositivo a blocchi)
- D (door, non comune su sistemi Linux, ma è stato portato)
Se desideri impostare alcune autorizzazioni per tutte le directory puoi utilizzare lattributo R, ad esempio:
chmod -R 777 /some/directory/
Per chmod 777 vs 0777
Il comando chmod
di solito richiede linput per essere un numero ottale, lo zero iniziale si riferisce al valore della tripletta di bit sticky / sgid / suid. In C, tuttavia, farebbe differenza, poiché 777
verrebbe tradotto in 01411
(ottale), impostando così il bit appiccicoso (vedere 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 unaltra immagine sui permessi di Linux e la allego per comprenderla più facilmente:
Commenti
- Ti sbagli su 777 vs 0777. Entrambi sono ottali (i decimali non hanno comunque senso in in questo caso), ma nella forma di quattro caratteri, la prima cifra imposta i bit speciali (sticky & setuid).
- @orion A volte è vero, per esempio in un codice tipo C
chmod(777)
sarebbe effettivamente lequivalente di eseguirechmod 1411
(ovverochmod
comando con argomento1411
). - … che nel caso della syscall (o del suo wrapper) e del binario con lo stesso nome può essere un po confuso.
- Python Master Race ha risolto questo problema allindietro vietando tutti i ” numeri ” che iniziano con 0 , costringendo lutente a essere esplicito se desidera qualcosa di diverso dal decimale, ad es hex:
0x1FF
, binario:0b111111111
o ottale:0o777
. PYTHON POWER - Fonte immagine?
Risposta
d
significa che è una directory, se hai un file è -
e se è un link troverai un l
. Non può essere impostato / non impostato.
Se usi 0777 come permessi stai dando il pieno controllo (lettura + scrittura + esecuzione) a ogni utente / gruppo del sistema. È un modo pigro per risolvere problemi quando si hanno 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à dellutente 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
Risposta
Dopo aver risposto alla mia domanda qui e aver fatto qualche ricerca sul risultato, ho trovato un articolo che spiega tutto molto bene. Vorrei condividere alcune parti di questo articolo qui per riferimenti futuri.
Permessi di visualizzazione
Per utilizzare chmod
per modificare i permessi di un file o di una directory, devi prima sapere quale sia lattuale la modalità di accesso è. Puoi visualizzare il contenuto di una directory nel terminale cd
in quella directory e quindi utilizzare:
$ ls -l
Lopzione -l
è importante perché utilizzando ls
senza di essa verranno visualizzati solo i nomi dei file o delle cartelle nella directory.
Di seguito è riportato un esempio di utilizzo di ls -l
sulla mia home directory:
total 128 drwxr-xr-x 2 peter users 4096 Jul 5 21:03 Desktop drwxr-xr-x 6 peter users 4096 Jul 5 17:37 Documents drwxr-xr-x 2 peter users 4096 Jul 5 13:45 Downloads drwxr-xr-x 2 peter users 4096 Jun 24 03:36 Movies drwxr-xr-x 2 peter users 4096 Jun 24 03:38 Music drwxr-xr-x 2 peter users 4096 Jun 26 00:09 Pictures -rw-r--r-- 1 peter users 354 Jul 6 17:15 chmodtest
Cosa significano le colonne
La prima colonna è il tipo di ogni file:
-
-
denota un file normale. -
d
denota una directory, ovvero una cartella contenente altri file o cartelle. -
p
denota una pipe con nome (aka FIFO ). -
l
indica un collegamento simbolico.
Le lettere dopo sono i permessi, questa prima colonna è ciò che ci interesserà di più. Il secondo è quanti link ci sono in un file, possiamo ignoralo in modo sicuro. La terza colonna ha due valori / nomi: Il primo (nel mio esempio “peter”) è il nome dellutente che possiede il file. Il secondo valore (“utenti” nellesempio) è il gruppo a cui appartiene il proprietario (Ulteriori informazioni sui gruppi).
La colonna successiva è la dimensione del file o della directory in byte e le informazioni successive sono le date e le ore in cui il file o la directory è stata modificata lultima volta e, naturalmente, il nome del file o della directory.
Cosa significano i permessi
Le prime tre lettere, dopo la prima -
o d
, sono le autorizzazioni di cui dispone il proprietario. Le tre lettere successive sono autorizzazioni che si applicano al gruppo. Le ultime tre lettere sono le autorizzazioni che si applicano a tutti gli altri.
Ogni gruppo di tre lettere è composto da r
w
e x
. r
è sempre in prima posizione, w
è sempre in seconda posizione e x
è sempre in terza posizione. r
è lautorizzazione di lettura, w
è lautorizzazione di scrittura e x
è lesecuzione autorizzazione. Se cè un trattino (-
) al posto di una di queste lettere significa che il permesso non è concesso e se la lettera è presente allora è concesso.
Cartelle
In caso di cartelle i bit di modo possono essere interpretati come segue:
-
r
(leggi) sta per la capacità di leggere il sommario della directory data, -
w
(write) sta per la capacità di scrivere il sommario della directory data (crea nuovi file, cartelle; rinomina, elimina file, cartelle esistenti) se e solo se il bit di esecuzione è impostato. Altrimenti, questa autorizzazione è priva di significato. -
x
(eseguire) indica la possibilità di entrare nella directory data con il comando cd e accedere ai file, alle cartelle in quella directory.
Modifica dei permessi utilizzando il comando chmod
chmod
è un comando in Linux e altri sistemi operativi Unix-like. Ti consente di modificare i permessi (o la modalità di accesso) di un file o di una directory.
Puoi modificare i permessi in due modi diversi: – Basato su testo chmod
– chmod
Metodo di testo
basato sui numeri Per modificare le autorizzazioni o la modalità di accesso di un file, utilizziamo il comando chmod in un terminale. Di seguito è riportata la struttura generale del comando:
chmod who=permissions filename
Dove Chi è qualsiasi da un intervallo di lettere, e ciascuno indica a chi darai il permesso . Sono le seguenti:
u - The user that owns the file. g - The group the file belongs to. o - The other users i.e. everyone else. a - all of the above - use this instead of having to type ugo.
Le autorizzazioni sono le stesse già discusse (r
, w
e x
).
Il comando chmod ci consente di aggiungere e sottrarre autorizzazioni da un insieme esistente utilizzando invece + o – of =. Questo è diverso dai comandi precedenti, che essenzialmente riscrivono i permessi (cioè per cambiare un permesso da r--
a rw-
, devi comunque includere r
e w
dopo =
nel chmod
comando. Se ti sei perso r
, verrebbe revocato il permesso di r
in quanto vengono riscritti con il =. Usin g + e – evita questo aggiungendo o togliendo dal set corrente di permessi).
Metodo numerico
chmod
può anche impostare le autorizzazioni utilizzando i numeri.
Lutilizzo dei numeri è un altro metodo che ti consente di modificare i permessi per tutti e tre i proprietari, i gruppi e altri contemporaneamente. Questa struttura di base del codice è questa:
chmod xxx file/directory
Dove xxx è un numero di 3 cifre dove ogni cifra può essere qualsiasi cosa da 1 a 7. La prima cifra si applica alle autorizzazioni per il proprietario, la seconda cifra si applica alle autorizzazioni per il gruppo e la terza cifra si applica alle autorizzazioni per tutti gli altri.
In questa notazione numerica, i valori r, w e x hanno il proprio numero valore:
r=4 w=2 x=1
Per ottenere un numero di tre cifre, devi considerare quali autorizzazioni desideri che un proprietario, gruppo e utente dispongano, quindi il totale i loro valori aumentano. Ad esempio, supponiamo che volessi concedere al proprietario di una directory i permessi di lettura-scrittura e di esecuzione e volevo che il gruppo e tutti gli altri avessero solo i permessi di lettura ed esecuzione. Vorrei creare i valori numerici in questo modo:
Owner: rwx = 4+2+1=7 Group: r-x = 4+0+1=5 (or just 4+1=5) Other: r-x = 4+0+1=5 (or just 4+1=5) Final number = 755 $ chmod 755 filename
Questo è lequivalente di quanto segue:
chmod u=rwx filename chmod go=rx filename
La maggior parte delle cartelle / directory sono impostate su 755 per consentire la lettura e la scrittura e lesecuzione al proprietario, ma negano la scrittura a tutti gli altri, e normalmente i file sono 644 per consentire la lettura e la scrittura per il proprietario ma solo la lettura per tutti gli altri, fare riferimento allultima nota sulla mancanza di permessi x con file non eseguibili – è lo stesso affare qui.
Commenti
- Copiare semplicemente il testo da un altro articolo è – almeno – scortese. Forse anche una violazione del copyright. Se non è stato solo copiato o hai utilizzato parti minime (protette da copyright grazie al fair use), aggiungi almeno un link allarticolo a cui stai facendo riferimento / citando.
Risposta
Per le domande d
Questo ti dice il tipo di file Unix. Per impostazione predefinita, Unix ha solo 3 tipi di file. Sono:
-
-
– File normale -
d
– File di directory - File speciale (con 5 sottotipi):
-
b
– File di blocco -
c
– File del dispositivo di caratteri -
p
– File pipe denominato o solo file pipe -
l
– File di collegamento simbolico -
s
– File socket
-
Ulteriori informazioni qui: Tipi di file in Linux / Unix spiegati in dettaglio
0777
vs 777
Sticky bit specificato o meno. Quando il bit sticky di una directory è impostato, il filesystem tratta i file in tali directory in un modo speciale in modo che solo il proprietario del file, il proprietario della directory o lutente root possa rinominare o eliminare il file. Senza il bit sticky impostato, qualsiasi utente con autorizzazioni di scrittura ed esecuzione per la directory può rinominare o eliminare i file contenuti, indipendentemente dal proprietario del file.
0777
imposta 777 permessi di file e lo sticky bit su 0 – nessuna modalità speciale.
777
sta impostando i permessi dei file 777, senza modificare il sticky bit.
Ulteriori informazioni: sticky bit e chmod
Commenti
- Meglio: ma non offre ancora nulla che le altre risposte non abbiano ‘ già coperto …
- ( 1) Esistono tre tipi di file di base: file semplici, directory e tutto il resto. Che cosa? Dove lo prendi? Nel grande schema delle cose, i file e le directory semplici sono abbastanza simili. Le pipe con nome e i collegamenti simbolici sono più simili a file e directory semplici che a file di dispositivo o socket. (2) Pensi che
chmod 777
non cancelli i bit setuid, setgid e sticky? Provalo. - Unix ha 7 tipi di file, non 3.
Risposta
Due cose correlate che ho sempre trovato confuse e non accennate sopra sono:
I) what a “ 1 ” fa:
In chmod
: ogni “1” it supporta unautorizzazione, ad es. chmod 777 it supporta tutti, ma fai attenzione perché
in umask
: ogni “1” dis supporta unautorizzazione, ad esempio umask 777 dis ables all.
II ) “owners” vs.file “users” :
In altre parole, ci sono utenti che “possiedono” e utenti che “utilizzano” .
Ogni file è di proprietà , allo stesso tempo, da due entità:
- un singolo utente specifico e
- un singolo, specifico gruppo (di uno o più utenti).
Pertanto, ogni file può essere utilizzato da un utente specifico in tre modi:
1) Direttamente, poiché lutente che possiede il file,
2) in direttamente, come membro del gruppo proprietario del file e
3 ) possibilmente, come qualcun altro.
Altrimenti , il risposte sopra, fai un ottimo lavoro! Grazie a tutti.
S_IFDIR
. Non ‘ la utilizzi quando imposti la modalità file, ma la funzionestat()
restituisce effettivamente il valore 040750 perdrwxr-x---
.