zsh compinit: diretórios não seguros

238

O que isso significa e como posso corrigi-lo?

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

Executando o compauditretorna o seguinte:

There are insecure directories:
/usr/local/share/zsh/site-functions
Alex
fonte
2
Alguém sabe por que esse aviso ocorre?
Blaszard 17/03/16
3
Um ano após a @Blaszard fazer a pergunta válida (como um comentário), 'linkyndy' respondeu abaixo (como resposta).
Happy Green Kid Naps

Respostas:

342

Isso corrigiu para mim:

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

Crédito: um post na lista de discussão do zsh


EDIT: Como apontado por @biocyberman nos comentários. Pode ser necessário atualizar o proprietário site-functionstambém:

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

Na minha máquina (OSX 10.9), não preciso fazer isso, mas YMMV.

EDIT2: No OSX 10.11, apenas isso funcionou:

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

Também user: staff é a permissão padrão correta no OSX.

chakrit
fonte
1
E se você não tem nenhuma raiz
kirill_igum
2
@kirill_igum por "no root" você quis dizer "no root access "? Nesse caso, copie os arquivos para uma pasta à qual tenha acesso, corrija .zshenve .zshrcuse a nova pasta e faça o mesmo chmodna nova pasta que publiquei com a pasta.
chakrit
@kirill_igum veja a mensagem da lista de discussão a que vinculei.
chakrit
1
Percebi que depois de definir o proprietário como root, o acesso de gravação precisava ser revogado para o grupo e para o outro. Eu modifiquei o chmodcomando para sudo chmod -R go-w zsh.
Gdvd 13/08/16
1
Nota: Eu tinha links simbólicos em /usr/local/share/zsh/site-functionsque /usr/local/Cellare teve que chown -R root:staff /usr/local/Cellartambém antes disso trabalhou.
MVChr #
265
compaudit | xargs chmod g-w

fará o truque, consulte http://www.wezm.net/technical/2008/09/zsh-cygwin-and-insecure-directories/

Wenbing Li
fonte
6
É isso! Removendo a permissão de gravação para agrupar. Graças
glarrain
8
Resposta muito melhor, note-se que compauditpode ser usado para diagnosticar problemas como esses e também para corrigi-los.
Wolph
7
Observe que você também pode precisar alterar o proprietário dos arquivos para fazer o root - Eu tive que:compaudit | xargs chown root
Brad Parks
4
Esta é definitivamente a melhor solução para mim. Eu instalei o zsh e o zsh-completations com o Homebrew, portanto, obviamente, não queria mudar para pertencer ao root.
katy Lavallee
2
compaudit | xargs chmod g-wjuntamente com ompaudit | xargs chown roottrabalhou para mim também e pareceu manter o HomeBrew feliz. alguém pode explicar o que está acontecendo um pouco mais.
Nyxee
76

A maioria das respostas vem com uma solução, mas não mencione por que esse aviso ocorre. Aqui está um trecho do compinit do ZSH :

Por motivos de segurança, o compinit também verifica se o sistema de conclusão usaria arquivos que não pertencem à raiz ou ao usuário atual , ou arquivos em diretórios que podem ser gravados no mundo ou no grupo ou que não pertencem à raiz ou ao usuário atual . Se tais arquivos ou diretórios forem encontrados, o compinit perguntará se o sistema de conclusão deve realmente ser usado. Para evitar esses testes e fazer com que todos os arquivos encontrados sejam usados ​​sem perguntar, use a opção -u e, para fazer com que o compinit ignore silenciosamente todos os arquivos e diretórios inseguros, use a opção -i. Essa verificação de segurança é ignorada completamente quando a opção -C é fornecida.

Portanto, a solução implica corrigir um (ou todos) dos seguintes itens:

  • configurando o usuário atual como o proprietário de todos os diretórios / subdiretórios / arquivos em causa:

    compaudit | xargs chown -R "$(whoami)"
    
  • removendo permissões de gravação para grupo / outros para os arquivos em causa:

    compaudit | xargs chmod go-w
    

Outra abordagem seria ignorar essas verificações usando

compinit -u

mas eu realmente não sugiro isso, pois esconder problemas debaixo de um tapete só resolve problemas no curto prazo.

linkyndy
fonte
1
Obrigado. Estou surpreso que as pessoas digitam aleatoriamente comandos sem realmente entender o problema.
grito
3
E quanto a um sistema multiusuário? Nesse cenário, chown -R "$(whoami)"para arquivos fora do diretório inicial, como os /usr/local/que não funcionariam. De acordo com os documentos, não faria mais sentido fazer com que os arquivos fossem de propriedade da raiz?
Goetzc # 6/19
Eu gosto desta resposta da melhor maneira. Me fez pensar por que isso aconteceu comigo. Acontece que aconteceu depois de adicionar outro usuário ao grupo principal do meu usuário. Os diretórios em $ HOME / .antigen / bundles eram de propriedade do meu usuário e do meu grupo. Portanto, no meu caso, remover esse usuário do grupo resolveu o problema.
Samuel
25

