Cách tìm hiểu điều gì khiến quyền sở hữu / usr / local thay đổi từ tên người dùng của tôi thành root


13

Tôi sử dụng homebrewnhư một trình quản lý gói cho ứng dụng phát triển web nhất định. Để brewcập nhật, tôi chạy update brewmỗi vài ngày và cũng chạy brew doctor. Thông thường, điều này là tốt và brewnói với tôi rằng tôi đã sẵn sàng để ủ.

Tuy nhiên, thỉnh thoảng, tôi nhận được lỗi sau:

Cảnh báo: / usr / local / etc không thể ghi.

Điều này có thể xảy ra nếu bạn "sudo make install" không được quản lý bởi Homebrew. Nếu một công thức cố gắng ghi một tập tin vào thư mục này, cài đặt sẽ thất bại trong bước liên kết.

Bạn có lẽ nên chown/ usr / local / etc

Cảnh báo: Thư mục / usr / local không thể ghi. Ngay cả khi thư mục này có thể ghi được khi bạn cài đặt Homebrew, phần mềm khác có thể thay đổi quyền trên thư mục này. Một số phiên bản của thành phần "InstantOn" của Airfoil được biết là làm điều này.

Bạn có thể nên thay đổi quyền sở hữu và quyền của / usr / local trở lại tài khoản người dùng của bạn.

Thật dễ dàng để đặt lại quyền cho tên người dùng của tôi. Sau đó brewcó vẻ ổn.

Nhưng điều gì đang gây ra điều này xảy ra?

Có một bản ghi cho thấy những gì gây ra sự thay đổi quyền?


3
Không có nhật ký nhưng lưu ý rằng việc có / usr / local được sở hữu bởi rood là tiêu chuẩn Unix và vì vậy mọi bản dựng vào đó đều mong đợi nó. Giải pháp là không trộn lẫn một thư mục với cả trình quản lý gói (Homebrew) và trình biên dịch Unix tiêu chuẩn - Sử dụng một thư mục khác cho một trong số chúng
user151019

3
Thêm phần mềm vào cùng vị trí với trình quản lý gói sử dụng là một ý tưởng tồi và vì vậy, việc thay đổi quyền sở hữu và quyền trên cũng vậy /usr/local. Nhưng nếu bạn khăng khăng thì bạn có thể make installkhông sử dụng sudocho các gói mà bạn tự cài đặt.
fd0

1
Nâng cấp OS X thường đặt lại / usr / quyền sở hữu và quyền cục bộ.
mspasov

1
@Others ah Tôi đọc đoạn trích từ Homebrew chứ không phải câu hỏi
user151019

1
Bạn đã cài đặt cái gì khác (theo cách thủ công hoặc thông qua bất kỳ trình quản lý gói nào khác) trên máy Mac được cấu hình để cài đặt mặc định /usr/local?
dan

Câu trả lời:


13

Tôi đã có vấn đề chính xác như vậy, và hóa ra việc cập nhật tự động Sophos là đáng trách. Tôi đã tìm ra điều này bằng cách chạy:sudo fs_usage | grep "usr/local"

Mất một lúc, nhưng cuối cùng tôi cũng thấy daemon "Cài đặt" được đặt tên một cách hữu ích của Sophos với các quyền / usr / local.

Tôi vẫn đang cố gắng tìm ra một công việc phù hợp xung quanh cho hành vi này.

EDIT: Tôi tin Sophos đã khắc phục vấn đề này, xem liên kết trong các bình luận của câu trả lời này. Nó dường như được cố định cho tôi ít nhất!


4
Có một cuộc thảo luận ở đây: community.sophos.com/products/free-antivirus-tools-for-desktops/... này nên được cố định trong tháng 11 năm 2015
JoeZuntz

@JoeZuntz Đẹp tìm! Tuyệt vời rằng họ thực sự đang đẩy một sửa chữa.
khác

