Quali sono i diversi modi per impostare i permessi dei file ecc. Su gnu / linux


19

Su Unix, molto tempo fa, ho appreso chmod: il modo tradizionale di impostare i permessi, su Unix (e consentire ai programmi di ottenere privilegi, usando setuid, setgid).

Di recente ho scoperto alcuni comandi più recenti, su GNU / Linux:

  • setfaclestende i ugo:rwxbit tradizionali e il tbit di chmod.
  • setcapoffre un maggiore controllo della granella rispetto a ug:sbit di chmod.
  • chattr Consente alcuni altri controlli (un po 'un mix) del file.

Ce ne sono altri?


vedi anche unix.stackexchange.com/q/183994/4778 per maggiori dettagli suchmod
ctrl-alt-delor

vedere anche unix.stackexchange.com/q/246606/4778 per ACL estesi (richACL).
ctrl-alt-delor l'

Risposte:


28

chmod: cambia i bit della modalità file

Utilizzo (modalità ottale):

    chmod <octal-mode> files...

Utilizzo (modalità simbolica):

    chmod <references><operator><modes> files..

referencesè una combinazione delle lettere ugoa, che specifica quale accesso dell'utente filesverrà modificato:

  • u l'utente che lo possiede
  • galtri utenti nel filegruppo di
  • o altri utenti non appartenenti al gruppo del file
  • a tutti gli utenti

    Se omesso, viene impostato per impostazione predefinita su tutti gli utenti, ma umaskvengono modificate solo le autorizzazioni consentite da .

    operatorè uno dei personaggi +-=:

    • + aggiungere i bit della modalità file specificati ai bit della modalità file esistenti di ciascuno file
    • - rimuove i bit della modalità file specificati nei bit della modalità file esistenti di ciascuno file
    • =aggiunge i bit specificati e rimuove i bit non specificati, ad eccezione dei bit setuide setgidimpostati per le directory, se non diversamente specificato.

    modeconsiste in una combinazione di lettere rwxXst, che specifica quale bit di autorizzazione deve essere modificato:

    • r leggere
    • w Scrivi
    • x esegui (o cerca le directory)
    • X eseguire / cercare solo se il file è una directory o ha già impostato il bit di esecuzione per alcuni utenti
    • ssetuid o setgid (a seconda di quanto specificato references)
    • t flag di cancellazione limitata o bit appiccicoso

    In alternativa, modepuò essere costituito da una delle lettere ugo, nel qual caso la modalità corrisponde alle autorizzazioni attualmente concesse al proprietario ( u), al membro del filegruppo ( g) o alle autorizzazioni degli utenti in nessuna delle precedenti categorie ( o).

I vari pezzi di chmodspiegati:

  • Controllo accessi (vedi anche setfacl)
    • rwx - autorizzazioni di lettura (r), scrittura (w) ed esecuzione / cross (x).
      • Leggi (r) influenza se un file può essere letto o se è possibile elencare una directory.
      • Scrivi (w) influenza se un file può essere scritto o se una directory può essere modificata (file aggiunti, eliminati, rinominati).
      • Esegui (x) influenza se è possibile eseguire un file, utilizzare per gli script (vedere #!) e altri file eseguibili.
      • La croce (x) influisce sulla possibilità di attraversare una directory.
    • se t- sticky bit (t) e setgid (s) nelle directory
      • La parte adesiva riguarda solo le directory. Impedirà a chiunque, tranne il proprietario del file e root, di eliminare i file nella directory.
      • il bit setgid nelle directory, farà sì che i nuovi file e directory abbiano il gruppo impostato sullo stesso gruppo e le nuove directory abbiano il setgid bit impostato (vedere anche i valori predefiniti in setfacl).
    • s - setuid, setgid, su file eseguibili.
      • Questo può influire negativamente sulla sicurezza, se non sai cosa stai facendo.
      • Quando viene eseguito un eseguibile, se è impostato uno di questi bit, l'utente / gruppo effettivo dell'eseguibile diventerà quello del file. Quindi il programma funziona come quell'utente. vedere setcapper un modo più moderno per farlo.

chown chgrp:


chattr: modifica gli attributi del file

Uso:

    chattr <operator><attribute> files...

operatorè uno dei caratteri +-=: * +aggiunge gli attributi selezionati all'esistente attributesdi files * -rimuove il attributes * selezionato * =sovrascrive l'insieme corrente di attributi che i file hanno con quelli specificati attributes.

attributeè una combinazione delle lettere acdeijstuADST, che corrispondono agli attributi:

  • a solo append
  • c compressa
  • d nessuna discarica
  • e formato di estensione
  • i immutabile
  • j journaling dei dati
  • s cancellazione sicura
  • t nessuna fusione di coda
  • u undeletable
  • Anessun atimeaggiornamento
  • D aggiornamenti di directory sincroni
  • S aggiornamenti sincroni
  • T top della gerarchia di directory

setfattr: modifica gli attributi del file esteso

Utilizzo (impostare l'attributo):

    setfattr -n <name> -v <value> files...

Utilizzo (rimuovi):

    setfattr -x <name> files...

name è il nome dell'attributo esteso da impostare o rimuovere

value è il nuovo valore dell'attributo esteso


setfacl: modifica gli elenchi di controllo di accesso ai file

Uso:

    setfacl <option> [default:][<target>:][<param>][:<perms>] files...

option deve includere uno dei seguenti:

  • --set imposta l'ACL di un file o di una directory, sostituendo l'ACL precedente
  • -m| --modifymodificare l'ACL di un file o directory
  • -x| --remove rimuovere le voci ACL di un file o di una directory

    targetè una delle lettere ugmo(o la forma più lunga mostrata di seguito):

  • u, usersautorizzazione di un utente designato identificato da param, impostazione predefinita al proprietario del file uidse omessa

  • g, groupautorizzazione di un gruppo nominato identificato da param, impostazione predefinita al gruppo proprietario uidse omesso
  • m, maskmaschera dei diritti effettiva
  • o, otherautorizzazioni di altri

    permsè una combinazione delle lettere rwxX, che corrispondono alle autorizzazioni:

  • r leggere

  • w Scrivi
  • x eseguire
  • X eseguire solo se il file è una directory o dispone già dell'autorizzazione di esecuzione per alcuni utenti

    In alternativa, permspuò essere una cifra ottale ( 0- 7) che indica l'insieme di autorizzazioni.


setcap: modifica funzionalità file

Uso:

    setcap <capability-clause> file 

A è capability-clausecostituito da un elenco separato da virgole di nomi di capacità seguito da un elenco di coppie operatore-flag.

Gli operatori disponibili sono =, +e -. I flag disponibili sono e, ie pche corrispondono alla effettiva , Ereditabili e consentite pacchetti di funzioni.

L' =operatore aumenterà i set di capacità specificati e ripristinerà gli altri. Se non viene fornito alcun flag insieme =all'operatore, tutti i set di capacità verranno ripristinati. Gli operatori +e -aumenteranno o diminuiranno rispettivamente uno o più set di capacità specificati.


chcon: modifica il contesto di sicurezza SELinux del file

Uso:

    chcon [-u <user>] [-r <role>] [-t <type>] files...

utente è l'utente SELinux, come user_u, system_uo root.

ruolo è il ruolo SELinux (sempre object_rper i file)

tipo è il tipo di soggetto SELinux


chsmack: modifica gli attributi estesi di SMACK

Uso:

    chsmack -a <value> file

valueè l'etichetta SMACK da impostare per l' SMACK64attributo del file esteso


setrichacl : modifica l'elenco di controllo accessi avanzati .

richacl è una funzione che aggiungerà ACL più avanzati.

Attualmente un lavoro in corso, quindi non posso dirti molto su di loro. Non li ho usati.

Vedi anche questa domanda Esistono ACL di filesystem più avanzati oltre ai tradizionali ACL 'rwx' e POSIX? e pagina man


5
+1 Se hai aggiunto esempi di utilizzo di ciascun cmd, questa risposta sarebbe estremamente utile, come risposta canonica possiamo fare riferimento lungo la strada!
slm

1
@slm Grazie per il suggerimento. Ho aggiunto una breve spiegazione dell'utilizzo per ciascun comando.
Thomas Nyman,

Un avvertimento per chiunque desideri sfruttare le capacità oltre quelle mostrate qui. Ho usato la capacità come indicato qui. Tuttavia, cercare di ereditarli (utilmente) su fork e exec sembra impossibile. Penso che ci sia un bug vedi unix.stackexchange.com/questions/196483/…
ctrl-alt-delor

Il bug che avevo menzionato in precedenza, era un bug di progettazione ed era stato corretto nel kernel 4.3 con l'aggiunta di funzionalità ambientali, vedi man7.org/linux/man-pages/man7/capabilities.7.html
ctrl-alt-delor

1
Mi piacerebbe vedere esempi su tutto ciò, questa diventerebbe una risposta canonica!
statquant

1

di alto livello:

  • permessi di base del file system supportati da tutto il linux e tutto il filesystem che è -rwxrwxrwxgestito da chmod, insieme agli identificatori di proprietario e di gruppo legati a ogni file o cartella sul filesystem gestito da chowne chgrp; praticamente tutti conoscono questo pezzo.
  • Attributi di file estesi che è abbreviato o conosciuto da xattr . Sono caratteristiche del file system che consentono agli utenti di associare file di computer a metadati non interpretati dal filesystem, mentre gli attributi regolari hanno uno scopo strettamente definito dal filesystem; gli attributi sono name: coppie di valori associate permanentemente a file e directory, simili alle stringhe di ambiente associate a un processo. Esistono comandi specifici di Linux relativi alla semplice impostazione di questi metadati su vari file / cartelle.
  • SELINUX noto come Linux sicuro . Puoi cercare sul web la cronologia. Sappi anche che ci sono alternative a SELINUX come AppArmor e probabilmente ce ne sono altre. A questo punto, questi sono moduli del kernel che forniscono funzionalità e meccanismi per fare MAC (controllo di accesso obbligatorio) usando xattr; selinux archivia le etichette di sicurezza dei file in xattrs . E ci sono comandi specifici relativi a selinux.

altri punti chiave:

  • l'era e la versione di gnu / linux sono importanti per quanto riguarda xattr e selinux per ciò che è disponibile e ciò che è funzionale.
  • è stato riferito che non tutti i file system supportano xattr; meglio lasciato alla ricerca individuale basata sulla distribuzione e versione di Linux in uso (rhel / suse / debian, irix, solaris, aix, unix degli anni '60)
  • sono proprio le intrinseche autorizzazioni di base per file / cartelle con uid's / gid's plus xattr's che rendono tutto possibile; SELinux usa xattr per archiviare le etichette di sicurezza di file / cartelle ... con selinux tutto il lavoro di basso livello è in qualche modo fatto / definito in xattr per essere usato da te. Quindi se il tuo antico file system non supporta xattr, non utilizzerai selinux.
  • puoi abilitare o disabilitare selinux (o apparmor o qualsiasi altro modulo del kernel)
  • a seconda della versione di Linux, potrebbe essere possibile abilitare o disabilitare gli xattr per un determinato file system montato; Ricordo in SLES 11 l'opzione mount di fstab di user_xattre potrei scegliere di non avere xattr disponibile sul file system root al momento dell'installazione; penso ora con RHEL / CentOS 7 che xattr è lì di default e non puoi non averlo.
  • quando lo fai lsse vedi -rwxrwxrwx+che +indica che un attributo di file esteso è presente su quell'oggetto .
  • Elenco controllo accessi (ACL): è un elenco di autorizzazioni associate a un oggetto. Un ACL specifica a quali utenti o processi di sistema è concesso l'accesso agli oggetti, nonché quali operazioni sono consentite su determinati oggetti.
  • da centos wiki selinux: selinux è un meccanismo di sicurezza MAC implementato nel kernel; senza SELinux abilitato, solo i tradizionali metodi di controllo dell'accesso discrezionale (DAC) come permessi dei file o liste di controllo degli accessi (ACL) sono usati per controllare l'accesso ai file degli utenti; Sia gli utenti che i programmi possono concedere autorizzazioni di file non sicure ad altri o, al contrario, ottenere l'accesso a parti del sistema che non dovrebbero altrimenti essere necessarie per il normale funzionamento; Essenzialmente sotto il modello DAC tradizionale, ci sono due livelli di privilegi, root e user, e nessun modo semplice per applicare un modello di privilegio minimo. Molti processi avviati da root in seguito rilasciano i loro diritti per essere eseguiti come utenti con restrizioni
  • vale la pena leggere in prospettiva l'uso di xattr e ACL, poiché Linux [kernel] tratta tutto come un file (dispositivi a blocchi o porte di rete), è possibile taggare quasi tutto con un xattr e imporre un qualche tipo di controllo di accesso tramite selinux, è non solo file / cartelle. https://wiki.centos.org/HowTos/SELinux
  • xattr può causare problemi con lo spostamento dei dati tra sistemi e file system e NFS, in cui un sistema [più recente] ha un supporto più completo di xattr rispetto ai sistemi più vecchi che potrebbero non riconoscere tutti questi attributi estesi [se non del tutto]. tarFai attenzione a usare roba con xattr, se rimane su quel sistema nessun problema ma se va altrove può essere problematico se gli xattr sono importanti (es. Samba e copia tra win10 ntfs e linux ext3 / 4, btrfs, xfs; o indietro e avanti tra i dispositivi di archiviazione collegati in rete)
  • se non esiste selinux o altri meccanismi che applicano ACL secondo quanto definito in xattrs, xattrteoricamente s non può significare nulla ed essere lasciato cadere o spogliato perché a quel punto è solo un bagaglio extra.
  • fare attenzione a disabilitare selinux ora in rhel / centos 7 perché se si perdono le etichette del file system tramite xattr ciò causerà problemi quando si ripristina selinux in forzatura o permissivo ; dipende ancora dalla tua versione di Linux e da come sta usando xattr tramite selinux.

La condivisione Samba di base non funziona in RHEL / CentOS 7 ... perché selinux di default è impostato per forzare; selinux ha negato tutto fino a quando non lo permetti, quindi disabilita selinux (non valido) o impostalo su permissivo. Se lasci selinux come applicazione, allora devi etichettare la cartella che vuoi condividere con samba con un attributo esteso, così selinux riconoscerà e consentirà la condivisione. Quindi se lasci selinux selettivo quindi con tutti i comandi selinux (che quindi imposteranno i necessari xattr):

# from centos 7.6 /etc/samba/smb.conf.example

# Turn the samba_domain_controller Boolean on to allow a Samba PDC to use the useradd and groupadd family of binaries.
# Run the following command as the root user to turn this Boolean on:

# this is an selinux command, not 
setsebool -P samba_domain_controller on

# If you create a new directory, such as a new top-level directory, label it with      samba_share_t
# so that SELinux allows Samba to read and write to it.
# Do not label system directories, such as /etc/ and /home/ with samba_share_t, as such directories should already have an SELinux label.


# the xattr having the name "samba_share_t" is labelled onto "/mydatashare"
# this xattr of syntax "samba_share_t" is recognized by an existing rule in selinux
# if the folder does not have the xattr "samba_share_t" then the  rule in selinux (when enforced) will prevent access via samba to the folder.

chcon -t samba_share_t /mydatashare

usi inoltre selinux, sul sistema linux con questa condivisione samba, per imporre restrizioni su file / cartelle in questa condivisione samba (usando qualunque attributo esteso). Poiché questi file / cartelle sono condivisi, un utente ne copia legittimamente alcuni sul proprio PC win10, quindi li copia di nuovo, perdendo l'attributo esteso. Ora, dopo quella copia avanti e indietro, su quel sistema linux selinux limiterà l'accesso a detti file perché non è più presente il necessario xattr, e gli utenti / amministratori sbattono la testa chiedendosi perché le cose hanno appena funzionato ora non ... imposta selinux consentire e riconoscere il problema della perdita xattrdei messaggi di log nei registri di controllo, ma non indicherà direttamente che era il risultato della perdita della xattr da parte della copia avanti e indietro. Considera anche il backup e il ripristino dei dati e il potenziale lavoro necessario da ricordarexattroltre a uid / gid se si desidera applicare la sicurezza in base ai messaggi corretti xattr.

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.