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 ถามคำถามที่ถูกต้อง (เป็นความคิดเห็น), 'linkyndy' ตอบคำถามด้านล่าง (เป็นคำตอบ)
Happy Green Kid Naps

คำตอบ:


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

ผู้ใช้ยัง: พนักงานเป็นสิทธิ์เริ่มต้นที่ถูกต้องใน OSX


1
จะเป็นอย่างไรถ้าคุณไม่มีรูท
kirill_igum

2
@kirill_igum โดย "no root" คุณหมายถึง "no root access " หรือไม่ ถ้าเป็นเช่นนั้นคุณควรคัดลอกไฟล์ไปยังโฟลเดอร์ที่คุณสามารถเข้าถึงแก้ไข.zshenvและ.zshrcใช้โฟลเดอร์ใหม่และทำเช่นเดียวกันchmodกับโฟลเดอร์ใหม่ที่ฉันโพสต์ไว้ในโฟลเดอร์
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
Brad Parks

4
นี่เป็นทางออกที่ดีที่สุดสำหรับฉัน ฉันติดตั้ง zsh และ zsh-completions ด้วย Homebrew ดังนั้นไม่ต้องการเปลี่ยนให้รูทเป็นเจ้าของ
katy lavallee

2
compaudit | xargs chmod g-wพร้อมกับompaudit | xargs chown rootทำงานให้ฉันด้วยและดูเหมือนว่าจะทำให้ HomeBrew มีความสุข ใครสามารถอธิบายสิ่งที่เกิดขึ้นอีกเล็กน้อย
nyxee

76

คำตอบส่วนใหญ่มาพร้อมกับวิธีแก้ไขปัญหา แต่อย่าพูดถึงว่าทำไมคำเตือนนี้จึงเกิด นี่เป็นข้อความที่ตัดตอนมาจากการรวบรวมของ ZSH :

สำหรับการรักษาความปลอดภัยด้วยเหตุผล compinit ยังตรวจสอบว่าระบบการดำเนินการเสร็จสมบูรณ์จะใช้ไฟล์ที่ไม่ได้เป็นเจ้าของโดย root หรือผู้ใช้ปัจจุบันหรือไฟล์ในไดเรกทอรีที่มีโลกหรือกลุ่มสามารถเขียนได้หรือว่าไม่ได้เป็นเจ้าของโดย root หรือผู้ใช้ปัจจุบัน หากพบไฟล์หรือไดเรกทอรีดังกล่าว 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 ไม่ได้ผลสำหรับฉัน

แต่ฉันพบว่า-uสวิตช์ของcompinitงานเช่นใน. zshrc / zshenv ของคุณหรือที่ที่คุณโทรมาcompinit

compinit -u

หมายเหตุ: ไม่แนะนำสำหรับระบบการผลิต

ดูเพิ่มเติมที่http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Initialization


นั่นเป็นสิ่งเดียวที่ทำงานให้ฉัน ฉันพยายามใช้ zsh กับ compinit บนระบบย่อย linux บน windows 10
denns

15

สิ่งนี้ใช้ได้กับ Mac ของฉันหลังจากอัปเดตเป็น High Sierra

ลบการเข้าถึงการเขียนกลุ่ม:

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)
shijin

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 แต่ในระบบผู้ใช้หลายคนผู้ใช้ / กลุ่มที่ถูกต้องควรเป็น root: staff
Marshall Eubanks

5

สองบรรทัดนี้คงที่สำหรับฉันแล้ว

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

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

3
ทำงานให้ฉัน! ฉันใช้บัญชีเครือข่ายบนพีซีของฉัน - Ubutun 16.04 sudo chown -R $(whoami):root /usr/local/share/zsh sudo chown -R $(whoami):root /usr/local/share/zsh/*
hoangdv


4

ฉันแก้ไขมันโดยการทำ

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

ในกรณีของฉันไดเรกทอรีอื่น ๆ ในการแบ่งปัน / ยังมีกลุ่ม "พนักงาน" ที่ได้รับมอบหมาย


คำถามที่ไม่ได้อยู่ในหัวข้อสำหรับกองมากเกินที่กำหนดไว้ในศูนย์ช่วยเหลือ กรุณาอย่าตอบคำถามเหล่านี้ แต่คุณควรตั้งค่าสถานะพวกเขาเพื่อความสนใจและพวกเขาจะถูกปิดหรือย้ายอย่างเหมาะสม
Toby Speight


3

ข้อเสนอแนะของฉันจะเรียกใช้การตรวจสอบแล้วเพียงแค่แก้ไขสิทธิ์ในไดเรกทอรีที่พบโดยการตรวจสอบ ตรวจสอบให้แน่ใจว่าไดเรกทอรีที่ระบุไม่มีสิทธิ์เขียนสำหรับกลุ่มหรืออื่น ๆ



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)

Exmaple:

compaudit

ผลตอบแทน:

/ usr / local / share / zsh

ดังนั้นฉันจึงวิ่ง

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

อ่านเพิ่มเติมได้ที่นี่ลิงค์


2

เช้านี้แพคเกจบางอย่างในระบบของฉันได้รับการอัปเดตและทิ้งฉันด้วยข้อความแสดงข้อผิดพลาด ฉันใช้ Ubuntu 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

หลังจากสลับ131และ142กลับไปที่rootข้อความแสดงข้อผิดพลาดนี้จาก zsh ก็หายไป


2
  1. เรียกใช้compauditและจะให้รายการไดเรกทอรีที่คิดว่าไม่ปลอดภัย

  2. sudo chown -R username:root target_directory

  3. sudo chmod -R 755 target_directory


2

ฉันมีคำเตือนแบบเดียวกันเมื่อเร็ว ๆ นี้ใน Catalina วิธีแก้ปัญหาง่าย ๆ คือการวางสิ่งนี้ไว้บน. zshrc ของคุณ

ZSH_DISABLE_COMPFIX=true

1

วิธีการแก้ปัญหาที่ระบุไว้ไม่ทำงานสำหรับฉัน แต่ฉันสิ้นสุดการถอนการติดตั้งและติดตั้ง Homebrew ซึ่งเป็นเคล็ดลับ คำแนะนำในการถอนการติดตั้งอาจพบได้ที่นี่: http://osxdaily.com/2018/08/12/how-uninstall-homebrew-mac/



1

โซลูชัน MAC OS X:

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

ด้วย "ผู้ใช้: staff = ผู้ใช้รูทเริ่มต้นบน OSX


0

ผมได้รับปัญหานี้หลังจากใช้สคริปต์ติดตั้งซึ่งจะเพิ่มคำสั่งเสร็จสิ้นกับเปลือกผ่านรายการในgoogle-cloud-sdk.zshrc

การปฏิบัติตามคำแนะนำของ Homebrew สำหรับการกำหนดค่าความสำเร็จใน zshมีประโยชน์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.