sudo không thể mở / etc / sudoers


15

sudokhông hoạt động. Tôi đã cài đặt Arch Linux trên khóa USB được định dạng bằng BTRFS. Đây là đầu ra khi tôi chạy 'sudo':

$ sudo
sudo: unable to stat /etc/sudoers: Permission denied
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin

$ ls -l /etc/sudoers
-r--r----- 1 root root 2849 May 18 15:00 /etc/sudoers

$ lsattr /etc/sudoers
--------------- /etc/sudoers

$ ls -ld /etc
drwxr-xr-x 1 root root 2476 May 25 13:45 /etc

$ ls -ld /
drwx------ 1 root root 142 May 25 06:51 /

$ ls -l $(which sudo)
---s--x--x 2 root root 123995 May 25 13:10 /usr/bin/sudo

$ strace -u ross sudo true 2>&1 | egrep '(sudo|set.*[ug].*id)'
execve("/usr/bin/sudo", ["sudo", "true"], [/* 30 vars */]) = 0
read(3, "31799 (sudo) R 31796 31796 31754"..., 1024) = 223
lstat64("/etc/sudo.conf", 0xbfcddeb0)   = -1 ENOENT (No such file or directory)
stat64("/usr/lib/sudoers.so", {st_mode=S_IFREG|0755, st_size=235092, ...}) = 0
open("/usr/lib/sudoers.so", O_RDONLY|O_CLOEXEC) = 3
stat64("/usr/lib/sudoers.so", {st_mode=S_IFREG|0755, st_size=235092, ...}) = 0
setresuid32(0, -1, -1)                  = 0
setresgid32(-1, 0, -1)                  = 0
setresuid32(-1, 1, -1)                  = 0
lstat64("/etc/sudoers", 0xbfcddd60)     = -1 EACCES (Permission denied)
setresuid32(-1, 0, -1)                  = 0
write(2, "sudo", 4sudo)                     = 4
write(2, "unable to stat /etc/sudoers", 27unable to stat /etc/sudoers) = 27
setresuid32(-1, 1, -1)                  = 0
setresgid32(-1, -1, -1)                 = 0
setresuid32(-1, 0, -1)                  = 0
setresuid32(-1, 0, -1)                  = 0
setresgid32(-1, 1000, -1)               = 0
write(2, "sudo", 4sudo)                     = 4
write(2, "no valid sudoers sources found, "..., 40no valid sudoers sources found, quitting) = 40
write(2, "sudo", 4sudo)                     = 4


