เหตุใดคำสั่ง sudo จึงใช้เวลานานในการดำเนินการ


83

ฉันได้รับลีนุกซ์ (Fedora 10, จากนั้น 11) ในช่วงไม่กี่เดือนที่ผ่านมา (และสนุกกับมันอย่างมหาศาล - มันเหมือนกับการค้นพบคอมพิวเตอร์อีกครั้ง, เรียนรู้มากมาย)

ฉันได้เพิ่มผู้ใช้ของฉันในบรรทัดสุดท้ายของไฟล์ / etc / sudoers ดังที่แสดงไว้ด้านล่างเพื่อที่ฉันจะไม่ถูกถามรหัสผ่านเมื่อฉันใช้คำสั่ง sudo:

MyUserName ALL = (ALL) NOPASSWD: ALL

ตอนนี้ทุกครั้งที่ฉันรันคำสั่งโดยใช้ sudo มันจะหยุดช่วงเวลาที่สังเกตได้ยากก่อนที่จะทำงานจริง (~ 10 วินาที) เหตุใดจึงเป็นเช่นนี้และฉันจะแก้ไขได้อย่างไร ฉันใช้ Sudo เวอร์ชั่น 1.7.1 บน Fedora 11 x86 64


เทคนิคนี้นับว่าเป็นการแก้ไขสคริปต์ใช่ไหม? ไม่ใช่สคริปต์ของโปรแกรมใช่ไหม

6
NOPASSWD: ถือเป็นความเสี่ยงด้านความปลอดภัยและกำจัดวัตถุประสงค์ในการใช้ sudo ตั้งแต่แรก

ฉันสามารถซื้อได้ แต่ปัญหายังคงอยู่เพราะเหตุใดจึงใช้เวลานาน

2
เครื่องนี้รับผู้ใช้และการพิสูจน์ตัวตนจากที่ไหน LDAP, อาจใช้กับ Kerberos หรือไม่?
wzzrd

คำตอบ:


123

ฉันถามคำถามนี้ไปทาง SO และมันก็ย้ายมาที่นี่ ที่กล่าวว่าฉันไม่มีความสามารถในการแก้ไขคำถามราวกับว่าฉันเป็นเจ้าของหรือยอมรับคำตอบที่ถูกต้อง แต่สิ่งนี้กลับกลายเป็นเหตุผลที่แท้จริงว่าทำไมและวิธีแก้ไข:

พบที่นี่ ผู้ใช้ "rohandhruva" ที่นั่นให้คำตอบที่ถูกต้อง:

สิ่งนี้จะเกิดขึ้นหากคุณเปลี่ยนชื่อโฮสต์ระหว่างกระบวนการติดตั้ง

เพื่อแก้ปัญหาให้แก้ไขไฟล์ / etc / hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 <ADD_YOURS_HERE> 
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 <ADD_YOURS_HERE>

3
ค่อนข้างถูกต้อง ค่อนข้างแปลกใจว่า distros เช่น Fedora จะไม่แก้ไข / etc / hosts หากคุณเปลี่ยนชื่อโฮสต์ของคุณในเวลาติดตั้ง แต่ไม่ว่าอะไรก็ตาม นั่นคือโอเพ่นซอร์สสำหรับคุณ!
dimo414

นี่เป็นการแก้ไขการใช้งาน sudo ช้าของฉันขอบคุณ! ฉันแก้ไข / etc / hostname และเพียงลืมที่จะแก้ไขไฟล์ / etc / hosts
Joe

