Tại sao sudo mất quá nhiều thời gian?


13

Gần đây tôi đã cập nhật lên macOS Sierra 10.12.4 Beta (16E144f) và đó có thể là nguyên nhân gây sudochậm trễ tới 10 phút vì đây là thay đổi gần đây nhất mà tôi nhớ lại do sự cố này xảy ra. Tôi chưa bao giờ phải chờ đợi quá lâu cho một chương trình cơ bản và rõ ràng có điều gì đó không ổn. Lệnh cuối cùng đã thành công, nhưng sau khi chờ đợi quá lâu.

Tôi đã sử dụng câu hỏi này như một tài liệu tham khảo. Cho đến nay, tôi cũng đã thử thêm tên máy chủ của mình vào cuối 127.0.0.1dòng /etc/hosts. Tôi đã kiểm tra /etc/resolv.confvà tôi đã có thêm một số mục từ khi tôi ở trên mạng cần các mục nhập DNS thủ công, nhưng tôi đã xóa chúng và không có sự khác biệt. Tôi đã sử dụng networksetup -setdnsserverslệnh để khôi phục các giá trị ban đầu. Internet vẫn hoạt động tốt nhưng vẫn rất chậm sudo.

Tôi đã thử logger 'test'lệnh nghĩ rằng nó sẽ ghi vào /var/log/system.log, nhưng có vẻ như nó đã xóa hoàn toàn tệp đó mặc dù nó đã sớm được thực hiện lại.

Tôi đã hy vọng sử dụng stracelệnh để xem những gì đã xảy ra trong khi sudochạy nhưng lệnh đó không có sẵn trên OS X. Đã có ai gặp phải vấn đề này trên hệ điều hành này chưa?

/var/log/system.log có các thông báo sau có thể liên quan. Một lần nữa lệnh cuối cùng lại thành công như bình thường:

Feb  1 00:07:39 mycomputer com.apple.xpc.launchd[1] (com.apple.imfoundation.IMRemoteURLConnectionAgent): Unknown key for integer: _DirtyJetsamMemoryLimit
Feb  1 00:07:56 mycomputer com.apple.xpc.launchd[1] (com.apple.quicklook[2355]): Endpoint has been activated through legacy launch(3) APIs. Please switch to XPC or bootstrap_check_in(): com.apple.quicklook
Feb  1 00:08:16 mycomputer System Preferences[1886]: I can not do what i want
Feb  1 00:11:23 mycomputer com.apple.xpc.launchd[1] (com.apple.opendirectoryd[2335]): Service exited with abnormal code: 70
Feb  1 00:12:07 mycomputer syslogd[54]: ASL Sender Statistics
Feb  1 00:16:35 mycomputer com.apple.xpc.launchd[1] (com.apple.opendirectoryd[2395]): Service exited with abnormal code: 70

Bất kỳ trợ giúp sẽ được đánh giá cao.


Có vấn đề gì lệnh bạn chạy qua sudo? Làm thế nào để các dấu thời gian trong nhật ký liên quan đến hành động của bạn để thực hiện sudo và trên sudo chạy qua? Tôi thấy opendirectoryd ở đó, bạn làm việc với tài khoản cục bộ hoặc tài khoản mạng? Điều gì xảy ra nếu bạn chuyển đổi người dùng (hoặc thiết lập một địa phương mới), sudo có chậm không?
nohillside

Tôi đang chạy cùng một bản beta và sudo rất nhanh như mọi khi.
nohillside

1
@patrix À được rồi. Vâng, nó rất tốt có thể là một cái gì đó khác. Có, nó xảy ra bất kể tôi sử dụng lệnh nào với sudo, độ trễ là phù hợp. Về cơ bản, lệnh bắt đầu xung quanh dòng nhật ký đó com.apple.quicklookvà cuối cùng là kết thúc ở cuối, vì vậy trong ví dụ đó là khoảng 8 phút với tất cả các thông báo ở giữa. Thông điệp opendirectoryd dường như xảy ra bất cứ khi nào cuối cùng nó chạy sudo lstrong thư mục nhà địa phương của tôi. Ngay bây giờ tôi chỉ làm việc với các thư mục địa phương. Tôi chỉ có một người dùng trên máy tính này mặc dù tôi có thể thấy những gì xảy ra với tài khoản mới ...
Spencer Williams

