GNU/Linux >> Linux Esercitazione >  >> Cent OS

Centos - Comportamento delle autorizzazioni di collegamento hardware diverso tra Centos 6 e Centos 7?

Ricevo un errore di autorizzazione in CentOS 7 quando provo a creare un collegamento fisico. Con le stesse autorizzazioni impostate in CentOS 6 non ottengo l'errore. Il problema è incentrato sulle autorizzazioni di gruppo. Non sono sicuro di quale versione del sistema operativo sia corretta e quale sia sbagliata.

Lascia che ti illustri cosa sta succedendo. Nella mia attuale directory di lavoro, ho due directory:sorgente e destinazione. All'inizio, la destinazione è vuota; sorgente contiene un file di testo.

[[email protected] cwd]# ls -l
total 0
drwxrwxrwx. 2 root root  6 Jun 12 14:33 destination
drwxrwxrwx. 2 root root 21 Jun 12 14:33 source
[[email protected] cwd]# ls -l destination/
total 0
[[email protected] cwd]# ls -l source/
total 4
-rw-r--r--. 1 root root 8 Jun 12 14:20 test.txt
[[email protected] cwd]# 

Come puoi vedere, per quanto riguarda i permessi le due directory sono 777, con il proprietario e il gruppo impostati su root. Anche il proprietario e il gruppo del file di testo sono entrambi impostati su root. Tuttavia, le autorizzazioni del file di testo sono di lettura-scrittura per il proprietario ma di sola lettura per il gruppo.

Quando ho effettuato l'accesso come root, non ho problemi a creare un collegamento reale nella directory di destinazione che punta al file di testo (nella directory di origine).

[[email protected] cwd]# ln source/test.txt destination/
[[email protected] cwd]# ls destination/
test.txt

Tuttavia, se accedo come un altro utente, in questo caso admin, non posso creare il collegamento. Ricevo:"Operazione non consentita".

[[email protected] cwd]# rm -f destination/test.txt 
[[email protected] cwd]# su admin
bash-4.2$ pwd
/root/cwd
bash-4.2$ ln source/test.txt destination/
ln: failed to create hard link ‘destination/test.txt’ => ‘source/test.txt’: Operation not permitted

Quello che succede in realtà ha senso per me, ma poiché quanto sopra è consentito in CentOS 6, volevo verificare se stavo fraintendendo qualcosa. A me sembra un bug in CentOS 6 che è stato corretto in CentOS 7.

Qualcuno sa cosa regala? Ho ragione a ritenere che il comportamento di cui sopra sia il comportamento corretto? CentOS 6 è corretto? Oppure, hanno entrambi ragione e forse c'è qualche sottile problema di autorizzazioni di gruppo che mi manca? Grazie.

Modifica: Ho provato lo stesso test proprio ora su una macchina virtuale Debian v7 che ho. Debian concorda con CentOS 7:"Operazione non consentita".

Modifica n. 2: Ho appena provato la stessa cosa su Mac OS X (Yosemite). Ha funzionato come ha fatto CentOS 6. In altre parole, ha consentito la creazione del collegamento. (Nota:su OS X, il gruppo principale è chiamato "wheel". Questa è l'unica differenza, per quanto ne so.)

Risposta accettata:

Ho creato alcune nuove macchine virtuali CentOS 6 e 7 e sono stato in grado di ricreare il comportamento esatto che hai mostrato. Dopo aver scavato un po', si scopre che questo è in realtà un cambiamento nel kernel per quanto riguarda il comportamento predefinito rispetto ai collegamenti hardware e software per motivi di sicurezza. Le pagine seguenti mi hanno indicato la giusta direzione:

Correlati:cambiare al volo il colore di sfondo del terminale GNOME?

http://kernel.opensuse.org/cgit/kernel/commit/?id=561ec64ae67ef25cac8d72bb9c4bfc955edfd415

http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1

Se rendi scrivibile il file world, il tuo utente amministratore sarà in grado di creare il collegamento fisico.

Per ripristinare il comportamento di CentOS 6 a livello di sistema, sono stati aggiunti nuovi parametri del kernel. Imposta quanto segue in /etc/sysctl.conf:

fs.protected_hardlinks = 0
fs.protected_symlinks = 0

quindi esegui

sysctl -p

Per quanto riguarda il motivo per cui il tuo programma sceglie di utilizzare i collegamenti invece di copiare i file, perché creare una copia esatta di un file che devi utilizzare quando puoi semplicemente creare una voce che punti ai blocchi originali? Ciò consente di risparmiare spazio su disco e l'operazione è meno costosa in termini di CPU e I/O. Il nuovo hard link è lo stesso file, solo con metadati/inode diversi. Se dovessi eliminare il file originale dopo aver creato un collegamento reale, ciò non influirà sul collegamento. Un file viene "eliminato" solo dopo che tutti i collegamenti sono stati rimossi.


Cent OS
  1. Come creare collegamenti rigidi e simbolici in Linux

  2. Spiegazione di hard link e soft link in Linux

  3. Ulimit:differenza tra limiti hard e soft?

  4. La differenza tra collegamenti simbolici e hard?

  5. Centos 4.8 e Glibc 2.5?

Copia i file tra Linux e FreeDOS

Installa il supporto per Apache2, PHP5 e MySQL su CentOS 6.5 (LAMP)

Centos – La differenza tra spegnimento alle 18:00 e spegnimento alle 18:00?

Come installare e configurare web2py su CentOS 7

Script di shell per trovare lo stato e la velocità del collegamento dell'interfaccia di rete (CentOS/RHEL)

Qual è la differenza tra root e sudo?