GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi Linux/POSIX a-t-il lchown mais pas lchmod ?

Linux, comme la plupart des systèmes de type Unix (Apple OS/X étant l'une des rares exceptions), ignore les permissions sur les liens symboliques lorsqu'il s'agit de résoudre leurs cibles par exemple.

Cependant, la propriété des liens symboliques, comme d'autres fichiers, est pertinente lorsqu'il s'agit de l'autorisation de renommer ou de dissocier leurs entrées dans les répertoires qui ont le t jeu de bits, tel que /tmp .

Pour pouvoir supprimer ou renommer un fichier (lien symbolique ou non) en /tmp , vous devez être le propriétaire du fichier. C'est l'une des raisons pour lesquelles on peut vouloir changer la propriété d'un lien symbolique (pour accorder ou retirer l'autorisation de le dissocier/le renommer).

$ ln -s / /tmp/x
$ rm /tmp/x
# OK removed

$ ln -s / /tmp/x
$ sudo chown -h nobody /tmp/x
$ rm /tmp/x
rm: cannot remove ‘/tmp/x’: Operation not permitted

De plus, comme mentionné par Mark Plotnick dans sa réponse maintenant supprimée, les applications de sauvegarde et d'archivage ont besoin de lchown() pour restaurer les liens symboliques à leurs propriétaires d'origine. Une autre option serait de changer euid et egid avant de créer le lien symbolique, mais cela ne serait pas efficace et compliquerait la gestion des droits sur le répertoire dans lequel le lien symbolique est extrait.


Linux
  1. Comment systemd-tmpfiles nettoie /tmp/ ou /var/tmp (remplacement de tmpwatch) dans CentOS / RHEL 7

  2. Pourquoi find -exec mv {} ./target/ + ne fonctionne-t-il pas ?

  3. Pourquoi mettre des choses autres que /home sur une partition séparée ?

  4. Pourquoi wine peut-il exécuter des programmes 64 bits sur Linux mais pas sur Mac ?

  5. Pourquoi les répertoires /home, /usr, /var, etc. ont-ils tous le même numéro d'inode (2) ?

Comment restaurer le répertoire /tmp supprimé sous Linux

Répertoire Linux tmp :tout ce que vous devez savoir

Linux – Pourquoi la locale Es_mx fonctionne-t-elle mais pas Es ?

Linux – /sbin/init n'existe pas ?

Comment changer /tmp par défaut en /home/user/tmp

Différence et utilisation correcte pour /tmp et /var/tmp