@patrix Tôi vừa tạo một người dùng khác có quyền quản trị viên. Đáng buồn thay, tài khoản đó đang có cùng một vấn đề.
Spencer Williams

Câu trả lời:


11

Câu trả lời của ErikMH đã cho tôi ý tưởng trước tiên chỉ cần cố gắng hoàn nguyên tệp sudoers, mà không hoàn nguyên / nâng cấp lại toàn bộ hệ thống của tôi. Vì vậy, trong ngắn hạn:

  1. Chạy cái này để lấy shell root: sudo -s
  2. Tạo một bản sao của /private/etc/sudoers
  3. Chạy: cp /private/etc/sudoers\~orig /private/etc/sudoers
  4. Sửa quyền bằng cách chạy: chmod 440 /private/etc/sudoers ; chown root:wheel /private/etc/sudoers
  5. Di chuyển bất kỳ tập tin /private/etc/sudoers.d/từ đó
  6. Kiểm tra sudotrong một thiết bị đầu cuối khác
  7. Đừng quên thoát khỏi shell này để ngăn chặn các lệnh vô tình chạy root khi bạn không có ý định

Bây giờ chạy sudonên hoạt động trở lại.

Bước tiếp theo là kiểm tra sự khác biệt giữa tệp sudoers cũ (bạn đã sao chép ở bước 2) và hiện tại và thêm các thay đổi đó từng bước trở lại /private/etc/sudoershoặc /private/etc/sudoers.d/, mỗi lần chạy một lệnh sử dụng sudođể kiểm tra xem thay đổi có phá vỡ nó không.

Trong trường hợp của tôi, tôi đã chỉ định một nhóm không tồn tại trong tệp sudoers. Sửa lỗi đó đã khắc phục vấn đề của tôi.


đã làm việc trên macOS 10.13!
Nisba

Làm việc cho tôi là tốt (OSX 10.13). Cũng có vấn đề tương tự - nhóm không tồn tại trong tệp sudoer.
Petr Cibulka

Hmm ... Tôi không nhớ đã thay đổi tập tin sudoers trên máy mà tôi gặp vấn đề này, nhưng tôi ước tôi đã thử những gì bạn đề xuất thay vì khôi phục hệ thống của tôi.
Spencer Williams

Tôi đã tiếp tục và chấp nhận câu trả lời của bạn vì có vẻ như mọi người đang xác nhận rằng nó có ích, và tôi chắc chắn rằng tôi đã thử điều này trước tiên, và tôi thường không khuyên bạn nên khôi phục toàn bộ hệ thống của mình.
Spencer Williams

2

Điều này có thể xảy ra khi nâng cấp lên 10.12.4 nếu bạn đã từng chỉnh sửa tệp / private / etc / sudoers.

Giải pháp dễ nhất là:

  1. Quay trở lại phiên bản trước của hệ thống (bạn luôn sao chép hệ thống của mình trước khi cập nhật, phải không?)
  2. Xóa / riêng tư / etc / sudoers
  3. Sao chép / private / etc / sudoers ~ orig sang sudoers
  4. Đặt lại quyền sở hữu của sudoers thành system / root - chỉ đọc
  5. Nâng cấp hệ thống lên 10.12.4

"Điều này có thể xảy ra khi nâng cấp lên 10.12.4 nếu bạn đã từng chỉnh sửa tệp / private / etc / sudoers." Chúng ta có biết những gì thực sự gây ra nó?
Wowfunhappy

1

Tôi ước tôi có thể tìm ra nguyên nhân thực sự của việc này, nhưng tôi chỉ có thể giải quyết vấn đề sau khi khôi phục phần mềm hệ thống. Trước đây tôi đã sử dụng bản Beta công khai của macOS Sierra nhưng bây giờ tôi là bản chính.

Tôi đang dần tải lại tất cả các chương trình của mình và tôi sẽ lưu ý nếu tôi gặp lại sự chậm trễ sudo.


0

Tôi đã có một tập tin trong /etc/sudoers.d/đó tôi loại bỏ. Voila - sudolại nhanh chóng.

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.