ทดสอบว่าผู้ใช้มีสิทธิ์ sudo โดยไม่ต้องป้อนข้อมูลผู้ใช้หรือไม่


12

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

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

ขอบคุณ!

UPDATE: เพื่อสะท้อนความคิดเห็นของฉันฉันต้องการทดสอบว่าผู้ใช้สามารถ sudo ได้หรือไม่โดยไม่ต้องมีการโต้ตอบกับผู้ใช้สำหรับการทดสอบนั้น


คุณต้องตรวจสอบว่าผู้ใช้มีความเป็นไปได้ที่จะใช้ sudo หรือไม่ถ้าเขาเรียกใช้งานเชลล์สคริปต์ผ่าน sudo
Niko SP

เพียงแค่ว่าเขามีความเป็นไปได้ สคริปต์ท้องถิ่นจะต้องป้อนรหัสผ่าน sudo ในภายหลังดังนั้นฉันแค่ต้องการตรวจสอบ แต่เนิ่นๆว่าผู้ใช้บนโฮสต์ระยะไกลเป็นแม้แต่ sudoer
DanH

ตรวจสอบอย่างรวดเร็วในกล่องอูบุนตูของฉันให้ฉัน sudo -l มันกลับคำสั่งที่ผู้ใช้อาจทำงานถ้า (ทั้งหมด) ทั้งหมดเป็นส่วนหนึ่งของพวกเขาผู้ใช้สามารถใช้ sudo สำหรับคำสั่งใด ๆ อาจเป็นมุมฉากใช่มั้ย
Niko SP

1
sudo -lแจ้งรหัสผ่านให้ฉัน
ThatGraemeGuy

1
Sudo แคชใช้ tty ดังนั้นหากเซสชันใหม่ให้ tty เดียวกันกับคุณคุณอาจไม่ได้รับแจ้ง ลองดำเนินการsudo -kก่อน
Mark Wagner

คำตอบ:


13

ฉันกลัวว่าสิ่งเดียวที่คุณสามารถทดสอบคือผู้ใช้ที่มีสิทธิ์ sudo โดยไม่ต้องใช้รหัสผ่าน

ปฏิบัติ

sudo -n true

ถ้า $ เป็น 0 ผู้ใช้มีการเข้าถึง sudo โดยไม่มีรหัสผ่านถ้า $? คือ 1 ผู้ใช้ต้องการรหัสผ่าน

หากคุณต้องการการตรวจสอบสำหรับโปรแกรมเฉพาะให้เปลี่ยนtrueด้วยโปรแกรมของคุณในแบบที่โปรแกรมไม่ทำอะไรเช่นchmod --help


1
ทราบว่านี้ไม่ได้ช่วยให้การตรวจสอบเบื้องต้นถ้าคำสั่งXคือsudoสามารถโดยไม่ต้องป้อนรหัสผ่านและโดยไม่ตั้งใจทำงาน
ลองจับในที่สุด

3

หากคุณมีผู้ใช้หนึ่งรายที่มีสิทธิ์เข้าถึง sudo เช่น "root" คุณสามารถใช้เพื่อตรวจสอบการเข้าสู่ระบบอื่น ๆ ในฐานะผู้ใช้ที่เรียกใช้การเข้าถึง:

sudo -n -l -U foo 2> & 1 | egrep -c -i "ไม่อนุญาตให้เรียกใช้ sudo | ผู้ใช้ที่ไม่รู้จัก"

ถ้ามันคืนค่าศูนย์ "foo" มีสิทธิ์เข้าถึง มิฉะนั้นจะไม่มีสิทธิ์เข้าถึง sudo


3
เพียงแค่sudo -n -l cmdคุณจะได้รับแจ้งว่าผู้ใช้ปัจจุบันมีสิทธิ์เข้าถึง sudo ไปยัง cmd หรือไม่ หากคุณต้องการทดสอบผลลัพธ์
Philippe A.

1

sudo -l

นั่นควรให้พอที่จะตัดสินใจว่าคุณมี privs ที่คุณต้องการ / ต้องการ


1
ยังคงถามรหัสผ่านในระบบของฉัน (Ubuntu 16.04)
Mario Vilas

1

ฉันรู้ว่านี่เป็นคำถามเก่าสุด แต่ผมพบกับโชค-n(ที่ไม่ใช่แบบโต้ตอบ) ธงและ/-v -lแต่คุณต้องตรวจสอบผลลัพธ์:

$ sudo -vn && sudo -ln  #User with cached credentials
User adminuser may run the following commands on computername:
    (ALL) ALL
$ sudo -vn && sudo -ln  #User who _can_ sudo but isn't cached
sudo: a password is required
$ sudo -vn && sudo -ln  #User who can't at all
Sorry, user nonadmin may not run sudo on computername.

การเปลี่ยนเส้นทางขาออกและ grepping จะทำให้คุณไปถึงที่นั่นอาจเป็น:

if (sudo -vn && sudo -ln) 2>&1 | grep -v 'may not' > /dev/null; then
  #they're cool
  exit 0 #Or, whatever
fi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.