Ich erhalte einen Berechtigungsfehler in CentOS 7, wenn ich versuche, einen festen Link zu erstellen. Mit den gleichen Berechtigungen, die in CentOS 6 festgelegt wurden, wird der Fehler nicht angezeigt. Das Problem konzentriert sich auf Gruppenberechtigungen. Ich bin nicht sicher, welche Betriebssystemversion richtig und welche falsch ist.
Lassen Sie mich veranschaulichen, was passiert. In meinem aktuellen Arbeitsverzeichnis habe ich zwei Verzeichnisse: Quelle und Ziel. Zu Beginn ist das Ziel leer. Quelle enthält eine Textdatei.
[root@tc-dlx-nba 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
[root@tc-dlx-nba cwd]# ls -l destination/
total 0
[root@tc-dlx-nba cwd]# ls -l source/
total 4
-rw-r--r--. 1 root root 8 Jun 12 14:20 test.txt
[root@tc-dlx-nba cwd]#
Wie Sie sehen können, sind die beiden Verzeichnisse in Bezug auf die Berechtigungen 777, wobei sowohl der Eigentümer als auch die Gruppe auf root festgelegt sind. Der Eigentümer und die Gruppe der Textdatei sind ebenfalls auf root festgelegt. Die Berechtigungen der Textdatei sind jedoch für den Eigentümer schreibgeschützt, für die Gruppe jedoch schreibgeschützt.
Wenn ich als root angemeldet bin, kann ich problemlos einen Hardlink im Zielverzeichnis erstellen, der auf die Textdatei (im Quellverzeichnis) verweist.
[root@tc-dlx-nba cwd]# ln source/test.txt destination/
[root@tc-dlx-nba cwd]# ls destination/
test.txt
Wenn ich mich jedoch als ein anderer Benutzer anmelde, in diesem Fall als Administrator, kann ich den Link nicht erstellen. Ich bekomme: "Operation nicht erlaubt."
[root@tc-dlx-nba cwd]# rm -f destination/test.txt
[root@tc-dlx-nba 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
Was passiert, macht für mich tatsächlich Sinn, aber da das oben Genannte in CentOS 6 erlaubt ist, wollte ich überprüfen, ob ich etwas falsch verstanden habe. Für mich scheint es ein Fehler in CentOS 6 zu sein, der in CentOS 7 behoben wurde.
Weiß jemand was gibt? Habe ich recht, dass das obige Verhalten das richtige ist? Ist CentOS 6 richtig? Oder haben beide Recht und vielleicht fehlt mir ein subtiles Problem mit Gruppenberechtigungen? Vielen Dank.
Bearbeiten: Ich habe den gleichen Test gerade auf einer Debian v7-VM versucht, die ich habe. Debian stimmt CentOS 7 zu: "Betrieb nicht erlaubt."
Edit # 2: Ich habe gerade dasselbe unter Mac OS X (Yosemite) versucht. Das hat genauso funktioniert wie CentOS 6. Mit anderen Worten, der Link konnte erstellt werden. (Hinweis: Unter OS X heißt die Stammgruppe "Rad". Soweit ich das beurteilen kann, ist dies der einzige Unterschied.)
quelle
Antworten:
Ich habe einige neue CentOS 6 und 7 VMs hochgefahren und konnte das genaue Verhalten, das Sie gezeigt haben, wiederherstellen. Nach einigem Graben stellt sich heraus, dass dies aus Sicherheitsgründen tatsächlich eine Änderung im Kernel in Bezug auf das Standardverhalten in Bezug auf Hard- und Soft-Links ist. Die folgenden Seiten haben mich in die richtige Richtung gelenkt:
http://kernel.opensuse.org/cgit/kernel/commit/?id=561ec64ae67ef25cac8d72bb9c4bfc955edfd415
http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1
Wenn Sie die Dateiewelt beschreibbar machen, kann Ihr Administrator den Hardlink erstellen.
Um zum systemweiten Verhalten von CentOS 6 zurückzukehren, wurden neue Kernelparameter hinzugefügt. Stellen Sie in /etc/sysctl.conf Folgendes ein:
dann renne
Warum Ihr Programm Links verwendet, anstatt Dateien zu kopieren, warum eine exakte Kopie einer Datei erstellen, die Sie verwenden müssen, wenn Sie nur einen Eintrag erstellen können, der auf die Originalblöcke verweist? Dies spart Speicherplatz und der Betrieb ist in Bezug auf CPU und E / A weniger kostspielig. Der neue Hardlink ist dieselbe Datei, nur mit unterschiedlichen Metadaten / Inode. Wenn Sie die Originaldatei nach dem Erstellen eines festen Links löschen, hat dies keine Auswirkungen auf den Link. Eine Datei wird erst gelöscht, wenn alle Links entfernt wurden.
quelle