lỗi sudo, là chế độ 0777, nên là 0440


26

Tôi đang nhận được lỗi sudo, làm cách nào để khắc phục lỗi này?

sudo: /etc/sudoers is mode 0777, should be 0440
sudo: no valid sudoers sources found, quitting 

Như người dùng trước đây đã lưu ý, sử dụng "chmod 0440 / etc / sudoers" khi tệp sudoers.d / README có chmod sai KHÔNG LÀM VIỆC.
kentfx

Bạn có gợi ý rằng khi sự cố là quyền /etc/sudoers.d/README, lỗi vẫn có thể nói sudo: /etc/sudoers is mode 0777, should be 0440?
Eliah Kagan

Câu trả lời:


26

Lựa chọn đầu tiên

Theo dõi bài viết này :

  1. Khởi động lại PC
  2. Khi màn hình lựa chọn khởi động GRUB hiển thị, chọn Chế độ khôi phục. (Nếu nó không xuất hiện, hãy bấm Shiftphím khi bạn thấy trình tải GRUB ở phía dưới).
  3. Một thiết bị đầu cuối màu đen sẽ xuất hiện, tại thời điểm này, bạn có thể chạy lệnh này (bạn nên có quyền root):

    chmod 0440 /etc/sudoers
    

Hoặc

Bạn sẽ phải đặt Ubuntu lên LiveCD, khởi động vào LiveCD, gắn Phân vùng Ubuntu vào ổ cứng (Mở trình duyệt tệp, như Nautilus và nhấp vào Phân vùng Ubuntu của bạn hoặc nhấp vào Địa điểm -> "Phân vùng xxGB / Phân vùng Ubuntu của bạn ").

Sau đó, mở một thiết bị đầu cuối trong phiên LiveCD và nhập hai lệnh sau:

cd /media/<name of permanent ubuntu partition>/etc
sudo chmod 0440 sudoers

Vấn đề thêm

Nếu có bất kỳ lỗi nào (như được đăng dưới đây), hãy làm theo lời nhắc lỗi và điều chỉnh từng tệp cho phù hợp bằng một trong hai bước trên:

sudo apt-get update sudo: /etc/sudoers.d/README là chế độ 0777, nên là 0440 sudo: / var / lib / sudo có thể ghi bởi người không sở hữu (040777), nên là mật khẩu 0700 [sudo] cho

Khắc phục bằng cách làm theo thông qua:

chmod 0440 /etc/sudoers.d/README
chmod 0700 /var/lib/sudo

Cả hai lệnh này nên được sử dụng một cách thích hợp với các bước được nêu ở trên. Họ sẽ thay đổi các quyền tập tin liên quan đến tập tin đó. 0440 sẽ cấp cho chủ sở hữu (root) và nhóm đọc quyền và 0700 sẽ cấp cho chủ sở hữu (root), đọc, viết và thực thi quyền.


Tôi có thể sử dụng lệnh sudo nhưng hạn chế. sudo apt-get update sudo: /etc/sudoers.d/README is mode 0777, should be 0440 sudo: /var/lib/sudo writable by non-owner (040777), should be mode 0700 [sudo] password for
dùng20698

@Alex: ESC là dành cho di sản GRUB phải không? Cần nhấn Shift cho GRUB2.
Lekensteyn

@ user20698: bạn không cần sudocái đầu tiên, cái thứ hai nên được thực hiện từ Live CD.
Lekensteyn

Nếu sudoers là 0777 thì người dùng không thể chạy chmod 0440 /etc/sudoersmà không có sudo vì sudoers có thể ghi được bởi mọi người?
Seppo Erviälä

2
@Seppo: không, chỉ chủ sở hữu của một tệp có thể thay đổi quyền truy cập tệp.
Lekensteyn

16

sudobị hỏng trong tình huống này, nhưng pkexec(giao diện dòng lệnh cho PolicyKit ) vẫn hoạt động, vì vậy bạn có thể sửa nó bằng một lệnh duy nhất. Không cần khởi động lại.

pkexec chmod 0440 /etc/sudoers

Giả định này chính sách được cài đặt. Nếu đây là một hệ thống máy tính để bàn (chứ không phải là một máy chủ không có GUI), thì nó là.


4

Khởi động vào chế độ phục hồi, chọn shell root và:

chmod 0440 /etc/sudoers

