Làm thế nào để lấy lại sudo trên Ubuntu?


12

Tôi đã làm điều này:

sudo chown -R myname /usr/

và bây giờ tôi không thể sử dụng sudolệnh vì lỗi này:

sudo: phải là root setuid

Và khi tôi đọc điều này có nghĩa là chủ sở hữu của tệp /usr/bin/sudonày không phải là root. Bây giờ là người dùng của tôi vì chown trên /usrthư mục.

Trên nhiều diễn đàn và blog mọi người đề nghị làm điều này với quyền root:

# chown root:root /usr/bin/sudo
# chmod 4111 /usr/bin/sudo

... nhưng vấn đề với điều này là tôi cần đăng nhập bằng root, nhưng tôi không thể vì nếu tôi viết sutrong terminal thì mật khẩu bị sai (thực ra tôi sử dụng mật khẩu những gì tôi đã thêm vào người dùng của mình):

$ su
Password:
su: Authentication failure

Vì vậy, tôi có thể lấy lại sudolệnh?

Chỉnh sửa: Ubuntu của tôi nằm dưới Paralells trên Mac OS X.


Ý bạn là gì khi "Tôi sử dụng mật khẩu những gì tôi đã thêm cho người dùng của mình"? Khi bạn sử dụng su, bạn sẽ được nhắc nhập mật khẩu của root chứ không phải mật khẩu của người dùng như với sudo. Bạn có biết mật khẩu root cho máy này không?
Caleb

Không, tôi không bao giờ cần phải thêm hoặc sửa đổi nó, có mặc định cho nó không?
Adam

Bạn cần khởi động lại trong chế độ người dùng. Bạn đang chạy phân phối gì?
Gilles 'SO- ngừng trở nên xấu xa'

1
Chỉ tò mò, nhưng điều gì khiến bạn quyết định chạy một sudo chmod -R cirk:cirk /usrĐiều gì bạn đang cố gắng thực hiện?
loosecannon

1
Một chương trình được cài đặt ở đâu đó trong / usr / vì tôi không biết chính xác vị trí của chương trình, tôi quyết định sử dụng chown trên toàn bộ thư mục usr, và vì tôi là một người mới nên tôi lại làm hỏng mọi thứ: P
Adam

Câu trả lời:


5

Nếu bạn có một hệ thống tương tự mà bạn có thể sử dụng làm hướng dẫn để xem quyền sở hữu chính xác cho tất cả các tệp là gì, thì bạn có thể khởi động vào chế độ cứu hộ, thả vào vỏ gốc và khôi phục quyền sở hữu chính xác cho tất cả các tập tin trong /usr.

Cách nhanh nhất có thể là cài đặt lại hệ điều hành của bạn hoặc khôi phục từ bản sao lưu.

Trong Ubuntu hoặc tương tự, theo mặc định, không có mật khẩu gốc (tài khoản bị vô hiệu hóa), đó là lý do tại sao bạn không thể su.


8
Woah làm cho nó dễ dàng ở đây, đây không phải là cài đặt lại windows không phải luôn là cách dễ nhất hoặc nhanh nhất để làm bất cứ điều gì và chắc chắn không dạy mọi người cách khắc phục vấn đề. Trong trường hợp này, tất cả những gì anh ta cần làm là đảo ngược hành động anh ta đã thực hiện có thể dễ dàng thực hiện bằng cách gắn hệ thống tệp lên trong một môi trường khác như LiveCD hoặc chế độ cứu hộ mà bạn đề xuất (phụ thuộc vào distro).
Caleb

@Caleb khi bạn dọn rác hoàn toàn các quyền trên một đoạn chính của hệ thống tập tin. Anh ta đã không làm phiền sudo, có lẽ anh ta đã quên đề cập đến trong bài đăng của mình rằng anh ta đã sử dụng -R (nếu không, nó sẽ chỉ thay đổi chủ sở hữu của thư mục / usr chứ không phải sudo). Tôi cũng đã mô tả làm thế nào để đảo ngược quá trình, nhưng đó là một nhiệm vụ rất tốn thời gian và công sức.
psusi

1
Đây là một trường hợp chownkhông chmod. Vì tất cả mọi thứ trong /usrthư mục nên là root:root, đây sẽ là một sửa chữa dễ dàng, không phải là sửa chữa khó khăn mà một chmodclobber có nghĩa là.
Caleb

2
@Caleb không phải mọi thứ trong / usr nên là root: root.
psusi

6
@Caleb chownđặt lại các bit setxid. Có một vài tệp trong /usrđó không thuộc sở hữu của root; nhiều hơn trong một nhóm khác nhau (đặc biệt là các chương trình setgid trong /usr/bin).
Gilles 'SO- ngừng trở nên xấu xa'

11

Vì bạn đã thu thập các quyền trên điều duy nhất cho phép bạn truy cập cấp gốc, bạn sẽ cần một số trợ giúp từ NGOÀI TRỜI môi trường phần mềm hiện tại để khắc phục điều này.

Tôi đề nghị rằng cách dễ nhất là khởi động LiveCD cho bản phân phối của bạn, gắn ổ đĩa của bạn và thay đổi quyền của tệp bằng cách sử dụng chmod bạn liệt kê từ đó.

Bạn cũng có thể thử khởi động vào chế độ một người dùng để lấy shell gốc.

