zsh compinit: direktori tidak aman

238

Apa artinya dan bagaimana cara memperbaikinya?

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

Menjalankan compauditpengembalian sebagai berikut:

There are insecure directories:
/usr/local/share/zsh/site-functions
Alex
sumber
2
Adakah yang tahu mengapa peringatan ini terjadi?
Blaszard
3
Setahun setelah @Blaszard mengajukan pertanyaan yang valid (sebagai komentar), 'linkyndy' menjawabnya di bawah (sebagai jawaban).
Happy Green Kid Naps

Jawaban:

342

Ini memperbaikinya untuk saya:

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

Kredit: posting di milis zsh


EDIT: Seperti yang ditunjukkan oleh @biocyberman dalam komentar. Anda mungkin perlu memperbarui pemilik site-functionsjuga:

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

Di komputer saya (OSX 10.9), saya tidak perlu melakukan ini selain YMMV.

EDIT2: Pada OSX 10.11, hanya ini yang berfungsi:

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

Juga pengguna: staf adalah izin default yang benar di OSX.

chakrit
sumber
1
bagaimana jika Anda tidak memiliki root
kirill_igum
2
@kirill_igum oleh "no root" maksud Anda "no root access "? Jika demikian, maka Anda harus menyalin file ke folder yang Anda punya akses, perbaiki .zshenvdan .zshrcuntuk menggunakan folder baru dan lakukan hal yang sama chmodpada folder baru seperti yang saya posting dengan folder.
chakrit
@kirill_igum lihat pesan milis yang saya tautkan.
chakrit
1
Saya perhatikan bahwa setelah mengatur pemilik untuk di-root, akses tulis perlu dicabut untuk grup dan lainnya. Saya memodifikasi chmodperintah menjadi sudo chmod -R go-w zsh.
gdvd
1
Catatan: Saya harus symlink di /usr/local/share/zsh/site-functionsuntuk /usr/local/Cellardan harus chown -R root:staff /usr/local/Cellarjuga sebelum ini bekerja.
mVChr
267
compaudit | xargs chmod g-w

akan melakukan triknya, lihat http://www.wezm.net/technical/2008/09/zsh-cygwin-and-insecure-directories/

Wenbing Li
sumber
6
Ini dia! Menghapus izin menulis ke grup. Terima kasih
glarrain
8
Jawaban yang jauh lebih baik, perlu dicatat bahwa compauditdapat digunakan untuk mendiagnosis masalah seperti ini dan juga memperbaikinya.
Wolph
8
Perhatikan bahwa Anda mungkin juga harus mengubah pemilik file untuk di-root juga - Saya harus:compaudit | xargs chown root
Brad Parks
4
Ini jelas merupakan solusi terbaik bagi saya. Saya menginstal zsh dan zsh-melengkapi dengan Homebrew, jadi jelas tidak ingin mengubahnya untuk dimiliki oleh root.
katy lavallee
2
compaudit | xargs chmod g-wbersama dengan ompaudit | xargs chown rootbekerja untuk saya juga dan tampaknya membuat HomeBrew bahagia. dapatkah seseorang menjelaskan apa yang terjadi sedikit lebih banyak.
nyxee
76

Sebagian besar jawaban datang dengan solusi, tetapi tidak menyebutkan mengapa peringatan ini terjadi. Berikut kutipan dari ZSH's compinit :

Demi alasan keamanan, compinit juga memeriksa apakah sistem penyelesaian akan menggunakan file yang tidak dimiliki oleh root atau oleh pengguna saat ini , atau file dalam direktori yang dapat ditulis oleh dunia atau kelompok atau yang tidak dimiliki oleh root atau oleh pengguna saat ini . Jika file atau direktori tersebut ditemukan, compinit akan bertanya apakah sistem penyelesaian harus benar-benar digunakan. Untuk menghindari pengujian ini dan membuat semua file yang ditemukan digunakan tanpa diminta, gunakan opsi -u, dan untuk membuat compinit abaikan semua file dan direktori yang tidak aman gunakan opsi -i. Pemeriksaan keamanan ini dilewati sepenuhnya ketika opsi -C diberikan.

Oleh karena itu, solusinya menyiratkan memperbaiki satu (atau semua) dari yang berikut:

  • mengatur pengguna saat ini sebagai pemilik semua direktori / subdirektori / file yang menyebabkan:

    compaudit | xargs chown -R "$(whoami)"
    
  • menghapus izin menulis untuk grup / orang lain untuk file yang menyebabkan:

    compaudit | xargs chmod go-w
    

Pendekatan lain adalah melewatkan pemeriksaan ini dengan menggunakan

compinit -u

tapi saya tidak benar-benar menyarankan ini, karena menyembunyikan masalah di bawah permadani hanya memecahkan masalah dalam jangka pendek.

linkyndy
sumber
1
Terima kasih. Saya kagum bahwa orang akan mengetik perintah secara acak tanpa mengerti masalahnya.
pekik
3
Bagaimana dengan sistem multi-pengguna? Dalam skenario seperti itu, chown -R "$(whoami)"untuk file di luar direktori home seperti /usr/local/tidak akan berfungsi. Menurut dokumen, bukankah lebih masuk akal untuk membuat file menjadi milik root?
goetzc
Saya suka jawaban ini yang terbaik. Membuat saya berpikir mengapa ini terjadi pada saya. Ternyata itu terjadi setelah menambahkan pengguna lain ke grup utama pengguna saya. Direktori di bawah $ HOME / .antigen / bundles dimiliki oleh pengguna dan grup saya. Jadi, dalam kasus saya menghapus pengguna dari grup memecahkan masalah.
Samuel
25