@ các mẹ cảm ơn vì thông tin này. Tôi đã có thể sửa mọi thứ sau khi nâng cấp lên 10.11.1 và homebrew hoạt động trở lại, nhưng thường xuyên hơn không, mỗi lần tôi đi nâng cấp bia, các quyền đã thay đổi một lần nữa. Nó đã làm tôi khó chịu khi phần mềm liên tục thay đổi perms trên / usr / local.
Tim X

@TimX Vâng, nó hơi tệ ... May mắn thay, có vẻ như Sophos sẽ vá nó vào cuối tuần tới, ngày 20 tháng 11.
khác

4

Hóa ra Filewave là thủ phạm. Filewave là một phần mềm quản lý hệ thống được sử dụng bởi trường học của chúng tôi để thúc đẩy cập nhật phần mềm. Cảm ơn các đầu vào.


2

Tôi chỉ có một ý tưởng sơ bộ làm thế nào để có được tên trộm cho phép. Đây không phải là một giải pháp cho vấn đề của bạn, nhưng nhiều cách giải quyết khác.

Còn về việc viết một watchdog trong Automator hoặc với Hazel (hành động thư mục) để xem thư mục cụ thể này nhưng thay vì thêm một chức năng như Scale image, bạn chỉ cần sử dụng shellscript thực thi một số lệnh shell:

  • Nếu thư mục bị thay đổi theo bất kỳ cách nào, chỉ cần chụp nhanh các quyền và id quá trình hiện đang truy cập fuser <foldername>.
  • sau đó bạn tra cứu trong bảng quy trình id quá trình ( ps auxwwwwww | grep <process id>) và cuối cùng
  • viết một email cho chính bạn với những thông tin thu thập được.

Thật không may, tôi không phải là Automator sadhu, nhưng tôi phát hiện ra rằng Google có rất nhiều giải pháp cho một vấn đề tương tự như vậy.


0

Nếu bạn sử dụng Time Machine, bạn có thể tìm thấy thời gian gần đúng khi quyền thay đổi bằng cách khám phá Backups.backupdbtrong Terminal. Sử dụng ls -ldtrong các thư mục được đánh dấu thời gian, vd

ls -ld /Volumes/Backup/Backups.backupdb/Mac/2015-12-25-120000/Macintosh\ HD/usr/local 

Mà sẽ hiển thị thông tin chủ sở hữu và nhóm.

Khi bạn có ngày thay đổi xảy ra, bạn có thể tìm hiểu những gì khác có thể đã thay đổi sau đó trên hệ thống của bạn. Một kỹ thuật đơn giản là sử dụng Tìm kiếm tập tin Tìm kiếm và thêm một Last modified datetiêu chí. Các công cụ tốt khác đang findmdfindtrong Terminal.


-1

Đây là một tác dụng phụ của việc cập nhật hệ thống của bạn; OS X có thể thực hiện một số quyền "sửa chữa" trong quá trình cập nhật vì / usr / local được lồng trong một thư mục thuộc sở hữu gốc.


AFAICT, nâng cấp lên El Capitan là nguyên nhân gây ra sự cố cho tôi
Giuseppe

-3

Bạn đã sử dụng Disk Utilityselect Macintosh HDrồi chạy Verify Disk Permissionvà sau đó Repair Disk Permissionnếu cần, thay vì làm thủ công?

Bây giờ điều này không nên khắc phục vấn đề của bạn, nhưng đó là điểm khởi đầu 'được biết đến' để xem khi nhà pha chế thay đổi quyền. Nó có thể hiển thị các vấn đề cơ bản nếu bạn là người may mắn.

Ngoài ra new update -vđể có thêm đầu ra dài dòng, cộng với các bản ghi cũ ở đây ~/Library/Logs/Homebrewtheo nhật ký homebrew ở đâu?


2
Disk Utilitysẽ không xác minh hoặc sửa chữa quyền /usr/localvì thư mục này không tồn tại trên bản cài đặt mới của Yosemite.
dan

Tôi kiểm tra giả thuyết này đầy đủ về Yosemite bằng cách tạo ra một cái mới /usr/localthuộc về tôi và chạy DU. Không có bất kỳ /usr/localtrong DUnhật ký. Và /usr/localvẫn thuộc về tôi.
dan
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.