Xin lưu ý rằng thông thường tất cả mọi thứ trong /usr/thư mục nên được sở hữu rootđể bạn có thể thực hiện đệ quy chownđể sửa bất cứ thứ gì bạn đã phá vỡ. ( Chỉnh sửa: Nhận xét của mỗi @Gilles dường như đang chạy chownphá vỡ các bit setuid và setgid, vì vậy bạn sẽ cần phải tự so sánh với một hệ thống hiện có để khôi phục lại tất cả những lần bạn khắc phục quyền sở hữu một lần nữa.)

Tuy nhiên, rất FEW nên 4111. Cái thêm đó là một quyền đặc biệt nhưng nó làm cho nó thực thi như root ngay cả khi chạy như một người dùng! Chỉ sudovà một vài lệnh được chọn sẽ được thiết lập bit quyền này. Nếu bạn không chạy chmodđể bắt đầu với bạn thì có lẽ bạn không cần phải sửa lỗi này , tất cả các quyền đều đã chính xác. Đừng chạy một chmodhoạt động lớn mà không biết tất cả các quyền được cho là gì.


Có thể nếu hệ điều hành trong một máy ảo?
Adam

Vâng, điều đó không có gì khác biệt. Bạn có thể sử dụng runlevel 1 (điều bạn có thể làm ngay từ đầu quá trình khởi động từ grub / lilo hoặc wahtever bộ tải khởi động của bạn) hoặc bạn có thể thiết lập VM để sử dụng hình ảnh ISO của LiveCD làm thiết bị khởi động.
Caleb

aham, trước khi tôi cài đặt lại, tôi sẽ thử lời khuyên của bạn :)
Adam

ok Tôi nghĩ rằng tôi đang ở trong LiveCD, bây giờ tôi cần phải viết cái này trong terminal? sudo chown -R root /usr/?
Adam

Bạn bắt đầu với điều đó, nhưng không phải trên /usrLivdCD, bạn cần phải gắn nó ở đâu đó và chạy trên con đường đó, nói /mnt/mydrive/usr. Sau đó, bạn sẽ cần sửa bit setuid trên /mnt/mydrive/usr/bin/sudo. Sau đó xem qua / usr trên livecd và xem liệu có quyền sở hữu nào khác ngoài root không. find /usr -not -uid 0và thay đổi những cái đó cho phù hợp. Sau đó tìm kiếm những thứ có các bit setuid hoặc setgid khác nhau được thiết lập và đảm bảo những thứ đó cũng khớp. Nếu bạn có một hệ thống Ubunutu thực sự để so sánh với điều đó sẽ là tốt nhất.
Caleb

4

Trong chế độ khôi phục Ubuntu, hãy nhập các lệnh sau..Điều này đã sửa lỗi cho tôi ..

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

Hy vọng điều này sẽ khắc phục vấn đề của bạn. (Hoặc của người khác)

Tôi tìm thấy cái này ở đây bài viết trên blog .


2

Điều này dễ dàng hơn nhiều so với đề xuất bởi các câu trả lời khác. Không cần định dạng, khởi động lại hoặc sử dụng CD trực tiếp.

su root # then enter your password to switch to root user
chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudo
exit # to get back to the original user

Đây là cách dễ nhất để khắc phục vấn đề này. Giải thích, sudo bị hỏng (Tôi biết bị hỏng là thuật ngữ sai, nhưng nó không hoạt động, vì vậy, chúng ta cần tránh sử dụng sudo)

  • Sử dụng lệnh 1 (su root) , chúng tôi thay đổi người dùng thành root mà không sử dụng sudo.
  • Sử dụng lệnh 2 (root chown: root / usr / bin / sudo && chmod 4755 / usr / bin / sudo) , chúng tôi sửa các quyền / quyền sở hữu của sudo.
  • Sử dụng lệnh 3 (thoát) , chúng tôi quay lại người dùng ban đầu.

Tôi đã thử nghiệm phương pháp này trên Linux mint. Đó là một hệ thống giống như Ubuntu. Hãy cho tôi biết phương pháp này không hoạt động trên bất kỳ HĐH nào khác. Sẽ cập nhật câu trả lời cho phù hợp.

Cảm ơn


theo tôi hiểu, theo mặc định, tài khoản root không có mật khẩu, vì vậy không thể cung cấp mật khẩu ở bước đầu tiên su rootvà vì sudokhông hoạt động nên không thể đặt mật khẩu root
TitanFighter

1
Cảm ơn nó đã giúp tôi.
Arun

1

Điều này đơn giản hơn mọi người đang làm nó. Hãy thử như sau:

  1. Thay vì cố gắng đăng nhập bằng root bằng cách sử dụng su lệnh , hãy đăng xuất với tư cách là người dùng hiện tại của bạn và đăng nhập lại với quyền root thông qua Trình quản lý hiển thị thông thường (tức là màn hình đăng nhập).
  2. Thực hiện sau tại thiết bị đầu cuối: chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudo

Điều này sẽ sửa sudolệnh và giúp bạn khởi động lại ngay lập tức.


0

Để đăng nhập bằng root, không có su hoặc sudo, bạn có thể sử dụng pkexec:

pkexec su

Bây giờ thay đổi quyền của tệp:

chmod 440 /etc/sudoers
chmod 775 /etc/sudoers.d
chmod 440 /etc/sudoers.d/README
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.