Recebi os mesmos avisos ao sudo -iiniciar um shell raiz, a solução do @ chakrit não funcionou para mim.

Mas eu encontrei uma -uopção de compinittrabalhos, por exemplo, no seu .zshrc / zshenv ou onde você ligoucompinit

compinit -u

NB: Não recomendado para sistema de produção

Consulte também http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Initialization

número 5
fonte
essa foi a única alma que funcionou para mim. eu estava tentando usar zsh com compinit no subsistema Linux no Windows 10
denns
17

Isso funciona no meu Mac após a atualização no High Sierra.

Remova o acesso de gravação do grupo:

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

É melhor manter a alteração limitada aos diretórios zsh.

Hank Chan
fonte
1
sudo chmod gw / usr / local / share / zsh / site-functions (funcionou para mim no mac 10.15)
shijin 13/03
2
Esta foi a única correção que funcionou para mim no Mac Catalina
user8467470 18/06
1
Essa correção também funcionou para mim no MacOS Catalina. Obrigado!
Tyler
12

A resposta aceita não funcionou para mim no macOs Sierra (10.12.1). Tinha que fazê-lo recursivo em / usr / local

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

Nota: Você pode obter seu nome de usuário whoamie seu grupo comid -g

Franco
fonte
4
Eu tive t fazê-lo desta maneira, bem como sobre Sierra, embora em um sistema multiusuário o usuário / grupo correta deve ser root: staff
Marshall Eubanks
5

Essas duas linhas foram corrigidas para mim.

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

sudo chown -R _user_:root /usr/local/share/zsh/*
arglee
fonte
3
Trabalhe para mim! Eu uso uma conta de rede no meu PC - Ubutun 16,04 sudo chown -R $(whoami):root /usr/local/share/zsh sudo chown -R $(whoami):root /usr/local/share/zsh/*
hoangdv
5

No macOS Sierra, você precisa executar: sudo chown -R $(whoami):staff /usr/local

kkodev
fonte
4

Eu consertei fazendo

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

no meu caso, outros diretórios dentro do compartilhamento / também têm o grupo "pessoal" atribuído

Franck
fonte
A pergunta não está relacionada ao tópico Estouro de pilha, conforme definido na Central de Ajuda . Por favor, não responda a essas perguntas; em vez disso, você deve sinalizá-los para atenção e eles serão fechados ou migrados adequadamente.
precisa saber é o seguinte
4

no Mojave, isso fez o truque: sudo chmod go-w /usr/local/share

Sebastien H.
fonte
1
Melhor ainda:sudo chmod -R go-w /usr/local/share
ecmanaut 29/04
3

Minha sugestão seria executar o compaudit e apenas corrigir as permissões nos diretórios encontrados pela auditoria. Verifique se os diretórios identificados não possuem permissões de gravação para um grupo ou outro.

Tiamot
fonte
3

Minha máquina:

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

Então aqui está o que eu fiz,

  1. executar compaudite fornecerá uma lista de diretórios que considera inseguros.

  2. executar sudo chmod -R 755 target_directory (exemplo sudo chmod -R 755 /usr/local/share/zsh:)

Exemplo:

compaudit

retorna:

/ usr / local / share / zsh

então eu corro

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

leia mais aqui link

Sultanmyrza Kasymbekov
fonte
2

Esta manhã, alguns pacotes no meu sistema foram atualizados e me deixaram esta mensagem de erro. Estou usando o Ubuntu 18.04.

Aparentemente, algo na atualização alterou o nome de usuário e o grupo para números, em vez de root:

# 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

Simplesmente alterei o usuário e o grupo desse arquivo roote o problema foi resolvido. Eu não precisava alterar nenhuma permissão e recomendaria isso, a menos que a causa subjacente do problema seja entendida.

sudo chown root _code && sudo chgrp root _code

Depois de mudar 131e 142voltar para root, essa mensagem de erro do zsh desapareceu.

Todd
fonte
2
  1. executar compaudite fornecerá uma lista de diretórios que considera inseguros

  2. sudo chown -R username:root target_directory

  3. sudo chmod -R 755 target_directory

Sharif Mohammad Eunus
fonte
2

Ultimamente, tive o mesmo aviso em Catalina. Uma solução fácil é colocar isso no topo do seu arquivo .zshrc

ZSH_DISABLE_COMPFIX=true
FredericK
fonte
1

executar este comando funcionou para mim no meu mac OS Catalina:

compaudit | xargs chmod g-w,o-w

Miguel Julio
fonte
1

Solução para MAC OS X:

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

Também "user: staff = usuário root padrão no OSX.

jpmottin
fonte