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


238

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

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

2
이 경고가 왜 발생하는지 아는 사람이 있습니까?
Blaszard

3
@Blaszard가 유효한 질문 (의견으로)을 요청한 1 년 후, 'linkyndy'는 아래의 답변으로 답변했습니다.
해피 그린 키드 낮잠

답변:


342

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

$ 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에 대한 올바른 기본 권한입니다.


1
루트가없는 경우
kirill_igum

2
"루트 없음"의 @kirill_igum은 "루트 액세스 없음"을 의미 했 습니까? 그렇다면 액세스 할 수있는 폴더에 파일을 복사해야합니다..zshenv.zshrc새 폴더를 사용하고 동일한 작업을 수행하는 chmodI 폴더에 게시 한로 새 폴더에.
chakrit

@kirill_igum 내가 링크 한 메일 링리스트 메시지를 보라.
chakrit

1
소유자를 루트로 설정 한 후 그룹 및 기타 모두에 대한 쓰기 액세스 권한을 취소해야한다는 것을 알았습니다. chmod명령을로 수정 했습니다 sudo chmod -R go-w zsh.
gdvd

1
참고 : 나는에 심볼릭 링크했다 /usr/local/share/zsh/site-functions로를 /usr/local/Cellar하고 있었다 chown -R root:staff /usr/local/Cellar이 일을하기 전에도.
mVChr

264
compaudit | xargs chmod g-w

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


6
이거 야! 그룹에 대한 쓰기 권한을 제거합니다. 감사합니다
glarrain

8
더 나은 대답 compaudit은 이러한 문제를 진단하고 해결하는 데 사용될 수 있다는 점에 유의해야 합니다.
Wolph

7
참고 또한뿐만 아니라 루트에있는 파일의 소유자를 변경해야 할 수 있음 - 나는했다에 :compaudit | xargs chown root
브래드 공원

4
이것은 확실히 나에게 가장 좋은 해결책입니다. Homebrew와 함께 zsh 및 zsh-completions를 설치 했으므로 루트가 소유하도록 변경하고 싶지 않았습니다.
katy lavallee

2
compaudit | xargs chmod g-w와 함께 ompaudit | xargs chown root나를 위해 일하고 HomeBrew를 행복하게 유지하는 것처럼 보였다. 누군가가 조금 더 진행되고있는 일을 설명 할 수 있습니까
nyxee

76

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

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

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

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

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

    compaudit | xargs chmod go-w
    

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

compinit -u

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


1
감사. 사람들이 실제로 문제를 이해하지 않고 명령을 무작위로 입력한다는 사실에 놀랐습니다.
shriek

3
다중 사용자 시스템은 어떻습니까? 이러한 시나리오에서는 chown -R "$(whoami)"홈 디렉토리 외부의 파일 /usr/local/이 작동하지 않습니다. 문서에 따르면 파일을 루트 소유로 만드는 것이 더 합리적이지 않습니까?
goetzc

이 답변이 가장 좋습니다. 왜 이런 일이 일어 났는지 생각해 보았습니다. 내 사용자의 기본 그룹에 다른 사용자를 추가 한 후 발생했습니다. $ HOME / .antigen / bundles 아래의 디렉토리는 내 사용자와 내 그룹이 소유했습니다. 그래서 제 경우에는 그룹에서 해당 사용자를 제거하면 문제가 해결되었습니다.
사무엘

25

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

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

compinit -u

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

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


그것은 나를 위해 일한 유일한 물약이었습니다. 내가 창 (10)에 리눅스 서브 시스템에 compinit와 zsh을 사용하려고했다
denns

15

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

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

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

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


1
sudo chmod gw / usr / local / share / zsh / site-functions (mac 10.15에서 나를 위해
일함

1
이것은 Mac Catalina
user8467470

이 수정은 MacOS Catalina에서도 효과적이었습니다. 감사!
Tyler

12

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

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

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


4
다중 사용자 시스템에서는 올바른 사용자 / 그룹이 루트이어야하지만 Sierra에서 이와 같이하지
않았습니다

5

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

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

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

3
나를 위해 일하십시오! 내 PC에서 네트워크 계정을 사용하고 있습니다-Ubutun 16.04 sudo chown -R $(whoami):root /usr/local/share/zsh sudo chown -R $(whoami):root /usr/local/share/zsh/*
hoangdv

5

macOS Sierra에서는 다음을 실행해야합니다. sudo chown -R $(whoami):staff /usr/local


4

나는 그것을함으로써 그것을 고쳤다.

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

내 경우에는 share / 내의 다른 디렉토리에도 "staff"그룹이 할당되어 있습니다.


질문은 도움말 센터에 정의 된 스택 오버플로에 대한 주제가 아닙니다 . 그러한 질문에 대답하지 마십시오. 대신주의를 기울여 플래그를 지정해야하며 닫히거나 적절하게 마이그레이션됩니다.
Toby Speight

4

모하비에서 이것은 트릭을 수행했습니다. sudo chmod go-w /usr/local/share


1
더 나은 아직도 :sudo chmod -R go-w /usr/local/share
ecmanaut

3

내 제안은 compaudit를 실행 한 다음 감사가 찾은 디렉토리에 대한 권한을 수정하는 것입니다. 식별 된 디렉토리에 그룹 또는 기타에 대한 쓰기 권한이 없는지 확인하십시오.



3

내 기계 :

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

여기 내가 한 일이 있습니다.

  1. 실행 compaudit하면 안전하지 않다고 생각되는 디렉토리 목록이 표시됩니다.

  2. 실행 sudo chmod -R 755 target_directory (예 : sudo chmod -R 755 /usr/local/share/zsh)

예 :

compaudit

보고:

/ usr / local / share / zsh

그래서 나는 달린다

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

자세한 내용은 여기 링크


2

오늘 아침, 시스템의 일부 패키지가 업데이트되었으며이 오류 메시지가 표시되었습니다. 우분투 18.04를 사용하고 있습니다.

분명히 업데이트에서 무언가가 대신 사용자 이름과 그룹을 숫자로 변경했습니다 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

이 파일의 사용자와 그룹을 다시 변경 한 root후 문제가 해결되었습니다. 권한을 변경할 필요 가 없으며 문제의 근본 원인을 이해하지 않는 한 변경 하지 않도록 주의하십시오.

sudo chown root _code && sudo chgrp root _code

전환 후 131142다시 root, zsh을에서이 오류 메시지가 멀리 갔다.


2
  1. 실행 compaudit하면 안전하지 않다고 생각되는 디렉토리 목록이 표시됩니다.

  2. sudo chown -R username:root target_directory

  3. sudo chmod -R 755 target_directory


2

나는 최근 카탈리나에 대해 동일한 경고를 받았다. 쉬운 해결 방법은 이것을 .zshrc의 맨 위에 두는 것입니다.

ZSH_DISABLE_COMPFIX=true


1

이 명령을 실행하면 나를 위해 일했습니다 mac OS Catalina.

compaudit | xargs chmod g-w,o-w


1

MAC OS X 솔루션 :

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

또한 "user : staff = OSX의 기본 루트 사용자입니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.