zsh compinit: niezabezpieczone katalogi

238

Co to znaczy i jak mogę to naprawić?

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

Uruchomienie compauditzwraca:

There are insecure directories:
/usr/local/share/zsh/site-functions
Alex
źródło
2
Czy ktoś wie, dlaczego pojawia się to ostrzeżenie?
Blaszard
3
Rok po tym, jak @Blaszard zadał prawidłowe pytanie (jako komentarz), „linkyndy” udzieliło odpowiedzi poniżej (jako odpowiedź).
Happy Green Kid Naps

Odpowiedzi:

342

Naprawiłem to dla mnie:

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

Kredyt: post na liście mailingowej zsh


EDYCJA: Jak wskazał @biocyberman w komentarzach. Może być konieczne zaktualizowanie właściciela site-functions:

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

Na moim komputerze (OSX 10.9) nie muszę tego robić, ale YMMV.

EDYCJA 2: W OSX 10.11 działało tylko:

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

Również użytkownik: personel jest prawidłowym domyślnym pozwoleniem na OSX.

czakryt
źródło
1
co jeśli nie masz roota
kirill_igum
2
@kirill_igum przez „bez korzeni” nie znaczy „bez korzeni dostępu ”? Jeśli tak, to skopiuj pliki do folderu, do którego masz dostęp, napraw swój .zshenvi .zshrcużyj nowego folderu i zrób to samo chmodw nowym folderze, który opublikowałem w tym folderze.
chakrit
@kirill_igum zobacz wiadomość z listy mailingowej, z którą mam link.
chakrit
1
Zauważyłem, że po ustawieniu właściciela na rootowanie, dostęp do zapisu musiał zostać odwołany zarówno dla grupy, jak i innych osób. Zmodyfikowałem chmodpolecenie na sudo chmod -R go-w zsh.
gdvd,
1
Uwaga: miałem dowiązania symboliczne /usr/local/share/zsh/site-functionsdo /usr/local/Cellari musiałem chown -R root:staff /usr/local/Cellarrównież zanim to zadziałało.
mVChr
264
compaudit | xargs chmod g-w

załatwi sprawę, patrz http://www.wezm.net/technical/2008/09/zsh-cygwin-and-insecure-directories/

Wenbing Li
źródło
6
To jest to! Usuwanie uprawnienia do zapisu do grupy. Dzięki
glarrain,
8
Zdecydowanie lepsza odpowiedź, należy zauważyć, że compauditmożna ją wykorzystać do diagnozowania takich problemów, a także ich rozwiązywania.
Wolph
7
Pamiętaj, że być może będziesz musiał zmienić właściciela plików również na rootowanie - musiałem:compaudit | xargs chown root
Brad Parks
4
To zdecydowanie najlepsze rozwiązanie dla mnie. Zainstalowałem Zsh i Zsh-Uzupełnienia z Homebrew, więc oczywiście nie chciałem, aby był własnością root.
katy lavallee
2
compaudit | xargs chmod g-wrazem ze ompaudit | xargs chown rootmną pracowali i wydawali się zadowolić HomeBrew. czy ktoś może wyjaśnić, co się dzieje trochę więcej.
nyxee
76

Większość odpowiedzi zawiera rozwiązanie, ale nie wspominaj, dlaczego pojawia się to ostrzeżenie. Oto fragment z zsh za compinit :

Ze względów bezpieczeństwa compinit sprawdza również, czy system uzupełniania użyłby plików, które nie są własnością użytkownika root lub bieżącego użytkownika , lub plików w katalogach, które można zapisać na całym świecie lub w grupie lub które nie są własnością użytkownika root lub bieżącego użytkownika . Jeśli takie pliki lub katalogi zostaną znalezione, compinit zapyta, czy naprawdę należy użyć systemu uzupełniania. Aby uniknąć tych testów i sprawić, że wszystkie znalezione pliki będą używane bez pytania, użyj opcji -u, a aby compinit po cichu zignorował wszystkie niebezpieczne pliki i katalogi, użyj opcji -i. Ta kontrola bezpieczeństwa jest całkowicie pomijana, gdy podano opcję -C.

W związku z tym rozwiązanie zakłada naprawienie jednego (lub wszystkich) następujących elementów:

  • ustawienie bieżącego użytkownika jako właściciela wszystkich katalogów / podkatalogów / plików w przyczynie:

    compaudit | xargs chown -R "$(whoami)"
    
  • usunięcie uprawnień do zapisu dla grupy / innych plików dla przyczyny:

    compaudit | xargs chmod go-w
    

Innym podejściem byłoby pominięcie tych kontroli za pomocą

compinit -u

ale tak naprawdę nie sugeruję tego, ponieważ ukrywanie problemów pod dywanikiem rozwiązuje problemy tylko w krótkim okresie.

linkyndy
źródło
1
Dzięki. Dziwi mnie, że ludzie losowo wpisywali polecenia bez zrozumienia problemu.
wrzask
3
Co z systemem dla wielu użytkowników? W takim scenariuszu chown -R "$(whoami)"dla plików spoza katalogu domowego, takie jak /usr/local/nie działałyby. Według dokumentów, czy nie ma większego sensu, aby pliki były własnością root?
goetzc
Najbardziej podoba mi się ta odpowiedź. Sprawiło, że pomyślałem o tym, dlaczego mi się to przytrafiło. Okazuje się, że stało się to po dodaniu innego użytkownika do głównej grupy mojego użytkownika. Katalogi w katalogu $ HOME / .antigen / bundles były własnością mojego użytkownika i mojej grupy. Więc w moim przypadku usunięcie tego użytkownika z grupy rozwiązało problem.
Samuel
25

