Při pokusu o vytvoření pevného odkazu se mi v CentOS 7 zobrazuje chyba oprávnění. Se stejnými oprávněními nastavenými v CentOS 6 se mi chyba nezobrazuje. Problém se soustředí na skupinová oprávnění. Nejsem si jistý, která verze OS je správná a která špatná.
Dovolte mi ilustrovat, co se děje. V mém aktuálním pracovním adresáři mám dva adresáře:zdrojový a cílový. Na začátku je cíl prázdný; zdroj obsahuje textový soubor.
[[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]#
Jak můžete vidět, pokud jde o oprávnění, dva adresáře jsou 777, přičemž vlastník i skupina jsou nastaveny na root. Vlastník a skupina textového souboru jsou také nastaveni jako root. Oprávnění textového souboru jsou však pro vlastníka pro čtení a zápis, ale pro skupinu pouze pro čtení.
Když jsem přihlášen jako root, nemám problém vytvořit pevný odkaz v cílovém adresáři směřující na textový soubor (ve zdrojovém adresáři).
[[email protected] cwd]# ln source/test.txt destination/
[[email protected] cwd]# ls destination/
test.txt
Pokud se však přihlásím jako jiný uživatel, v tomto případě admin, nemohu vytvořit odkaz. Dostávám:„Operace není povolena.“
[[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
To, co se děje, mi ve skutečnosti dává smysl, ale protože výše uvedené je v CentOS 6 povoleno, chtěl jsem zkontrolovat, zda jsem něčemu nerozuměl. Mně to připadá jako chyba v CentOS 6, která byla opravena v CentOS 7.
Ví někdo, co dává? Domnívám se správně, že výše uvedené chování je správné? Je to správně CentOS 6? Nebo mají oba pravdu a možná mi chybí nějaký jemný problém s oprávněními skupiny? Děkuji.
Upravit: Zkoušel jsem stejný test právě teď na virtuálním počítači Debian v7, který mám. Debian souhlasí s CentOS 7:„Operace není povolena.“
Úprava č. 2: Právě jsem to samé zkusil na Mac OS X (Yosemite). To fungovalo stejně jako CentOS 6. Jinými slovy, umožnil vytvoření odkazu. (Poznámka:V OS X se kořenová skupina nazývá „kolečko“. To je jediný rozdíl, pokud vím.)
Přijatá odpověď:
Vytočil jsem několik nových CentOS 6 a 7 vm's a byl jsem schopen znovu vytvořit přesné chování, které jste ukázali. Po nějakém prozkoumání se ukázalo, že se ve skutečnosti jedná o změnu v jádře ohledně výchozího chování s ohledem na pevné a měkké odkazy z důvodu bezpečnosti. Následující stránky mě navedly správným směrem:
Související:Změnit barvu pozadí terminálu GNOME za běhu?http://kernel.opensuse.org/cgit/kernel/commit/?id=561ec64ae67ef25cac8d72bb9c4bfc955edfd415
http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1
Pokud nastavíte svět souborů tak, aby bylo možné zapisovat, váš administrátor bude moci vytvořit pevný odkaz.
Pro návrat k chování celého systému CentOS 6 byly přidány nové parametry jádra. V /etc/sysctl.conf nastavte následující:
fs.protected_hardlinks = 0
fs.protected_symlinks = 0
pak spusťte
sysctl -p
Pokud jde o to, proč se váš program rozhodl používat odkazy místo kopírování souborů, proč vytvářet přesnou kopii souboru, který potřebujete použít, když můžete vytvořit pouze položku, která ukazuje na původní bloky? To šetří místo na disku a provoz je méně nákladný z hlediska CPU a I/O. Nový pevný odkaz je stejný soubor, jen s jinými metadaty/inodem. Pokud byste po vytvoření pevného odkazu smazali původní soubor, odkaz to neovlivní. Soubor je „smazán“ až po odstranění všech odkazů.