zsh compinit: répertoires non sécurisés

238

Qu'est-ce que cela signifie et comment puis-je y remédier?

zsh compinit: insecure directories, run compaudit for list.
Ignore insecure directories and continue [y] or abort compinit [n]?

L'exécution de la compauditrenvoie les éléments suivants:

There are insecure directories:
/usr/local/share/zsh/site-functions
Alex
la source
2
Quelqu'un sait pourquoi cet avertissement se produit?
Blaszard
3
Un an après que @Blaszard ait posé la question valide (en tant que commentaire), 'linkyndy' y a répondu ci-dessous (en tant que réponse).
Happy Green Kid Naps

Réponses:

343

Cela m'a corrigé:

$ cd /usr/local/share/zsh
$ sudo chmod -R 755 ./site-functions

Crédit: une publication sur la liste de diffusion zsh


EDIT: Comme l'a souligné @biocyberman dans les commentaires. Vous devrez peut-être également mettre à jour le propriétaire de site-functions:

$ sudo chown -R root:root ./site-functions

Sur ma machine (OSX 10.9), je n'ai pas besoin de faire ça mais YMMV.

EDIT2: Sur OSX 10.11, seulement cela fonctionnait:

$ cd /usr/local/share/
$ sudo chmod -R 755 zsh
$ sudo chown -R root:staff zsh

Également utilisateur: le personnel est l'autorisation par défaut correcte sur OSX.

chakrit
la source
1
et si vous n'avez pas de racine
kirill_igum
2
@kirill_igum par "pas de racine" vouliez-vous dire "pas d' accès root "? Si c'est le cas, vous devez copier les fichiers dans un dossier auquel vous avez accès, corriger votre .zshenvet .zshrcutiliser le nouveau dossier et faire de même chmodsur le nouveau dossier comme je l'ai publié avec le dossier.
chakrit
@kirill_igum voir le message de la liste de diffusion auquel je suis lié.
chakrit
1
J'ai remarqué qu'après avoir défini le propriétaire sur root, l'accès en écriture devait être révoqué pour le groupe et les autres. J'ai modifié la chmodcommande en sudo chmod -R go-w zsh.
gdvd
1
Remarque: j'avais des liens symboliques /usr/local/share/zsh/site-functionsvers /usr/local/Cellaret je devais le faire chown -R root:staff /usr/local/Cellaravant que cela ne fonctionne.
mVChr
270
compaudit | xargs chmod g-w

fera l'affaire, voir http://www.wezm.net/technical/2008/09/zsh-cygwin-and-insecure-directories/

Wenbing Li
la source
6
Ça y est ...! Suppression de l'autorisation d'écriture sur le groupe. Merci
glarrain
8
Meilleure réponse, il convient de noter qu'il compauditpeut être utilisé pour diagnostiquer des problèmes comme ceux-ci et les résoudre.
Wolph
8
Notez que vous devrez peut-être également changer le propriétaire des fichiers pour rooter - je devais:compaudit | xargs chown root
Brad Parks
4
C'est certainement la meilleure solution pour moi. J'ai installé zsh et zsh-finitions avec Homebrew, donc je ne voulais évidemment pas le changer pour qu'il appartienne à root.
katy lavallee
2
compaudit | xargs chmod g-wensemble avec ompaudit | xargs chown roottravaillé pour moi aussi et a semblé garder HomeBrew heureux. quelqu'un peut-il expliquer ce qui se passe un peu plus.
nyxee
76

La plupart des réponses sont accompagnées d'une solution, mais ne mentionnez pas pourquoi cet avertissement se produit. Voici un extrait du compinit de ZSH :

Pour des raisons de sécurité, compinit vérifie également si le système de complétion utilise des fichiers n'appartenant pas à root ou à l'utilisateur actuel , ou des fichiers dans des répertoires accessibles en écriture par le monde ou le groupe ou n'appartenant pas à root ou à l'utilisateur actuel . Si de tels fichiers ou répertoires sont trouvés, compinit demandera si le système de complétion doit vraiment être utilisé. Pour éviter ces tests et utiliser tous les fichiers trouvés sans demander, utilisez l'option -u, et pour que compinit ignore silencieusement tous les fichiers et répertoires non sécurisés, utilisez l'option -i. Ce contrôle de sécurité est entièrement ignoré lorsque l'option -C est donnée.

Par conséquent, la solution implique de corriger l'un (ou tous) des éléments suivants:

  • définir l'utilisateur actuel comme le propriétaire de tous les répertoires / sous-répertoires / fichiers en cause:

    compaudit | xargs chown -R "$(whoami)"
    
  • suppression des autorisations d'écriture pour le groupe / autres pour les fichiers en cause:

    compaudit | xargs chmod go-w
    

Une autre approche consisterait à ignorer ces vérifications en utilisant

compinit -u

mais je ne le suggère pas vraiment, car cacher des problèmes sous un tapis ne résout que les problèmes à court terme.

linkyndy
la source
1
Merci. Je suis étonné que les gens tapent au hasard des commandes sans vraiment comprendre le problème.
Cri
3
Et un système multi-utilisateurs? Dans un tel scénario, chown -R "$(whoami)"pour les fichiers en dehors du répertoire personnel tels que /usr/local/ne fonctionneraient pas. Selon les documents, ne serait-il pas plus logique de faire en sorte que les fichiers appartiennent à root?
goetzc
J'aime mieux cette réponse. Me fait réfléchir à la raison pour laquelle cela m'est arrivé. Il s'avère que cela s'est produit après l'ajout d'un autre utilisateur au groupe principal de mon utilisateur. Les répertoires sous $ HOME / .antigen / bundles appartenaient à mon utilisateur et à mon groupe. Donc, dans mon cas, la suppression de cet utilisateur du groupe a résolu le problème.
Samuel
25