2
การเพิ่มชื่อโฮสต์ของคุณในบรรทัด 127.0.0.1 หรือ :: 1 อาจทำให้ซอฟต์แวร์ที่เกี่ยวข้องกับเซิร์ฟเวอร์บางตัวไม่สามารถรวมกับชื่อโฮสต์ / IP / อินเตอร์เฟสที่ถูกต้อง ตัวอย่างหนึ่งดังกล่าวคือ Cloudera Manager, บริการ hadoop ได้รับชื่อโฮสต์ผิดและทำให้ CM สับสนเพราะพวกเขาทั้งหมดแก้ปัญหาให้กับ localhost ฉันขอแนะนำให้อ่านคำตอบอื่น ๆ ด้านล่างเพื่อดูคำตอบ สิ่งนี้อาจหรือไม่อาจทำให้เกิดปัญหากับเวิร์กสเตชันแบบสแตนด์อโลนซึ่งจะไม่มีคอมพิวเตอร์เครื่องอื่นที่เชื่อมต่ออยู่
ddcruver

1
นอกจากนี้ยังสามารถ /etc/nsswitch.conf (สำหรับเหตุผลที่คล้ายกัน) Mine ได้รับการตั้งค่าเป็น "hosts: dns files" และดังนั้นจึงค้นหาชื่อโฮสต์ของฉันบนเซิร์ฟเวอร์ DNS ด้วยระยะเวลาที่นาน ฉันเปลี่ยนเป็น "hosts: files dns" ดังนั้นตอนนี้มันจะดูใน / etc / hosts ก่อน ขอบคุณสำหรับคำตอบนี้ซึ่งทำให้ฉันดูใน nsswitch.conf!
Alan Porter

1
นั่นไร้สาระว่านี่คือทางออก เหตุใดsudoคำสั่งจึงต้องดูชื่อโฮสต์เพื่อให้ทำงานได้ ชื่อโฮสต์ของฉันเกี่ยวข้องกับsudo echo helloอะไร อย่างไรก็ตามขอขอบคุณสำหรับคำตอบ
smac89

24

ตรวจสอบว่า syslog daemon ของคุณทำงานอย่างถูกต้อง นี่ทำให้เกิดปัญหาสำหรับฉัน

เรียกใช้คำสั่งต่อไปนี้

logger 'Hello world'
  1. คำสั่งส่งคืนภายในระยะเวลาที่เหมาะสมหรือไม่?

  2. 'Hello world' ปรากฏขึ้น/var/log/syslogหรือไม่

หากไม่เป็นเช่นนั้น syslog daemon ขัดข้อง การเริ่มต้นใหม่ควรแก้ไขปัญหาของคุณ


9
น่าแปลกที่นั่นเป็นปัญหาสำหรับฉัน ใครจะมีความคิดมัน ทางออกสำหรับฉันคือเพียงรีสตาร์ท syslog service rsyslog restart
MikeKulls

กันที่นี่ service rsyslog restartแก้ไขคำสั่ง sudo ช้าของฉัน
Pedro Cordeiro

น่าแปลกที่นั่นเป็นปัญหาสำหรับฉัน ก่อนหน้านั้นคำขอทั้งหมดสำหรับเซิร์ฟเวอร์ช้ามาก ฉันแค่อยากรู้ว่าทำไม
ไมเคิลวัง

10

เป็นหนึ่งในไฟล์ / ไดเรกทอรีที่จำเป็นต้องอ่านบนเมานต์เครือข่ายหรือเป็นสาเหตุที่ทำให้การอ่านจากอุปกรณ์ usb ช้าหรือไม่? ลอง strace แล้วดูว่ามันช้าไหม ถ้ามันไปเร็วเกินไปให้ทำ

sudo strace -r -o trace.log sudo echo hi

แต่ละบรรทัดจะเริ่มต้นด้วยเวลาที่ดำเนินการนับตั้งแต่เข้าสู่ syscall ก่อนหน้า

(ดูเหมือนว่าจำเป็นต้องใช้ sudo เริ่มต้นฉันไม่รู้ว่าจะรบกวนผลลัพธ์มากแค่ไหน)


ขอบคุณ. นี่เป็น HDD tho ไม่มี USB หรือไดรฟ์เครือข่าย

@Cuga: และคุณเรียนรู้อะไรจาก strace?

