sudo ไม่สามารถเปิด / etc / sudoers ได้


15

sudoไม่ทำงาน, ไม่เป็นผล. ฉันติดตั้ง Arch Linux บนคีย์ USB ที่จัดรูปแบบด้วย BTRFS แล้ว นี่คือผลลัพธ์เมื่อฉันเรียกใช้ '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) +++

เกี่ยวกับls -ld /etcอะไร
Ansgar Esztermann

เพิ่มในการแก้ไขล่าสุด
chipuba

3
แสดงผลลัพธ์ls -l $(which sudo)ว่าเป็นสาเหตุของปัญหา
เดซี่

คุณได้ตรวจสอบว่า sudoers syntax ไม่มีปัญหาหรือไม่?
ทิม

เพิ่มทั้งในการแก้ไขไม่มีข้อผิดพลาดทางไวยากรณ์ ...
chipuba

คำตอบ:


19

ตกลงคุณดูเหมือนจะไม่สามารถเข้าถึง / (ไม่สามารถ cd)

คุณลองได้ไหม chmod 755 /


@UlrichDangel จริงเหรอ? ฉันลองโปรแกรมอย่างง่ายด้วยการเรียกเหล่านั้นแม้ว่าโปรแกรมจะเป็น suid-ed ฟังก์ชั่นจะยังคงกลับ -1 (ฉันทำchown root ./suid_testแล้วchmod 4755 ./suid_test) ซอร์สโค้ด: pastebin.mozilla.org/1650215
เดซี่

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

ไม่สามารถแก้ไขปัญหาได้
chipuba

"strace -uuli -f ./suid_test | & grep uid" ไม่ก่อให้เกิดอะไร
chipuba

"strace -f ./suid_test | & grep uid" สร้าง: execve ("./ suid_test", ["./suid_test"], [/ * 22 vars * /]) = 0 geteuid32 () = 0 setresuid32 (0, -1, -1) = 0 geteuid32 () = 0 เขียน (1, "0 \ nsetresuid: 0 \ n0 \ n", 170 setresuid: 0
chipuba

1

ความสามารถในการเรียกทำงานจำเป็นต้องมี setuid และเป็นของ root:

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

ไบนารีของคุณไม่มีหนึ่งในคุณลักษณะเหล่านั้น ทำเช่นนี้ (เป็น root):

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

ฉันอาจจะผิด แต่ฉันไม่คิดว่า suid bit จะหายไปเนื่องจากค่าส่งคืนสำหรับsetresuid32(0, -1, -1)และsetresgid32(-1, 0, -1)เป็นทั้งเวลา 0 ซึ่งบ่งชี้ว่าโปรแกรมมีสิทธิ์ที่ถูกต้อง
Ulrich Dangel

Ulrich Dangel ถูกต้องเศร้า นั่นไม่ได้ทำให้แตกต่าง (และฉันได้ลองไปแล้ว)
chipuba

0

คุณติดตั้งมันได้อย่างไร? คุณต้องติดตั้งพาร์ติชันบน usb-stick เพื่อทำการติดตั้ง ฉันไม่รู้ว่าทำไม แต่ใช้งานได้สำหรับฉันด้วยวิธีนี้เท่านั้น หลังจากนั้นคุณสามารถติดตั้งพาร์ติชันเป็นผู้ใช้และอัปเดตผ่าน rsync และไม่มีปัญหาควรปรากฏขึ้น (แต่ฉันยังไม่ได้ทดสอบสิ่งนี้อย่างกว้างขวาง)

อาจมีบางอย่างที่หักในระบบเชื่อมต่อผู้ใช้


-2

ทำตามขั้นตอนเหล่านี้:

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

-1: นี่เป็นคำแนะนำที่แย่มาก คุณไม่ควรสุ่มสี่สุ่มห้าชนสิทธิ์บนทุกอย่างในและ/root /etcมีเหตุผลที่ไฟล์เหล่านี้จะได้รับการติดตั้งพร้อมสิทธิ์ที่แตกต่างกันไป คำแนะนำในการตั้งค่าการอนุญาตให้ใช้งานสำหรับไฟล์เหล่านี้ทั้งหมดเป็นการหลอกลวง ไฟล์บางไฟล์ในทรีเหล่านี้ต้องการมัน และคำแนะนำที่จะให้โลกการอ่านและสิทธิ์ -execute จะทุกอย่างใน/rootและ/etcไม่ดีโดด; คุณอาจส่งอีเมลรหัสผ่านรูทไปยังผู้ใช้ทุกคนที่สามารถเข้าสู่ระบบนั้นได้ในขณะที่คุณกำลังใช้งานเพราะคุณได้ให้สิทธิ์แก่พวกเขาแล้วโดยการทำเช่นนั้น
Warren Young
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.