Otrzymałem takie same ostrzeżenia, kiedy sudo -iuruchamiam powłokę roota, rozwiązanie @ chakrit nie działało dla mnie.

Ale znalazłem -uprzełącznik compinitprac, np. W twoim .zshrc / zshenv lub gdzie dzwoniłeścompinit

compinit -u

NB: Nie zalecane dla systemu produkcyjnego

Zobacz także http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Initialization

numer 5
źródło
to było jedyne południe, które dla mnie zadziałało. Próbowałem użyć Zsh z compinit na podsystemie Linux na Windows 10
od
15

Działa to na moim komputerze Mac po aktualizacji do High Sierra.

Usuń dostęp do zapisu grupowego:

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

Najlepiej jest ograniczyć zmianę do katalogów zsh.

Hank Chan
źródło
1
sudo chmod gw / usr / local / share / zsh / site-functions (pracował dla mnie w Mac 10.15)
shijin
1
To była jedyna poprawka, która działała dla mnie na Macu Catalina
8467470,
Ta poprawka zadziałała również w MacOS Catalina. Dzięki!
Tyler
12

Przyjęta odpowiedź nie działała dla mnie w systemie macOs Sierra (10.12.1). Musiałem to zrobić rekurencyjnie z / usr / local

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

Uwaga: możesz uzyskać swoją nazwę użytkownika whoamii swoją grupę za pomocąid -g

Franco
źródło
4
Tak też zrobiłem w Sierra, chociaż w systemie dla wielu użytkowników właściwy użytkownik / grupa powinna być rootem: personel
Marshall Eubanks
5

Te dwie linie zostały dla mnie naprawione.

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

sudo chown -R _user_:root /usr/local/share/zsh/*
Arglee
źródło
3
Pracuj dla mnie! Używam konta sieciowego na moim komputerze - Ubutun 16.04 sudo chown -R $(whoami):root /usr/local/share/zsh sudo chown -R $(whoami):root /usr/local/share/zsh/*
hoangdv
5

W systemie macOS Sierra musisz uruchomić: sudo chown -R $(whoami):staff /usr/local

kkodev
źródło
4

Naprawiłem to, robiąc

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

w moim przypadku inne katalogi wewnątrz udostępniają / mają również przypisaną grupę „pracowników”

Franck
źródło
Pytanie nie dotyczy tematu Przepełnienie stosu zdefiniowanego w Centrum pomocy . Proszę nie odpowiadać na takie pytania; zamiast tego powinieneś oznaczyć je jako uwagę, a zostaną one odpowiednio zamknięte lub migrowane.
Toby Speight
4

na mojejve udało się to: sudo chmod go-w /usr/local/share

Sebastien H.
źródło
1
Jeszcze lepiej:sudo chmod -R go-w /usr/local/share
ecmanaut
3

Moją sugestią byłoby uruchomienie compaudit, a następnie po prostu naprawienie uprawnień do katalogów znalezionych podczas audytu. Upewnij się, że zidentyfikowane katalogi nie mają uprawnień do zapisu dla grupy lub innych.

Tiamot
źródło
3

Moja maszyna:

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

Oto co zrobiłem

  1. uruchom, compaudita wyświetli się lista katalogów, które jej zdaniem są niezabezpieczone.

  2. uruchom sudo chmod -R 755 target_directory (przykład sudo chmod -R 755 /usr/local/share/zsh:)

Przykład:

compaudit

zwroty:

/ usr / local / share / zsh

więc biegnę

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

czytaj więcej tutaj link

Sultanmyrza Kasymbekov
źródło
2

Dziś rano niektóre pakiety w moim systemie zostały zaktualizowane i zostawił mi ten komunikat o błędzie. Używam Ubuntu 18.04.

Wygląda na to, że coś w aktualizacji zmieniło nazwę użytkownika i grupę na liczby, zamiast 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

Po prostu zmieniłem użytkownika i grupę dla tego pliku z powrotem rooti problem zniknął. I nie , nie trzeba zmieniać żadnych uprawnień, i ostrzegają przed tak robi, chyba że przyczyna problemu jest zrozumiałe.

sudo chown root _code && sudo chgrp root _code

Po przełączeniu 131i 142ponownym rooturuchomieniu ten komunikat o błędzie z zsh zniknął.

Todd
źródło
2
  1. uruchom, compaudita wyświetli się lista katalogów, które według niej są niepewne

  2. sudo chown -R username:root target_directory

  3. sudo chmod -R 755 target_directory

Sharif Mohammad Eunus
źródło
2

Ostatnio miałem takie samo ostrzeżenie w sprawie Cataliny. Łatwym obejściem tego problemu jest umieszczenie go na górze pliku .zshrc

ZSH_DISABLE_COMPFIX=true
FredericK
źródło
1

uruchomienie tego polecenia działało dla mnie na moim mac OS Catalina:

compaudit | xargs chmod g-w,o-w

Miguel Julio
źródło
1

Rozwiązanie MAC OS X:

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

Również „użytkownik: personel = domyślny użytkownik root w OSX.

jpmottin
źródło
0

Ten problem wystąpił po uruchomieniu google-cloud-sdk wystąpił skryptu instalacyjnego, który dodaje polecenie uzupełniające do powłoki za pomocą wpisu w .zshrc.

Następujące instrukcje homebrew dla konfigurowania uzupełnień w zsh był pomocny.

Alf Eaton
źródło