[zsh] zsh compinit : 안전하지 않은 디렉토리

무슨 뜻이며 어떻게 고칠 수 있습니까?

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

compaudit리턴을 실행하면 다음 이 리턴됩니다.

There are insecure directories:
/usr/local/share/zsh/site-functions



답변

이것은 나를 위해 그것을 고쳤다 :

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

크레딧 : zsh 메일 링리스트의 게시물


편집 : 의견에서 @biocyberman이 지적한대로. 소유자를 업데이트해야 할 수도 site-functions있습니다.

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

내 컴퓨터 (OSX 10.9)에서는 YMMV 이외의 작업을 수행 할 필요가 없습니다.

EDIT2 : OSX 10.11에서는 다음과 같이 작동했습니다.

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

또한 user : staff는 OSX에 대한 올바른 기본 권한입니다.


답변

compaudit | xargs chmod g-w

트릭을 할 것입니다, http://www.wezm.net/technical/2008/09/zsh-cygwin-and-insecure-directories/를 참조 하십시오


답변

대부분의 답변에는 해결책이 있지만이 경고가 발생하는 이유는 언급하지 않았습니다. ZSHcompinit 에서 발췌 한 내용은 다음과 같습니다 .

보안상의 이유로 compinit는 완료 시스템이 루트 또는 현재 사용자가 소유하지 않은 파일 또는 월드 또는 그룹이 쓰기 가능하거나 루트 또는 현재 사용자가 소유하지 않은 디렉토리의 파일을 사용 하는지 확인 합니다 . 이러한 파일 또는 디렉토리가 발견되면 compinit는 완료 시스템을 실제로 사용해야하는지 묻습니다. 이러한 테스트를 피하고 발견 된 모든 파일을 요청하지 않고 사용하려면 -u 옵션을 사용하고 compinit가 모든 안전하지 않은 파일 및 디렉토리를 자동으로 무시하게하려면 -i 옵션을 사용하십시오. -C 옵션이 제공되면이 보안 검사는 완전히 건너 뜁니다.

따라서 솔루션은 다음 중 하나 (또는 ​​모두)를 수정하는 것을 의미합니다.

  • 원인 : 현재 사용자를 모든 디렉토리 / 하위 디렉토리 / 파일의 소유자로 설정

    compaudit | xargs chown -R "$(whoami)"
    
  • 원인이되는 파일의 그룹 / 기타에 대한 쓰기 권한 제거 :

    compaudit | xargs chmod go-w
    

또 다른 방법은 다음을 사용하여 이러한 검사를 건너 뛰는 것입니다

compinit -u

양탄자 아래에 문제를 숨기면 단기적으로 문제를 해결할 수 있기 때문에 실제로 이것을 제안하지는 않습니다.


답변

sudo -i루트 쉘을 시작할 때 동일한 경고가 표시됩니다 . @ chakrit의 솔루션이 작동하지 않았습니다.

하지만 .zshrc / zshenv 또는 전화 한 곳에서 작업 -u전환을 발견했습니다.compinitcompinit

compinit -u

NB : 생산 시스템에 권장되지 않음

http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Initialization 도 참조하십시오.


답변

High Sierra로 업데이트 한 후 Mac에서 작동합니다.

그룹 쓰기 권한을 제거하십시오.

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

변경 사항을 zsh 디렉토리로 제한하는 것이 가장 좋습니다.


답변

macOs Sierra (10.12.1)에서 허용 된 답변이 작동하지 않았습니다. / usr / local에서 재귀 적으로 수행해야했습니다.

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

참고 : 사용자 이름과 whoami그룹을id -g


답변

이 두 줄은 나를 위해 수정되었습니다.

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

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