Hoặc nếu bạn không muốn khởi động lại, bạn có thể sử dụng phương án này:

pkexec chmod 0440 /etc/sudoers
pkexec chmod 0440 /etc/sudoers.d/README

nó sẽ thay đổi sự cho phép Hãy thử nó sẽ làm việc.


1
Tại sao bạn chmoding một số tập tin 440và những người khác để 0440? Bạn không nên sử dụng 0440thống nhất? Và tại sao bạn thay đổi quyền /etc/sudoers.d/READMEkhi bạn sử dụng pkexeccách này, nhưng không phải là khác? Và những gì về các tập tin có thể khác trong /etc/sudoers.d?
Eliah Kagan

1

Bạn đã làm gì để có được những lỗi này?

  • Nếu bạn đã làm : sudo chmod -R 777 /etc, bạn cần một đĩa CD Live để sửa lỗi này.

    1. Khởi động vào đĩa CD trực tiếp và chọn "Dùng thử"
    2. Gắn kết phân vùng Ubuntu của bạn (hoặc phân vùng chứa /etcnếu bạn đặt /etctrên một phân vùng riêng). Điều này có thể được thực hiện bằng cách sử dụng trình duyệt tệp như Nautilus hoặc menu Địa điểm
    3. Mở Terminal bằng cách vào Ứng dụng => Phụ kiện => Terminal
    4. Xác định thư mục phân vùng Ubuntu của bạn, bạn có thể liệt kê nội dung của các phân vùng được gắn kết bằng cách sử dụng ls -l /media. Nó có thể được đặt tên ubuntuhoặc disk. Trong các bước tiếp theo, tôi sẽ giả sử ubuntu.
    5. Trong Terminal, đặt quyền hạn chế theo mặc định:

      sudo find /media/ubuntu/etc -type f -exec chmod g-wx,o-rwx {} \;
      sudo find /media/ubuntu/etc -type d -exec chmod g-w,o-rwx {} \;
      
    6. Tiếp theo, sử dụng Live CD làm điểm tham chiếu để khôi phục quyền truy cập tệp. Lệnh dưới đây sẽ thay đổi quyền truy cập tệp để /etc/media/ubuntusử dụng /etcthư mục trên Live CD làm điểm tham chiếu. Nó sẽ chỉ thay đổi quyền trên tệp ( -type f) và thư mục ( -type d) trên cùng hệ thống tệp (-xdev ). Bất kỳ lỗi nào được ghi vào các ~/errors.loglỗi như "không tìm thấy tệp" cho biết rằng một tệp trên hệ thống đã được cài đặt, nhưng không tìm thấy trên Live CD. Lệnh từ bước 5 nên đặt quyền cho nó, nhưng để có kết quả tốt nhất, bạn nên cài đặt lại các gói tốt hơn.

      cd /media/ubuntu && sudo find etc -xdev \( -type f -o -type d \) -f -exec chmod --reference=/{} {} \; 2>~/errors.log
      
    7. Bây giờ an toàn ~/errors.logở đâu đó (như http://paste.ubfox.com/ ) để bạn có thể thêm nó dưới dạng nhận xét cho câu trả lời này nếu bạn gặp bất kỳ vấn đề nào với các ứng dụng.

1

Trong Ubuntu, trước tiên bạn có thể tấn công Ctrl+ Alt+ Tđể mở thiết bị đầu cuối. Sau đó, bạn có thể sao chép-dán lệnh bên dưới bằng Ctrl+ Cvà dán vào thiết bị đầu cuối với Ctrl+ Shift+ V.

pkexec chmod 0440 /etc/sudoers

0

Đối với tôi, tôi đã phải thêm một bước nữa cho các pkexecgợi ý, vì điều này , tôi đã may mắn khi tôi có 2 phiên ssh diễn ra khi tôi mắc phải một sai lầm ngu ngốc:

  1. Mở 2 thiết bị đầu cuối
  2. Trong thiết bị đầu cuối 2, chạy echo $$ để có được PID
  3. Chạy pkttyagent --process PID_FROM_STEP2 trong thiết bị đầu cuối 2
  4. Trong thiết bị đầu cuối 1, chạy pkexec chmod 0440 /etc/sudoers
  5. Trong trường hợp của tôi, tôi cũng phải chạy pkexec chown root:root /etc/sudoers
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.