Làm cách nào để sửa lỗi sudo sau khi chmod -R 777 / usr / bin.


15

Tôi đã nhập chmod -R 777 /usr/binvà bây giờ sudo không hoạt động.

Nó nói sudo must be setuid root.

Một số lời khuyên trực tuyến cho biết để chạy chown root:root /usr/bin/sudo chmod 4755 /usr/bin/sudo.

Khi vào chown root:root /usr/bin/sudonó hiển thị một opened in readonly modelỗi.


1
Bạn phải root để chạy các lệnh đó

Manoj Kumar: Có phải các pkexecphương pháp trong câu trả lời của tôi (mà bạn đã đánh dấu là được chấp nhận) giải quyết vấn đề này cho bạn? Tôi đã bị thuyết phục rằng, như Damien Roche và Oli đã nhận xét, phương pháp này không thực sự hoạt động sau khi một sudo chmod -R 777 /usr/binlệnh đã hoàn thành thành công. Giống như sudo, pkexecphải được setuid root để làm việc. (Tôi không chắc tại sao, vì nó sử dụng dịch vụ polkit , nhưng nó thì có.) Tuy nhiên, tôi nghĩ rằng tôi đã nghe người khác nói rằng điều này đã làm việc cho họ, thật là tò mò! Bạn đã nhấn Ctrl + C trước khi 777lệnh chmod kết thúc chưa?
Eliah Kagan

Xin chào. Phương pháp này thực sự đã làm việc cho tôi sau khi tôi vô tình chạy thành công sudo chmod -R 777 /usr/bin, nhưng chỉ sau khi đăng nhập vào roottài khoản.
iHowell

Câu trả lời:


10

Tình trạng được chấp nhận mặc dù, bây giờ tôi tin rằng câu trả lời này là sai . (Tôi hy vọng sẽ sớm cải thiện nó, sau khi tham khảo ý kiến ​​của OP về việc chấp nhận.) Tôi nghĩ rằng tôi nhớ lại những người khác nói rằng điều này đã có hiệu quả, nhưng tôi tin rằng vấn đề của họ ít nhất là hơi khác nhau. Phương pháp được mô tả trong tài liệu này vẫn có giá trị đối với một số tình huống chmod -R 777 /usr/binbị gián đoạn với Ctrl+ Choặc nếu không thì không hoàn thành. Nhưng một khi nó đã xảy ra, thì nó cũng không pkexecđược thiết lập và nó sẽ không hoạt động tốt hơnsudo , vì Damien Roche và Oli đã nhận xét đúng.

Trên hệ thống máy tính để bàn Ubuntu, PolicyKit được cài đặt, do đó pkexeccó thể được sử dụng để sửa chữa sudotệp hoặc sudoerstệp thực thi bị hỏng . Bạn không cần phải khởi động vào chế độ phục hồi và bạn không cần phải khởi động từ đĩa CD trực tiếp. Bạn thậm chí không cần phải khởi động lại.

Trong trường hợp này, hãy chạy các lệnh sau:

pkexec chown root:root /usr/bin/sudo
pkexec chmod 4755 /usr/bin/sudo

Xem câu hỏi này để biết thêm thông tin.


9
pkexec must be setuid root! Thật là một cơn ác mộng!
Damien Roche

1
Như Damien chỉ ra, vấn đề với cách tiếp cận này pkexeclà hoàn toàn giống với tình trạng khó khăn như sudo. Nó thường setuid và sống trong /usr/bin. Tôi đã thử nghiệm nó và điều này chỉ không hoạt động sau chmod -R 777 /usr/bin.
Oli

@DamienRoche, Oli: Tôi xin lỗi vì đã không sửa cách này sớm hơn! Bạn đều đúng cả. Tôi không chắc tại sao pkexecphải root setuid để hoạt động (không hoạt động thông qua daemon polkit như các tiến trình không setuid khác?), Nhưng nó cần điều đó. Tôi đã nhận xét về câu hỏi để xem liệu OP (người đã chấp nhận điều này) có thể làm sáng tỏ điều gì, nếu có gì, đúng hay hữu ích về câu trả lời này. Và tôi đã thêm một biểu ngữ tạm thời vào đầu bài đăng này để tôi không bị hiểu lầm thêm. Nếu câu trả lời này tiếp tục tồn tại, hình thức cải tiến của nó có thể sẽ kết hợp một số thông tin hiện có trong biểu ngữ đó.
Eliah Kagan

Bạn chỉ có thể sử dụng su, nằm dưới / bin
FliiFe

@FliiFe Khắc phục quyền (hoặc quyền sở hữu) của các tệp trong /usr/binyêu cầu quyền root, nhưng bạn không suthể root trên hầu hết các hệ thống Ubuntu vì đăng nhập gốc bị tắt theo mặc định. Không giống như sudopkexec, khi bạn sử dụng suđể lấy shell root hoặc chạy lệnh dưới quyền root, bạn phải cung cấp mật khẩu của root chứ không phải của riêng bạn. Nhưng root không có mật khẩu theo mặc định trong Ubuntu (có nghĩa là xác thực dựa trên mật khẩu cho root sẽ luôn bị lỗi, không phải việc nhập mật khẩu trống sẽ hoạt động). Xem RootSudo để biết chi tiết.
Eliah Kagan

4

Ngay cả khi chạy từ CD / Pendrive trực tiếp, bạn phải thêm tiền tố vào chmodlệnh của mình sudo. Vì vậy, các bước của bạn sẽ như sau:

  1. khởi động từ đĩa CD / Pendrive trực tiếp
  2. kiểm tra xem đĩa của bạn đã được tự động hóa (và ở đâu). Nếu không, gắn kết nó (xem bên dưới)
  3. sử dụng sudo chmod 0755 <path>để điều chỉnh các quyền

