Tại sao tôi nhận được quyền sở hữu tập tin không rõ ràng của tập tin lỗi khi Launch Agent chạy tệp .plist của tôi?


54

Tôi có Launch Agent được cấu hình để chạy tệp .plist chẳng hạn : /Library/LaunchAgent/foo.plist. Bên trong .plist này, nó được thiết lập để chạy trong LoginWindowAqua.

Khi tôi cố gắng khởi động máy tính của mình và vào màn hình đăng nhập, phần này sẽ chạy nhưng thay vào đó sẽ báo lỗi sau (trong bảng điều khiển):

launchctl: Quyền sở hữu nổi tiếng trên tệp (bỏ qua): / L Library / LaunchAgents / foo.plist

Khi tôi cố gắng đăng nhập vào tài khoản không phải quản trị viên, nó sẽ đưa ra thông báo lỗi chính xác. Khi tôi cố gắng đăng nhập bằng tài khoản quản trị, nó hoạt động tốt.

Tôi thành thật mà nói, tôi không biết nhiều về các đặc quyền và quyền của Mac OS X.

Để tạo tệp, tôi đã mở nó lên emacs, bằng sudotài khoản quản trị viên (ví dụ: bằng cách sử dụng sulệnh vì tài khoản khác không có đặc quyền sudo) và sau đó lưu nó.

Tôi cần sử dụng tài khoản nào để tạo tệp để nó hoạt động cho tất cả người dùng?
Tôi có cần sử dụng lệnh sudo không?
Tôi có cần thay đổi quyền truy cập tệp (ví dụ: sử dụng chmod) không?
Có một cách dễ dàng để lấy một tập tin hiện có và thay đổi quyền sở hữu của nó thay vì phải tạo lại tập tin?
Ai đó có thể vui lòng giải thích tại sao lỗi này xảy ra?


Ls -l cung cấp những gì cho
L Library / LaunchAgent / foo.plist

1
@Mark: nó cung cấp cho các mục sau:-rw-r--r--@ 1 admin staff 653 Oct 17 14:31 /Library/LaunchAgents/foo.plist
Senseful

Cũng có thể buộc tải ( -F).
kenorb

Câu trả lời:


51

Nếu một số nguyên được sở hữu bởi root và có thể ghi bởi người dùng không phải root, thì đó là vấn đề bảo mật.

Bạn có thể thay đổi chủ sở hữu thành root bằng sudo chown root <filename>và thay đổi quyền với sudo chmod 644 <filename>(4 để truy cập đọc, 2 cho quyền truy cập ghi, 1 để truy cập thực thi, được thêm vào. Số đầu tiên dành cho chủ sở hữu, thứ hai cho nhóm, thứ ba cho tất cả mọi người.)


Những công việc này. Tôi chỉ bối rối về lý do tại sao tôi phải thay đổi chủ sở hữu để root. Là người dùng root được sử dụng cho LaunchAgents?
Có ý thức

1
Vâng tôi cũng nghĩ thế.
Michiel de Mare

1
Tôi biết đây là một bài viết cũ hơn, nhưng đây là một câu trả lời tuyệt vời! Tôi đã thay đổi quyền trên /system/l Library / launchaemons / com.apple.mdnsresponder để thử một bản sửa lỗi mà Apple khuyến nghị, nhưng tôi sẽ gặp lỗi được đề cập ở trên khi thử tải nó sau đó. Thay đổi chủ sở hữu và quyền như được mô tả ở trên là cách duy nhất để lấy lại kết nối internet của tôi. Cảm ơn!

Đối mặt như bây giờ và giải quyết. Tôi đoán rằng chủ sở hữu của các tập tin nhiều gọi launchctl. Tôi đã tạo tập tin như người dùng bình thường của tôi và đang thực hiện sudo. Do đó có lỗi. Vì root không phải là chủ sở hữu của tập tin, sudonên không cần thiết. Tôi chạy mà không có sudovà nó hoạt động tốt.
Bibhas