@oligofren: คุณต้องทำ sudo strace
ysth

8

ฉันเพิ่งพบว่าฉันมีปัญหาเดียวกัน ไม่มีการหน่วงเวลา sudo จากนั้นในทันใดประมาณ 10-20 วินาที ฉันพิจารณาปัญหาเฉพาะโดยใช้:

 1. chmod u+s /usr/sbin/strace  (as the root user)

เป็นตัวเอง:

 1. sudo -K
 2. strace sudo /bin/tcsh

จากนั้นค้นหาตำแหน่งที่การเรียกระบบหยุดทำงาน

ในกรณีของฉันฉันพบว่ามันถูกแขวนอยู่กับการแปล DNS ดูเหมือนว่า DNSen หนึ่งในรายการของฉัน/etc/resolv.confเป็นเรื่องที่แย่มากหรือแย่มาก ดังนั้นฉันจึงเปลี่ยนลำดับการแก้ปัญหาและสิ่งที่ฉันทำอย่างรวดเร็ว


คำตอบที่ดีที่สุด (สำหรับฉัน)! พบว่า DBus Broker ของฉันขัดข้องในการยกเลิกการเชื่อมต่อเครือข่ายและ sudo / KDE ก็หมดเวลาในการเชื่อมต่อกับมัน ขอบคุณ!
PSSGCSim

ขอบคุณสิ่งนี้ช่วยฉัน ฉันต้องยกเลิกการเปลี่ยนแปลงก่อนหน้าในhostsบรรทัดใน /etc/nsswitch.conf ของฉันด้วย ฉันได้เพิ่ม "แก้ไข DNS" เป็นคำนำหน้าให้กับhostsค่า เมื่อฉันลบคำนำหน้านี้ sudo ก็เร็วอีกครั้ง
mnieber

5

ฉันไม่แน่ใจเกี่ยวกับ Fedora แต่ฉันใช้ระบบอื่นที่ sudo จะตรวจสอบว่าคุณเข้าสู่ระบบจากที่ใดถ้า DNS ของคุณไม่ได้ตั้งค่าอย่างดีอาจใช้เวลานาน สิ่งนี้สามารถเห็นได้เมื่อ SSH เข้าสู่เครื่อง - มันต้องใช้เวลานานกว่าจะได้รับพรอมต์


5

ฉันพบปัญหาเดียวกันฉันตรวจสอบ /var/log/auth.log และ syslog เพื่อหาข้อผิดพลาด ปรากฎว่าเซิร์ฟเวอร์ LDAP ของฉันไม่สามารถเข้าถึงได้และมันทำให้ทุกอย่างช้าลง

ฉันไม่ได้ใช้การรับรองความถูกต้องของ LDAP อีกต่อไปดังนั้นฉันจึงลบการอ้างอิง "ldap" ทั้งหมดออกจาก /etc/nsswitch.conf

ตั้งแต่นั้นทุกอย่างทำงานเหมือนมีเสน่ห์อีกครั้ง


ทำไมคุณโพสต์คำตอบที่ไม่เกี่ยวข้องอย่างชัดเจน (OP ไม่ได้ใช้ LDAP) กับคำถามห้าปี
สเวน

7
เพราะอาจช่วยใครก็ได้ ฉันตรวจสอบทุกสิ่งที่กล่าวถึงที่นี่ แต่ไม่มีอะไรช่วย อาจมีคนอื่นมุ่งเน้นไปที่การค้นหาทิศทางที่ถูกต้องด้วยคำตอบของฉันโดยตรวจสอบว่าเขามีปัญหาการเชื่อมต่อ LDAP ใด ๆ เป็นสาเหตุสำคัญของคำสั่ง sudo ที่ช้าและไม่ตอบสนองหรือไม่ มันมีความเกี่ยวข้องเท่ากับคำตอบที่เกี่ยวข้องกับ DNS โดยมีบางสิ่งที่อยู่เบื้องหลังฝาครอบเป็นข้อบกพร่องซึ่งผู้ใช้จะมองไม่เห็นโดยตรง ฉันถือว่าไซต์นี้เป็นแหล่งความรู้ทั่วไปไม่ใช่เพียงแค่คำถาม / คำตอบเดียวของเว็บไซต์ มันเกี่ยวกับการรวบรวมความรู้ที่เกี่ยวข้อง
Sakuraba

