Je reçois une erreur d'autorisation dans CentOS 7 lorsque j'essaie de créer un lien dur. Avec les mêmes autorisations définies dans CentOS 6, je ne reçois pas l'erreur. Le problème est centré sur les autorisations de groupe. Je ne sais pas quelle version du système d'exploitation est correcte et laquelle est incorrecte.
Permettez-moi d'illustrer ce qui se passe. Dans mon répertoire de travail actuel, j'ai deux répertoires: source et destination. Au début, la destination est vide; la source contient un fichier texte.
[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]#
Comme vous pouvez le voir, en ce qui concerne les autorisations, les deux répertoires sont 777, avec le propriétaire et le groupe définis sur root. Le propriétaire et le groupe du fichier texte sont également définis sur root. Cependant, les autorisations du fichier texte sont en lecture-écriture pour le propriétaire mais en lecture seule pour le groupe.
Lorsque je suis connecté en tant que root, je n'ai aucun problème à créer un lien dur dans le répertoire de destination pointant vers le fichier texte (dans le répertoire source).
[root@tc-dlx-nba cwd]# ln source/test.txt destination/
[root@tc-dlx-nba cwd]# ls destination/
test.txt
Cependant, si je me connecte en tant qu'autre utilisateur, dans ce cas, admin, je ne peux pas créer le lien. J'obtiens: "Opération non autorisée."
[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
Ce qui se passe a du sens pour moi, mais comme ce qui précède est autorisé dans CentOS 6, je voulais vérifier si j'avais mal compris quelque chose. Pour moi, cela ressemble à un bogue dans CentOS 6 qui a été corrigé dans CentOS 7.
Quelqu'un sait ce qui donne? Ai-je raison de croire que le comportement ci-dessus est le bon comportement? Est-ce CentOS 6 qui est correct? Ou, ont-ils raison et peut-être qu'il y a un problème subtil d'autorisations de groupe qui me manque? Merci.
Edit: J'ai essayé le même test tout à l'heure sur une machine virtuelle Debian v7 que j'ai. Debian est d'accord avec CentOS 7: "Opération non autorisée."
Edit # 2: Je viens d'essayer la même chose sur Mac OS X (Yosemite). Cela a fonctionné comme CentOS 6 l'a fait. En d'autres termes, cela a permis de créer le lien. (Remarque: Sous OS X, le groupe racine est appelé «roue». C'est la seule différence, pour autant que je sache.)
la source
Réponses:
J'ai fait tourner de nouveaux CentOS 6 et 7 vm et j'ai pu recréer le comportement exact que vous avez montré. Après avoir creusé, il s'avère que c'est en fait un changement dans le noyau concernant le comportement par défaut en ce qui concerne les liens durs et mous pour des raisons de sécurité. Les pages suivantes m'ont indiqué la bonne direction:
http://kernel.opensuse.org/cgit/kernel/commit/?id=561ec64ae67ef25cac8d72bb9c4bfc955edfd415
http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1
Si vous rendez le monde du fichier accessible en écriture, votre utilisateur administrateur pourra créer le lien dur.
Pour revenir au comportement du système CentOS 6 à l'échelle du système, de nouveaux paramètres du noyau ont été ajoutés. Définissez les éléments suivants dans /etc/sysctl.conf:
puis exécutez
Quant à savoir pourquoi votre programme choisit d'utiliser des liens au lieu de copier des fichiers, pourquoi créer une copie exacte d'un fichier que vous devez utiliser lorsque vous pouvez simplement créer une entrée qui pointe vers les blocs d'origine? Cela économise de l'espace disque et l'opération est moins coûteuse en termes de CPU et d'E / S. Le nouveau lien dur est le même fichier, juste avec des métadonnées / inodes différents. Si vous deviez supprimer le fichier d'origine après avoir créé un lien dur, cela n'affectera pas le lien. Un fichier n'est «supprimé» qu'une fois tous les liens supprimés.
la source