14

Từ mô tả manpage của launchctl (1) của loadtiểu ban:

Lưu ý rằng các tệp cấu hình trên mỗi người dùng (LaunchAgents) phải được sở hữu bởi người dùng đang tải chúng. Tất cả các trình nền toàn hệ thống (LaunchDaemons) phải được sở hữu bởi root. Các tệp cấu hình không được ghi theo nhóm hoặc thế giới. Những hạn chế này được đặt ra vì lý do bảo mật, vì cho phép khả năng ghi vào tệp cấu hình launchd cho phép người ta chỉ định tệp thực thi nào sẽ được khởi chạy.

launchctl có một số tin nhắn của Dub Dubious. Các launchd mã cho 10.6.7 (ví dụ) có ba thông điệp như vậy trong của nó launchctl.c(xem chức năng path_goodness_check).

  1. Dubious permissions on file (skipping): <pathname>
  2. Dubious ownership on file (skipping): <pathname>
  3. Dubious path. Not a regular file or directory (skipping): <pathname>

Để tránh những tin nhắn này, một tên đường dẫn phải là (# 3) một tệp thông thường hoặc thư mục 1 (hoặc một liên kết tượng trưng đến một) mà (# 1) thuộc sở hữu của root hoặc người dùng đang gọi và (# 2) không phải là nhóm nhóm hay hoặc khác Có thể viết được (tức là chmod go-w).

1 Không có tên ống, nút thiết bị đặc biệt khối / ký tự, ổ cắm tên miền cục bộ, v.v.


Tệp của bạn có thể thuộc sở hữu của người dùng quản trị viên vì bạn nói rằng bạn không nhận được thông báo khi đăng nhập với tư cách người dùng đó (tên đường dẫn được sở hữu bởi người dùng gọi trong trường hợp đó).
Để làm cho tên đường dẫn hoạt động cho người dùng khác, nó phải được sở hữu bởi root.

Để sắp xếp việc này, hãy làm:

sudo chown root /Library/LaunchAgent/foo.plist

1

Cảm ơn câu trả lời (đổi chủ sở hữu thành root) - đó là tất cả những gì tôi cần.

Để làm cho điều này nhiều hơn một chút so với bài đăng 'tôi cũng vậy' ... Tôi đã đến đây thông qua một đường dẫn phức tạp: Tôi đã nhận được "API này chỉ có thể được sử dụng bởi một quá trình chạy trong phiên Aqua" cho một launchdaemon. Tìm kiếm câu trả lời đã đưa tôi đến Technote của Apple về daemon và các tác nhân giải thích cách khắc phục lỗi 'phiên Aqua', nhưng điều đó khiến tôi gặp phải vấn đề 'quyền sở hữu đáng ngờ'. Đó là cách tôi đến đây, nơi vấn đề cuối cùng của tôi đã được giải quyết.

Có thể thêm tất cả những điều đó vào cuộc thảo luận này sẽ khiến một số công cụ tìm kiếm liên kết trang này với một trong những vấn đề tiền đề, do đó tiết kiệm được một số nhà thám hiểm trong tương lai.


Lưu ý, đây nên là một bình luận chứ không phải là một câu trả lời.
studgeek

1
Tôi đã có thể nhận xét, nhưng điểm danh tiếng của tôi không đủ cao. (Không có vẻ như ngược lại rằng người ta có thể 'trả lời' với một danh tiếng thấp nhưng không bình luận?)
Matt Strange

-2

đối với tệp trong ~ / Library / LaunchAgent do người dùng sở hữu và không phải root không sudo, nếu bạn sẽ phải thay đổi quyền sở hữu vì bạn đang tải nó từ người dùng root


-3

Đây là những gì xảy ra khi mọi người không biết làm thế nào sudohoạt động. Để vô hiệu hóa các dịch vụ trên các tệp do người dùng của bạn sở hữu, chỉ cần gọi launchtlmà không cần sudo.

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.