Làm thế nào để tìm ra nơi đĩa của bạn được gắn kết: từ một cửa sổ đầu cuối, chạy mount(không có đối số). Điều này sẽ liệt kê tất cả các thiết bị gắn kết. Kiểm tra typedanh sách - bạn có thể bỏ qua mọi thứ không sử dụng "hệ thống tệp thực" (đĩa của bạn có thể sử dụng ext3 hoặc ext4 - bạn có thể chắc chắn bỏ qua những thứ như Proc, sysfs và tương tự). Nếu một cái gì đó nghe có vẻ hứa hẹn (trông giống như /dev/sda1 on /media/sda1 type ext3), hãy kiểm tra nội dung của nó bằng cách sử dụng ls /media/sda1để xem nếu đó là.

Nếu nó không được gắn kết, bạn có thể kiểm tra các /devmục có thể chứa đĩa (sử dụng ls /dev/ |grep '/dev/sdđể kiểm tra các thiết bị khả dụng; đĩa của bạn sẽ trông như thế /dev/sdaX, /dev/sdbXhoặc tương tự - với X là một số). So sánh điều này với danh sách các thiết bị được gắn. Nếu nó không ở đó, hãy thử gắn nó và kiểm tra nội dung của nó (như được hiển thị ở trên). Để gắn thiết bị, trước tiên hãy tạo một điểm gắn kết, ví dụ: sudo mkdir /mnt/mydisksau đó thử gắn thiết bị bằng cách sử dụng mount /dev/sda1 /mnt/mydiskvà kiểm tra nội dung của thiết bị bằng cách sử dụng ls /mnt/mydisk.

Khi bạn nhận được đúng đĩa ở đó, bạn có thể thay đổi quyền trở lại trên thư mục usr của bạn : sudo chmod 0755 /mnt/mydisk/usr.

Bây giờ bạn vẫn có thể gặp rắc rối nếu ban đầu bạn chạy chmodlệnh đệ quy, sử dụng -Rtham số. Trong trường hợp đó, bạn có thể cố gắng sửa từng mục một cách thủ công - hoặc bạn có thể đi thẳng để cài đặt mới ...


Tôi đã cố gắng tạo điểm gắn kết, nhưng tôi gặp lỗi khi đọc điểm gắn kết mnt / mydisk không tồn tại là mydisk sẽ được thay thế bằng một số thứ và chỉ cho bản ghi tôi đã viết mount /dev/sda /mnt/mydisktừroot@Ubuntu:/dev#
vin

Bạn đã tạo a) tạo điểm gắn kết đó (thư mục) trước khi ban hành lệnh mount (như được mô tả) và b) có quan tâm đến dấu gạch chéo hàng đầu không? Hãy thử mkdir -p /mnt/mydisk && mount /dev/sda1 /mnt/mydisk(Tôi không nghĩ rằng bạn không có phân vùng trên /dev/sda, vì vậy bạn cũng đã bỏ lỡ số phân vùng. Hãy đảm bảo bạn chỉ định đúng thiết bị (hoặc gắn kết sẽ thất bại).
Izzy

1

Tôi nghĩ Mat là chính xác, bạn phải root để thêm bit vào / usr / bin, nhưng tất nhiên sudo bị hỏng. Nếu bạn có mật khẩu root, bạn có thể sử dụng nó để đăng nhập với quyền root và sau đó sửa các quyền bằng lệnh trên. Tuy nhiên, nếu bạn không, (và tôi cũng không), có lẽ tốt nhất là:

  • khởi động từ đĩa CD trực tiếp Linux
  • trở thành gốc ở đó
  • gắn kết phân vùng với hệ thống trên
  • sau đó làm thẳng các quyền trên hệ thống tập tin đó bằng thiết bị đầu cuối.

Root luôn là số người dùng 0, vì vậy root trên bất kỳ hệ thống nào cũng có thể thực hiện các thay đổi được phép root trên các hệ thống tệp khác.


1

Tôi không có nhiều kiến ​​thức. Nhưng các bước này đã giải quyết vấn đề của tôi ngay cả khi không khởi động lại máy. Thực hiện theo các bước sau:

su root
<enter root password>
cd /usr
chmod -R 755 *

1
Bạn đang thiếu ít nhất một lệnh "cd". Nếu bạn làm như thế này thì bạn đang thực hiện "chmod" trên thư mục gốc cho root. Điều đó sẽ làm cho mọi thứ tồi tệ hơn.
Rinzwind

thaks ... đã chỉnh sửa câu trả lời của tôi ... tôi đã ở trong thư mục / usr
Manu Mohan Thekkedath

2
Điều này chỉ hoạt động, nếu mật khẩu được đặt root, không phải là cấu hình mặc định của Ubuntu.
David Foerster

1

Trong một nỗ lực để thiết lập quyền cho các tập lệnh cục bộ của tôi, tôi đã phá vỡ quyền sudo và thay đổi quyền sở hữu, do nhầm lẫn. Tôi đã có thể thay đổi quyền sở hữu của sudo thành root bằng cách thực hiện như sau:

Bước 1: Chuyển sang chế độ phục hồi Ubuntu . Nếu bạn không biết về quy trình, bạn có thể tham khảo câu trả lời tại đây: https://askubfox.com/a/172346/223901

Bước 2: Khi ở chế độ recovery, chọn root - Drop to root shell prompt

Bước 3: Thực hiện các lệnh sau

mount -o remount,rw /
chown root:root /usr/bin/sudo
chmod 4755 /usr/bin/sudo
reboot

Đợi hệ thống của bạn khởi động bình thường và bạn sẽ thấy quyền sở hữu của sudo trở lại root.

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.