$ ltrace -u ross sudo true 2>&1 | egrep '(sudo|stat|set.*[ug].*id)'
bindtextdomain("sudo", "/usr/share/locale")      = "/usr/share/locale"
textdomain("sudo")                               = "sudo"
fopen("/proc/31813/stat", "r")                   = 0x9e51d40
__xstat(3, "/dev/console", 0xbffd6074)           = 0
__xstat(3, "/dev/wscons", 0xbffd6074)            = -1
__xstat(3, "/dev/pts/4", 0xbffd6074)             = 0
__lxstat64(3, "/etc/sudo.conf", 0xbffd9040)      = -1
strlen("sudo")                                   = 4
memcpy(0x09e51e71, "sudo", 4)                    = 0x09e51e71
__xstat64(3, "/usr/lib/sudoers.so", 0xbffd810c)  = 0
dlopen("/usr/lib/sudoers.so", 257 <unfinished ...>
dlsym(0x09e51ef8, "sudoers_policy")              = 0xb75af520
__xstat64(3, "/usr/lib/sudoers.so", 0xbffd810c)  = 0
dlopen("/usr/lib/sudoers.so", 257)               = 0x09e51ef8
dlsym(0x09e51ef8, "sudoers_io")                  = 0xb75af560
fputs("sudo", 0xb7760920sudo)                        = 1
fputs("unable to stat /etc/sudoers", 0xb7760920unable to stat /etc/sudoers) = 1
fputs("sudo", 0xb7760920sudo)                        = 1
fputs("no valid sudoers sources found, "..., 0xb7760920no valid sudoers sources found, quitting) = 1
fputs("sudo", 0xb7760920sudo)                        = 1
+++ exited (status 1) +++

Thế còn ls -ld /etc?
Ansgar Esztermann

Đã thêm vào chỉnh sửa mới nhất.
chipuba

3
Hiển thị đầu ra của ls -l $(which sudo), đó là nguồn gốc của vấn đề
daisy

Bạn đã xác minh cú pháp sudoers không có vấn đề?
Tim

Đã thêm cả hai trong các chỉnh sửa, không có lỗi cú pháp ...
chipuba

Câu trả lời:


19

Ok, bạn dường như không có quyền truy cập cho / (không thể cd),

Bạn có thể thử chmod 755 /


@UlrichDeach thực sự? Tôi đã thử một chương trình đơn giản, với những cuộc gọi đó, ngay cả khi chương trình đó là suid-ed, chức năng vẫn sẽ trả về -1. (Tôi đã làm chown root ./suid_testchmod 4755 ./suid_test), mã nguồn: pastebin.mozilla.org/1650215
daisy

'./suid_test': 0 setresuid: 0 0
chipuba

Không khắc phục được sự cố
chipuba

"strace -uuli -f ./suid_test | & grep uid" không tạo ra gì cả.
chipuba

"strace -f ./suid_test | & grep uid" tạo ra: execve ("./ suid_test", ["./suid_test"], [/ * 22 vars * /]) = 0 geteuid32 () = 0 setresuid32 (0, -1, -1) = 0 geteuid32 () = 0 write (1, "0 \ nsetresuid: 0 \ n0 \ n", 170 setresuid: 0
chipuba

1

Việc thực thi cần phải được thiết lập và sở hữu bởi root:

$ ls -la /usr/bin/sudo
---s--x--x 2 root root 173154 Oct 19  2010 /usr/bin/sudo

Nhị phân của bạn đang thiếu một trong những đặc điểm đó. Làm điều này (như root):

# chown root /usr/bin/sudo
# chmod u+xs /usr/bin/sudo

Tôi có thể sai nhưng tôi không nghĩ rằng bit suid bị thiếu là giá trị trả về setresuid32(0, -1, -1)setresgid32(-1, 0, -1)là cả thời gian 0 cho thấy chương trình có quyền chính xác
Ulrich Dangel

Ulrich Dangel nói đúng, thật đáng buồn. Điều đó không có gì khác biệt (và tôi đã thử điều đó).
chipuba

0

Làm thế nào mà bạn cài đặt nó? bạn phải gắn kết phân vùng trên thanh USB làm root để cài đặt. Tôi không biết tại sao nhưng nó chỉ làm việc cho tôi theo cách này. Sau đó, bạn có thể gắn kết phân vùng với tư cách là người dùng và cập nhật nó qua rsync và không có vấn đề gì xuất hiện (nhưng tôi đã không thử nghiệm rộng rãi điều này).

Có lẽ có một cái gì đó bị hỏng trong hệ thống gắn kết người dùng.


-2

Thực hiện theo các bước sau:

~# chmod 440 /etc/sudoers
~# chmod -R 755 /root
~# chmod -R 755 /etc
~# chmod 755 /etc/phpmyadmin/config.inc.php

-1: Đây là lời khuyên rất tồi. Bạn không nên mù quáng đập vỡ các quyền trên mọi thứ trong /root/etc. Có một lý do các tập tin này được cài đặt với các quyền khác nhau. Lời khuyên để thiết lập một cách mù quáng các quyền thực thi trên tất cả các tệp này là không có thật; vài tập tin trong những cây này yêu cầu nó Và lời khuyên để cung cấp các quyền đọc & thực hiện trên toàn thế giới cho mọi thứ trong /root/etccực kỳ tệ; bạn cũng có thể gửi email mật khẩu gốc cho mọi người dùng có thể đăng nhập vào hệ thống đó trong khi bạn sử dụng nó, bởi vì bạn đã cung cấp cho họ toàn bộ hoạt động của hộp bằng cách thực hiện điều đó.
Warren Young
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.