zsh compinit: thư mục không an toàn


238

Nó có nghĩa là gì và làm thế nào tôi có thể sửa chữa nó?

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

Chạy compaudittrả về như sau:

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

2
Bất cứ ai cũng biết tại sao cảnh báo này xảy ra?
Blaszard

3
Một năm sau khi @Blaszard hỏi câu hỏi hợp lệ (dưới dạng nhận xét), 'linkyndy' đã trả lời câu hỏi dưới đây (dưới dạng câu trả lời).
Happy Green Kid Naps

Câu trả lời:


342

CÁi này đã sửa nó giúp tôi:

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

Tín dụng: một bài đăng trên danh sách gửi thư zsh


EDIT: Như @biocyberman đã chỉ ra trong các bình luận. Bạn cũng có thể cần cập nhật chủ sở hữu của site-functions:

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

Trên máy của tôi (OSX 10.9), tôi không cần phải làm điều này ngoài YMMV.

EDIT2: Trên OSX 10.11, chỉ điều này hoạt động:

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

Ngoài ra người dùng: staff là quyền mặc định chính xác trên OSX.


1
nếu bạn không có root
kirill_igum

2
@kirill_igum bởi "không root" có nghĩa là "không có quyền truy cập root "? Nếu vậy, bạn nên sao chép các tệp vào thư mục mà bạn có quyền truy cập, sửa lỗi .zshenv.zshrcsử dụng thư mục mới và thực hiện tương tự chmodtrên thư mục mới như tôi đã đăng với thư mục.
chakrit

@kirill_igum xem tin nhắn danh sách gửi thư tôi đã liên kết đến.
chakrit

1
Tôi nhận thấy rằng sau khi thiết lập chủ sở hữu thành root, cần phải thu hồi quyền truy cập ghi cho cả nhóm và nhóm khác. Tôi đã sửa đổi chmodlệnh thành sudo chmod -R go-w zsh.
gvd

1
Lưu ý: tôi đã liên kết tượng trưng trong /usr/local/share/zsh/site-functionsđể /usr/local/Cellarvà phải chown -R root:staff /usr/local/Cellarcũng trước khi làm việc này.
mVChr

265
compaudit | xargs chmod g-w

sẽ thực hiện thủ thuật này, xem http://www.wezm.net/technical/2008/09/zsh-cygwin-and-insecure-directories/


6
Đây là nó! Xóa quyền ghi vào nhóm. Cảm ơn
glarrain

8
Câu trả lời tốt hơn nhiều, cần lưu ý rằng compauditcó thể được sử dụng để chẩn đoán các vấn đề như thế này cũng như khắc phục chúng.
Wolph

7
Lưu ý rằng bạn cũng có thể phải thay đổi chủ sở hữu của các tệp thành root - Tôi đã phải:compaudit | xargs chown root
Brad

4
Đây chắc chắn là giải pháp tốt nhất cho tôi. Tôi đã cài đặt zsh và zsh-hoàn thành với Homebrew, vì vậy rõ ràng không muốn thay đổi nó để được sở hữu bởi root.
katy lavallee

2
compaudit | xargs chmod g-wcùng ompaudit | xargs chown rootlàm việc với tôi và xuất hiện để giữ cho HomeBrew hạnh phúc. ai đó có thể giải thích những gì đang xảy ra một chút nữa.
nyxee

76

Hầu hết các câu trả lời đi kèm với một giải pháp, nhưng không đề cập tại sao cảnh báo này xảy ra. Đây là một đoạn trích từ compinit của ZSH :

Vì lý do bảo mật, compinit cũng kiểm tra xem hệ thống hoàn thành sẽ sử dụng các tệp không thuộc quyền sở hữu của người dùng gốc hay người dùng hiện tại hay các tệp trong các thư mục có thể ghi theo thế giới hoặc theo nhóm hoặc không thuộc quyền sở hữu của người dùng gốc hoặc người dùng hiện tại . Nếu các tệp hoặc thư mục như vậy được tìm thấy, compinit sẽ hỏi liệu hệ thống hoàn thành có thực sự được sử dụng không. Để tránh các thử nghiệm này và làm cho tất cả các tệp tìm thấy được sử dụng mà không cần hỏi, hãy sử dụng tùy chọn -u và để làm cho compinit im lặng bỏ qua tất cả các tệp và thư mục không an toàn sử dụng tùy chọn -i. Kiểm tra bảo mật này được bỏ qua hoàn toàn khi tùy chọn -C được đưa ra.

Do đó, giải pháp ngụ ý sửa một (hoặc tất cả) các điều sau đây:

  • thiết lập người dùng hiện tại làm chủ sở hữu của tất cả các thư mục / thư mục con / tệp trong nguyên nhân:

    compaudit | xargs chown -R "$(whoami)"
    
  • xóa quyền ghi cho nhóm / người khác cho các tệp trong nguyên nhân:

    compaudit | xargs chmod go-w
    

Một cách tiếp cận khác là bỏ qua các kiểm tra này bằng cách sử dụng

compinit -u

nhưng tôi không thực sự đề xuất điều này, vì việc che giấu các vấn đề dưới tấm thảm chỉ giải quyết được các vấn đề trong thời gian ngắn.


1
Cảm ơn. Tôi ngạc nhiên rằng mọi người sẽ gõ ngẫu nhiên các lệnh không thực sự hiểu vấn đề.
hét

3
Một hệ thống nhiều người dùng thì sao? Trong trường hợp như vậy, chown -R "$(whoami)"đối với các tệp bên ngoài thư mục chính như /usr/local/sẽ không hoạt động. Theo các tài liệu, nó sẽ có ý nghĩa hơn để làm cho các tập tin được sở hữu root?
goetzc

