GNU/Linux >> Tutoriels Linux >  >> Cent OS

Centos - Comportement des autorisations de lien dur différent entre Centos 6 et Centos 7 ?

Je reçois une erreur d'autorisations dans CentOS 7 lorsque j'essaie de créer un lien physique. Avec les mêmes autorisations définies dans CentOS 6, je n'obtiens 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épart, destination est vide; source contient un fichier texte.

[[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]# 

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 physique dans le répertoire de destination pointant vers le fichier texte (dans le répertoire source).

[[email protected] cwd]# ln source/test.txt destination/
[[email protected] 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."

[[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

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 que ça donne ? Ai-je raison de croire que le comportement ci-dessus est le comportement correct ? Est-ce CentOS 6 qui est correct ? Ou, les deux ont-ils raison et peut-être y a-t-il un problème subtil d'autorisations de groupe qui me manque? Merci.

Modifier : J'ai essayé le même test tout à l'heure sur une VM Debian v7 que j'ai. Debian est d'accord avec CentOS 7 :« Opération non autorisée. »

Modification #2 : Je viens d'essayer la même chose sur Mac OS X (Yosemite). Cela a fonctionné comme CentOS 6. En d'autres termes, il a permis de créer le lien. (Remarque :sur OS X, le groupe racine s'appelle "roue". C'est la seule différence, pour autant que je sache.)

Réponse acceptée :

J'ai créé de nouvelles machines virtuelles CentOS 6 et 7 et j'ai pu recréer le comportement exact que vous avez montré. Après quelques recherches, il s'avère qu'il s'agit en fait d'un changement dans le noyau concernant le comportement par défaut en ce qui concerne les liens physiques et logiciels pour des raisons de sécurité. Les pages suivantes m'ont orienté dans la bonne direction :

En relation:Changer la couleur d'arrière-plan du terminal GNOME à la volée?

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 physique.

Pour revenir au comportement de CentOS 6 à l'échelle du système, de nouveaux paramètres de noyau ont été ajoutés. Définissez les éléments suivants dans /etc/sysctl.conf :

fs.protected_hardlinks = 0
fs.protected_symlinks = 0

puis lancez

sysctl -p

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 dont vous avez besoin alors que vous pouvez simplement créer une entrée qui pointe vers les blocs d'origine ? Cela permet d'économiser de l'espace disque et l'opération est moins coûteuse en termes de CPU et d'E/S. Le nouveau lien physique est le même fichier, juste avec des métadonnées/inodes différentes. Si vous deviez supprimer le fichier d'origine après avoir créé un lien physique, cela n'affectera pas le lien. Un fichier n'est "supprimé" qu'une fois que tous les liens ont été supprimés.


Cent OS
  1. Centos - La différence entre l'arrêt à 18h00 et l'arrêt à 18h00 ?

  2. Ulimit :différence entre les limites dures et souples ?

  3. La différence entre les liens symboliques et les liens matériels ?

  4. Différence entre l'utilisateur Sudo et l'utilisateur root ?

  5. Centos - "Lien symbolique non autorisé ou cible du lien non accessible" / Apache sur Centos 6 ?

Copier des fichiers entre Linux et FreeDOS

Installez la prise en charge d'Apache2, PHP5 et MySQL sur CentOS 6.5 (LAMP)

Le journal d'audit et le fichier de messages ne tournent pas sur CentOS/RHEL

Script Shell pour trouver l'état et la vitesse de la liaison de l'interface réseau (CentOS/RHEL)

Différence entre les liens symboliques et les liens physiques sous Linux

Quelle est la différence entre root et sudo ?