J'ai un lien symbolique avec ces autorisations:
lrwxrwxrwx 1 myuser myuser 38 Aug 18 00:36 npm -> ../lib/node_modules/npm/bin/npm-cli.js*
Le lien symbolique se trouve dans une archive .tar.gz. Maintenant, lorsque je décompresse l'archive tar.gz en utilisant maven, le lien symbolique n'est plus valide. J'essaie donc de reconstruire le lien symbolique. Je crée d'abord le lien symbolique à l'aide de ln, mais comment puis-je définir les mêmes autorisations que le lien symbolique d'origine?
Lorsque vous essayez d'utiliser
chmod
pour définir les autorisations du lien, vous devez définir les autorisations de la cible du lien. Les autorisations du lien n'ont pas de sens.la source
test
avec-rw-rw-r-- root root
, carrm test
je reçois l'inviterm: remove write-protected regular empty file 'test'?
La solution consiste à placer les fichiers sensibles dans des répertoires auxquels les utilisateurs ont un accès en lecture seule.Quand vous avez un lien comme:
et voulez le changer pour:
Il y a deux cas à considérer:
foo/bar
n’est pas un répertoire ou n’existe pas ou vous n’avez pas accès à la recherchefoo
. ensuiteéchouera car
link
existe déjà, mais vous pouvez y remédier en utilisant le standard:foo/bar
est un répertoire (et vous avez le droit de recherchefoo
pour pouvoir déterminer s’ilfoo/bar
s’agit d’un répertoire). Dans ce cas, quand vous faites:ou
Cela s'entend comme la création d'un nouveau
target
lien symbolique dans lelink
répertoire (illink
s'agit d'un répertoire car il s'agit d'un lien symbolique vers lefoo/bar
répertoire). Donc, vous allez créer un:Pour surmonter cela, GNU
ln
a une-T
option pour que le nom du lien soit toujours considéré comme un nom de lien, et non comme un répertoire dans lequel créer le ou les liens. Donc, avec GNUln
:marchera. Comme auparavant, il supprimera le
link
lien symbolique d' origine et le créera à nouveau avecnew/target
pour cible (et le processus 'euid et egid en tant que propriétaire).GNU a
ln
aussi une-n
option. Cela fonctionne de la manière suivante-T
sauf quelink
est en fait un répertoire réel, auquel cas le lien symbolique sera toujours créé à l'intérieur de ce répertoire (au lieu d'échouer avec une erreur).De manière portable, votre meilleure option consiste à supprimer le lien en premier lieu, puis à le recréer:
Sur la plupart des systèmes, les autorisations sur les liens symboliques sont ignorées et généralement corrigées
rwxrwxrwx
.Sur les systèmes où les autorisations de lien symbolique importent (comme OS / X où vous avez besoin d'une autorisation de lecture sur un lien symbolique pour pouvoir résoudre sa cible), il existe généralement un moyen de les modifier (
chmod -h
sous OS / X).La propriété, bien que comme ci-dessus ne soit pas pertinente pour l'accès au fichier désigné par le lien symbolique sur la plupart des systèmes, peut avoir une autre pertinence par rapport au
t
bit du répertoire parent ou aux quotas ... ) et il existe une commande standard pour le changer:la source
Si vous avez vraiment besoin de changer la permission des liens symboliques (généralement sans signification, comme écrit dans d'autres réponses), j'ai réussi à utiliser l'
-R
option dechown
:Si
-R
n'a pas été utilisé, les autorisations n'ont pas été modifiées.la source
chown
car-R
cela-P
y est implicite , mais ce n’est pas garanti et cela ne fonctionnera pas dans d’autres implémentations gommées. Le moyen standard pour changer la propriété des liens symboliques est avec l'-h
option. Je viens de mettre à jour la réponse acceptée qui était incorrecte.