6
นอกจากนี้ยังมีใครในนรกสีน้ำเงินที่ให้คุณทำลายชื่อเสียงของฉัน ไซต์นี้ใช้งานได้เพราะการแบ่งปันความรู้เป็นการสร้างแรงจูงใจไม่ใช่เพราะผู้คนถูกลดระดับลง หากคุณไม่ชอบคุณก็มีสิทธิ์เพิกเฉยได้
Sakuraba

5

ในกรณีที่อาจพบว่าชื่อโฮสต์ (ที่ถูกกำหนดค่าใน/etc/sysconfig/ เครือข่าย) ไม่มีอยู่ใน/etc/hostsไฟล์; ดังนั้นเมื่อทำการเพิ่มในไฟล์ที่กล่าวถึงข้างต้นไฟล์จะเปิดขึ้นมาทันที


3

ฉันมีปัญหาที่คล้ายกันฉันแก้ไขได้โดยการวางทั้งชื่อโฮสต์ (เช่น mybox) และเอาท์พุทเต็มรูปแบบของคำสั่งชื่อโฮสต์ (mybox.mydomain.com) เคลียร์มันแล้ว ไปจาก 2 นาทีเพื่อเปิด / etc / hosts เพื่อเข้าถึงได้ทันที


3

กรณี SELinux

หากคำสั่ง sudo เดียวกันช้าใน daemonและรวดเร็วในบรรทัดคำสั่งเท่านั้นสาเหตุจากSELinuxอาจเกิดขึ้นได้ (SELinux = โมดูลเคอร์เนล Linux เพิ่มความปลอดภัย NSA เปิดใช้งานใน Fedora ตามค่าเริ่มต้น)

กรณีทั่วไปคือเซิร์ฟเวอร์ http และสคริปต์พิเศษสำหรับการจัดการเซิร์ฟเวอร์ จำกัด ในsudoers:

apache ALL=(root_or_user) NOPASSWD: /full/path/the_safe_command

มันเป็นเรื่องปกติในกรณีนี้ว่าไม่มีอะไรที่เกี่ยวกับ SELinux รายงานในบันทึกการตรวจสอบแต่สคริปต์ที่เป็นไปอย่างรวดเร็วถ้าเราปิดชั่วคราวโดยบังคับใช้ausearch -m avc -ts today setenforce 0(แล้วเปิดใช้งานกลับโดยsetenforce 1)

ข้อความที่เกี่ยวข้องเท่านั้นในบันทึกของระบบ (journalcrl) คือข้อความหลังจากล่าช้า 25 วินาที:

... sudo [... ] pam_systemd (sudo: session): ไม่สามารถสร้างเซสชัน: ไม่ได้รับคำตอบ สาเหตุที่เป็นไปได้รวมถึง: แอปพลิเคชันระยะไกลไม่ได้ส่งการตอบกลับนโยบายความปลอดภัยบัสข้อความบล็อกการตอบกลับการหมดเวลาตอบกลับหมดอายุหรือการเชื่อมต่อเครือข่ายขาด
... sudo [... ]: pam_unix (sudo: session): เซสชันเปิดให้ผู้ใช้รูทโดย (uid = 0)

เข้าสู่ระบบของทุก silented "Dont การตรวจสอบ" ข้อความ SElinux สามารถเปิดใช้งานโดยการและผู้พิการอีกครั้งโดยsemodule -DB (ฉันหวังว่าฉันจะเขียนโมดูลนโยบาย SELinux เร็ว ๆ นี้สำหรับกรณีนี้ที่นี่หรือวิธีการจากคำตอบนี้สามารถใช้ได้)semodule -B