Saya mendapat peringatan yang sama ketika saya sudo -imemulai shell root, solusi @ chakrit tidak bekerja untuk saya.

Tetapi saya menemukan -u pergantian compinitkarya, misalnya di .zshrc / zshenv Anda atau di mana Anda meneleponcompinit

compinit -u

NB: Tidak direkomendasikan untuk sistem produksi

Lihat juga http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Initialization

nomor 5
sumber
itu satu-satunya soution yang bekerja untuk saya. saya mencoba menggunakan zsh dengan compinit di subsistem linux di windows 10
denns
17

Ini berfungsi untuk Mac saya setelah pembaruan ke High Sierra.

Hapus akses tulis grup:

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

Yang terbaik untuk menjaga perubahan terbatas pada direktori zsh.

Hank Chan
sumber
1
sudo chmod gw / usr / local / share / zsh / site-functions (berfungsi untuk saya di mac 10.15)
shijin
2
Ini adalah satu-satunya perbaikan yang bekerja untuk saya di Mac Catalina
user8467470
1
Perbaikan ini berhasil bagi saya di MacOS Catalina juga. Terima kasih!
Tyler
12

Jawaban yang diterima tidak bekerja untuk saya di macOs Sierra (10.12.1). Harus melakukannya secara rekursif dari / usr / local

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

Catatan: Anda bisa mendapatkan nama pengguna whoamidan grup Andaid -g

Franco
sumber
4
Saya harus melakukannya dengan cara ini juga di Sierra, meskipun pada sistem multiuser, pengguna / grup yang tepat harus di-root: staff
Marshall Eubanks
5

Dua baris ini telah diperbaiki untuk saya.

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

sudo chown -R _user_:root /usr/local/share/zsh/*
berdebat
sumber
3
Bekerja untukku! Saya menggunakan akun jaringan pada PC saya - Ubutun 16.04 sudo chown -R $(whoami):root /usr/local/share/zsh sudo chown -R $(whoami):root /usr/local/share/zsh/*
hoangdv
5

Di macOS Sierra, Anda perlu menjalankan: sudo chown -R $(whoami):staff /usr/local

kkodev
sumber
4

Saya memperbaikinya dengan melakukan

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

dalam kasus saya direktori lain di dalam share / juga mempunyai grup "staff" yang ditugaskan

Franck
sumber
Pertanyaannya bukan pada topik untuk Stack Overflow sebagaimana didefinisikan dalam pusat bantuan . Tolong jangan jawab pertanyaan seperti itu; sebagai gantinya, Anda harus menandai mereka untuk diperhatikan dan mereka akan ditutup atau dimigrasi dengan tepat.
Toby Speight
4

pada Mojave, ini berhasil: sudo chmod go-w /usr/local/share

Sebastien H.
sumber
1
Lebih baik lagi: sudo chmod -R go-w /usr/local/share
ecmanaut
3

Saran saya adalah menjalankan compaudit dan kemudian hanya memperbaiki izin pada direktori yang ditemukan oleh audit. Pastikan direktori yang diidentifikasi tidak memiliki izin menulis untuk grup atau lainnya.

Tiamot
sumber
3

Mesin saya:

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

Jadi inilah yang saya lakukan,

  1. jalankan compauditdan itu akan memberi Anda daftar direktori yang dianggapnya tidak aman.

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

Exmaple:

compaudit

pengembalian:

/ usr / local / share / zsh

jadi saya lari

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

baca lebih lanjut di sini tautan

Sultanmyrza Kasymbekov
sumber
2

Pagi ini, beberapa paket di sistem saya diperbarui, dan meninggalkan saya dengan pesan kesalahan ini. Saya menggunakan Ubuntu 18.04.

Rupanya, sesuatu dalam pembaruan mengubah nama pengguna dan grup menjadi angka, dan bukannya rootsebagai berikut:

# 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

Saya hanya mengubah pengguna dan grup untuk file ini kembali rootdan masalahnya hilang. Saya tidak perlu mengubah izin apa pun, dan akan berhati-hati agar tidak melakukannya kecuali jika penyebab mendasar masalahnya dipahami.

sudo chown root _code && sudo chgrp root _code

Setelah beralih 131dan 142kembali ke root, pesan kesalahan ini dari zsh hilang.

Todd
sumber
2
  1. jalankan compauditdan itu akan memberi Anda daftar direktori yang dianggapnya tidak aman

  2. sudo chown -R username:root target_directory

  3. sudo chmod -R 755 target_directory

Sharif Mohammad Eunus
sumber
2

Saya mendapat peringatan yang sama akhir-akhir ini di Catalina. Solusi mudah adalah dengan meletakkan ini di atas .zshrc Anda

ZSH_DISABLE_COMPFIX=true
FredericK
sumber
1

menjalankan perintah ini bekerja untuk saya di mac OS Catalina:

compaudit | xargs chmod g-w,o-w

Miguel Julio
sumber
1

Solusi MAC OS X:

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

Juga "pengguna: staf = pengguna root default di OSX.

jpmottin
sumber