J'ai reçu les mêmes avertissements lorsque j'ai sudo -idémarré un shell root, la solution de @ chakrit ne fonctionnait pas pour moi.

Mais j'ai trouvé un -uchangement de compinittravaux, par exemple dans votre .zshrc / zshenv ou là où vous avez appelécompinit

compinit -u

NB: Non recommandé pour le système de production

Voir également http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Initialization

numéro 5
la source
c'était la seule soution qui fonctionnait pour moi. j'essayais d'utiliser zsh avec compinit sur le sous-système linux sur windows 10
denns
17

Cela fonctionne pour mon Mac après la mise à jour vers High Sierra.

Supprimez l'accès en écriture de groupe:

sudo chmod g-w /usr/local/share/zsh/site-functions
sudo chmod g-w /usr/local/share/zsh

Il est préférable de limiter la modification aux répertoires zsh.

Hank Chan
la source
1
sudo chmod gw / usr / local / share / zsh / site-functions (a fonctionné pour moi dans mac 10.15)
shijin
2
Ce fut le seul correctif qui a fonctionné pour moi sur Mac Catalina
user8467470
1
Cette correction a également fonctionné pour moi sur MacOS Catalina. Merci!
Tyler
12

La réponse acceptée n'a pas fonctionné pour moi sur macOs Sierra (10.12.1). J'ai dû le faire récursivement à partir de / usr / local

cd /usr/local
sudo chown -R <your-username>:<your-group-name> *

Remarque: vous pouvez obtenir votre nom d'utilisateur avec whoamiet votre groupe avecid -g

Franco
la source
4
Je ne devais pas le faire aussi sur Sierra, bien que sur un système multi-utilisateur, le bon utilisateur / groupe devrait être root: staff
Marshall Eubanks
5

Ces deux lignes se sont fixées pour moi.

sudo chown -R _user_:root /usr/local/share/zsh

sudo chown -R _user_:root /usr/local/share/zsh/*
arglee
la source
3
Travaille pour moi! J'utilise un compte réseau sur mon PC - Ubutun 16.04 sudo chown -R $(whoami):root /usr/local/share/zsh sudo chown -R $(whoami):root /usr/local/share/zsh/*
hoangdv
5

Sur macOS Sierra, vous devez exécuter: sudo chown -R $(whoami):staff /usr/local

kkodev
la source
4

Je l'ai réparé en faisant

sudo chown root:staff -R /usr/local/share/zsh

dans mon cas, d'autres répertoires à l'intérieur du partage / ont également un groupe "personnel" affecté

Franck
la source
La question ne concerne pas le débordement de pile tel que défini dans le centre d'aide . Veuillez ne pas répondre à ces questions; au lieu de cela, vous devez les signaler à l'attention et ils seront fermés ou migrés de manière appropriée.
Toby Speight
4

sur Mojave, cela a fait l'affaire: sudo chmod go-w /usr/local/share

Sebastien H.
la source
1
Mieux encore:sudo chmod -R go-w /usr/local/share
ecmanaut
3

Ma suggestion serait d'exécuter compaudit, puis de simplement corriger les autorisations sur les répertoires trouvés par l'audit. Assurez-vous que les répertoires identifiés n'ont pas d'autorisations d'écriture pour le groupe ou autre.

Tiamot
la source
3

Ma machine:

System Version: macOS 10.15.4 (19E287)
Kernel Version: Darwin 19.4.0

Voici donc ce que j'ai fait,

  1. exécuter compauditet il vous donnera une liste des répertoires qu'il pense non sécurisés.

  2. exécuter sudo chmod -R 755 target_directory (exemple: sudo chmod -R 755 /usr/local/share/zsh)

Exmaple:

compaudit

Retour:

/ usr / local / share / zsh

donc je cours

sudo chmod -R 755 /usr/local/share/zsh

lire la suite ici lien

Sultanmyrza Kasymbekov
la source
2

Ce matin, certains packages de mon système ont été mis à jour et m'ont laissé ce message d'erreur. J'utilise Ubuntu 18.04.

Apparemment, quelque chose dans la mise à jour a changé le nom d'utilisateur et le groupe en nombres, au lieu de root, comme suit:

# There are insecure files: /usr/share/zsh/vendor-completions/_code
# sudo ls -alh
-rw-r--r-- 1  131  142 2.6K 2019-10-10 16:28 _code

J'ai simplement changé l'utilisateur et le groupe pour ce fichier rootet le problème a disparu. Je n'ai pas eu besoin de modifier les autorisations et je déconseille de le faire à moins que la cause sous-jacente du problème soit comprise.

sudo chown root _code && sudo chgrp root _code

Après avoir basculé 131et 142revenir à root, ce message d'erreur de zsh a disparu.

Todd
la source
2
  1. exécuter compauditet il vous donnera une liste de répertoires qu'il pense ne sont pas sûrs

  2. sudo chown -R username:root target_directory

  3. sudo chmod -R 755 target_directory

Sharif Mohammad Eunus
la source
2

J'ai eu le même avertissement récemment sur Catalina. Une solution de contournement simple consiste à placer cela en haut de votre .zshrc

ZSH_DISABLE_COMPFIX=true
FredericK
la source
1

l'exécution de cette commande a fonctionné pour moi sur mon mac OS Catalina:

compaudit | xargs chmod g-w,o-w

Miguel Julio
la source
1

Solution MAC OS X:

$ sudo chmod -R 755 /usr/local/share/zsh
$ sudo chown -R root:staff /usr/local/share/zsh

Aussi "user: staff = utilisateur root par défaut sur OSX.

jpmottin
la source