ขอบคุณสำหรับข้อมูลชิ้นนี้ จากข้อมูลที่นี่ฉันก็สามารถค้นหาบทความที่เกี่ยวข้องที่ระบุถึงความเป็นไปได้ของfprintd(การตรวจสอบลายนิ้วมือ) ผู้กระทำผิด การลบfprintdและfprintd-pamแก้ไขปัญหาสำหรับฉัน
KevinO

@KevinO ยินดีที่จะช่วยคุณหาทางออก ฉันรู้ว่าปัญหาของฉันนั้นเฉพาะเจาะจงมากและการมีส่วนร่วมในคำถามของฉันควรเป็นเพียงวิธีการวินิจฉัยหรือแยกความสงสัยเกี่ยวกับ SELinux
hynekcer

ฉันให้ +1 อย่างแน่นอน! มันเป็นบัสข้อความที่นำไปสู่การแก้ปัญหา ฉันดูสองสามครั้งใน sudo ช้า แต่คุณก็คือเบาะแสที่ฉันต้องการ
KevinO

1

จากการดูsudoersไฟล์ตัวอย่างที่ฉันมีฉันเชื่อว่าควรจะมีช่องว่างหลังจากNOPASSWD:บิต


ฉันเพิ่มช่องว่าง แต่ก็ยังมีความล่าช้า ขอบคุณสำหรับคำแนะนำ

1

ตรวจสอบไฟล์ / etc / hosts ของคุณและตรวจสอบให้แน่ใจว่าคุณมีรายการสำหรับ 127.0.0.1

(ที่มา )


1

หลังจากแก้ไขปัญหาโฮสต์แล้วตรวจสอบให้แน่ใจว่าคุณได้ล้างแคช DNS ที่ไม่ดีหากคุณใช้แอปพลิเคชันแคช DNS เช่น nscd:

/etc/init.d/nscd force-reload

1

สำหรับฉันมันถูกติดตั้ง krb5-user / config / locales ฉันสังเกตสิ่งนี้โดยการตรวจสอบ /var/log/auth.log ใช้ apt-get remove เพื่อถอนการติดตั้งแพ็คเกจเหล่านั้น อย่าลบแพ็กเกจเหล่านั้นหากคุณอยู่บนคอมพิวเตอร์ที่ต้องการ kerberos (pam_krb5) อย่างชัดเจน


0

คุณใช้ LDAP เพื่อตรวจสอบสิทธิ์หรือไม่

ถ้าเป็นเช่นนั้นคุณอาจต้องการใช้นโยบายผูกมัดแบบอ่อน ใน /etc/ldap/ldap.conf (หรือ /etc/ldap.conf):

bind_policy soft

0

ดูเหมือนว่าคุณจะหมดเวลาในห่วงโซ่การตรวจสอบสิทธิ์ ตรวจสอบว่า sudo พยายามตรวจสอบสิทธิ์และดูปัญหาคอขวดได้อย่างไร


0

เคส Systemd

สำหรับฉันแล้วระบบของฉันมีหน่วยความจำไม่เพียงพอและกระบวนการจำนวนมากล้มเหลว ระบบของฉันมีพื้นฐานมาจาก systemd และมีบางอย่างในที่นั่นขัดข้อง มันยากสำหรับฉันที่จะจำทุกสิ่งที่ฉันทำ แต่:

  • systemctl status <any.service> จะหมดเวลา
  • ฉันไม่สามารถsudo reboot(ตาม systemd)

วิธีการแก้

การรีสตาร์ทแก้ไขปัญหาของฉัน แต่สำหรับฉันเป็นเพียง bandaid คุณยังต้องค้นหาสาเหตุที่หน่วยความจำของคุณหมด / ขัดข้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.