Tôi thích câu trả lời này tốt nhất. Làm tôi suy nghĩ về lý do tại sao điều này xảy ra với tôi. Hóa ra nó đã xảy ra sau khi thêm một người dùng khác vào nhóm chính của người dùng của tôi. Các thư mục dưới $ HOME / .antigen / gói được sở hữu bởi người dùng của tôi và nhóm của tôi. Vì vậy, trong trường hợp của tôi loại bỏ người dùng đó khỏi nhóm đã giải quyết vấn đề.
Samuel

25

Tôi đã nhận được những cảnh báo tương tự khi tôi sudo -i bắt đầu một trình bao gốc, giải pháp của @ chakrit không hiệu quả với tôi.

Nhưng tôi đã tìm thấy -uchuyển đổi compinitcông việc, ví dụ như trong .zshrc / zshenv của bạn hoặc nơi bạn đã gọicompinit

compinit -u

NB: Không khuyến khích cho hệ thống sản xuất

Xem thêm http://zsh.sourceforge.net/Doc/Release/Completion-System.html#Initialization


đó là món duy nhất có tác dụng với tôi tôi đã cố gắng sử dụng zsh với compinit trên hệ thống con linux trên windows 10
denns

17

Điều này hoạt động cho máy Mac của tôi sau khi cập nhật lên High Sierra.

Xóa quyền truy cập ghi nhóm:

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

Tốt nhất là giữ sự thay đổi giới hạn trong các thư mục zsh.


1
sudo chmod gw / usr / local / share / zsh / site-function (làm việc cho tôi trong mac 10.15)
shijin

2
Đây là bản sửa lỗi duy nhất hoạt động với tôi trên Mac Catalina
user8467470

1
Bản sửa lỗi này cũng có hiệu quả với tôi trên MacOS Catalina. Cảm ơn!
Tyler

12

Câu trả lời được chấp nhận không hoạt động với tôi trên macOs Sierra (10.12.1). Phải làm nó đệ quy từ / usr / local

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

Lưu ý: Bạn có thể nhận tên người dùng của mình với whoamivà nhóm của bạn vớiid -g


4
Tôi đã không làm theo cách này cũng như trên Sierra, mặc dù trên hệ thống nhiều người dùng, nhóm / người dùng chính xác phải là root: staff
Marshall Eubanks

5

Hai dòng này đã cố định cho tôi.

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

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

3
Làm việc cho tôi! Tôi sử dụng tài khoản mạng trên PC của mìnhsudo chown -R $(whoami):root /usr/local/share/zsh sudo chown -R $(whoami):root /usr/local/share/zsh/*
Ubutun

5

Trên macOS Sierra, bạn cần chạy: sudo chown -R $(whoami):staff /usr/local


4

Tôi đã sửa nó bằng cách làm

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

trong trường hợp của tôi, các thư mục khác trong share / cũng có nhóm "staff" được chỉ định


Câu hỏi không thuộc chủ đề cho Stack Overflow như được định nghĩa trong trung tâm trợ giúp . Xin đừng trả lời những câu hỏi như vậy; thay vào đó, bạn nên gắn cờ chúng để chú ý và chúng sẽ được đóng hoặc di chuyển một cách thích hợp.
Toby Speight

4

trên Mojave, điều này đã tạo ra mánh khóe: sudo chmod go-w /usr/local/share


1
Vẫn còn tốt hơn:sudo chmod -R go-w /usr/local/share
ecmanaut

3

Đề nghị của tôi sẽ là chạy compaudit và sau đó chỉ sửa các quyền trên các thư mục được kiểm toán tìm thấy. Hãy chắc chắn rằng các thư mục được xác định không có quyền ghi cho nhóm hoặc khác.



3

Máy của tôi:

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

Vì vậy, đây là những gì tôi đã làm,

  1. chạy compauditvà nó sẽ cung cấp cho bạn một danh sách các thư mục mà nó cho là không an toàn.

  2. chạy sudo chmod -R 755 target_directory (ví dụ sudo chmod -R 755 /usr/local/share/zsh:)

Sơ đồ:

compaudit

trả về:

/ usr / địa phương / chia sẻ / zsh

vì vậy tôi chạy

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

đọc thêm ở đây liên kết


2

Sáng nay, một số gói trong hệ thống của tôi đã cập nhật và để lại cho tôi thông báo lỗi này. Tôi đang sử dụng Ubuntu 18.04.

Rõ ràng, một cái gì đó trong bản cập nhật đã thay đổi tên người dùng và nhóm thành số, thay vì root, như vậy:

# 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

Tôi chỉ đơn giản là thay đổi người dùng và nhóm cho tập tin này trở lại rootvà vấn đề đã biến mất. Tôi không cần thay đổi bất kỳ quyền nào và sẽ thận trọng không làm như vậy trừ khi nguyên nhân cơ bản của vấn đề được hiểu.

sudo chown root _code && sudo chgrp root _code

Sau khi chuyển đổi 131142quay lại root, thông báo lỗi này từ zsh đã biến mất.


2
  1. chạy compauditvà nó sẽ cung cấp cho bạn một danh sách các thư mục mà nó cho là không an toàn

  2. sudo chown -R username:root target_directory

  3. sudo chmod -R 755 target_directory


2

Gần đây tôi đã có cảnh báo tương tự về Catalina. Một cách giải quyết dễ dàng là đặt cái này lên đầu .zshrc của bạn

ZSH_DISABLE_COMPFIX=true


1

chạy lệnh này làm việc cho tôi trên mac OS Catalina:

compaudit | xargs chmod g-w,o-w


1

Giải pháp MAC OS X:

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

Ngoài ra "user: staff = người dùng root mặc định trên OSX.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.