ฉันจะแสดงรายการผู้ใช้ทั้งหมดด้วยรูทได้อย่างไร


35

บนกล่องลินุกซ์ฉันจะแสดงรายการผู้ใช้ทั้งหมดที่มีระดับรากที่ดีกว่าได้อย่างไร


1
คุณจะเจาะจงเจาะจงมากขึ้นกับความหมายของ "สิทธิพิเศษระดับราก" ได้หรือไม่? คุณหมายถึงผู้ใช้ที่มี UID = 0
Chris S

ผู้ใช้ที่มีความสามารถในการทำอะไร โดยทั่วไป - ฉันต้องการแสดงรายการผู้ใช้พร้อมกับกลุ่มที่พวกเขาเป็นสมาชิกหากเป็นไปได้
Eric

2
หากฉันรู้ว่าคอมพิวเตอร์ของคุณอยู่ที่ไหนฉันสามารถเดินขึ้นและดึงสายไฟ นั่นจะถือว่าเป็น "ทำอะไร" ซึ่งหมายความว่าฉันอยู่ในรายการของคุณ Rafiqได้จัดทำสามสิ่งที่พบบ่อยที่สุด แต่อาจมีมากกว่านี้และเรารู้ว่าระบบของคุณหรือการตั้งค่า
Chris S

คำตอบ:


42

อย่าลืมเปลี่ยนรหัสผ่านรูท หากผู้ใช้รายใดมี UID 0 ที่นอกเหนือจากรูทพวกเขาไม่ควรทำ ความคิดที่ไม่ดี เพื่อตรวจสอบ:

grep 'x:0:' /etc/passwd

อีกครั้งคุณไม่ควรทำเช่นนี้ แต่เพื่อตรวจสอบว่าผู้ใช้เป็นสมาชิกของกลุ่มรากหรือไม่:

grep root /etc/group

หากต้องการดูว่าใครสามารถใช้คำสั่งเป็นรูทได้ให้ตรวจสอบ sudoers:

cat /etc/sudoers

วิธีตรวจสอบ SUID bit ซึ่งอนุญาตให้โปรแกรมดำเนินการด้วยสิทธิ์พิเศษ:

find / -perm -04000


อย่างเคร่งครัดไฟล์แรกนั้นใช้ได้เฉพาะในกรณีที่ไฟล์รหัสผ่านเงาอยู่ในผู้ใช้ ฉันยอมรับว่าเกือบทุกวันนี้ แต่ในกรณีที่ฉันทำงาน perl อย่างรวดเร็วที่ตรวจสอบฟิลด์ 3 อย่างชัดเจน
MadHatter สนับสนุน Monica

4
นี่เป็นรูปแบบที่ดีกว่าแบบแรก: grep '[^:]*:[^:]*:0:' /etc/passwd. +1 โดยเฉพาะอย่างยิ่งสำหรับการตรวจสอบสำหรับ SUID
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

33

เพื่อดูว่าใครเป็นโพสต์ 0:

getent passwd 0

เพื่อดูว่าใครอยู่ในกลุ่มroot, wheel admและadmin:

getent group root wheel adm admin

ในการแสดงรายการผู้ใช้ทั้งหมดและกลุ่มที่เป็นสมาชิกของ:

getent passwd | cut -d : -f 1 | xargs groups

9
ต่างจากคำตอบอื่น ๆ ทั้งหมดที่ใช้ไฟล์ / etc / passwd อย่างผิด ๆ คำตอบนี้ใช้getent passwdแทนถูกต้องจริง อย่าลืมตรวจสอบ / etc / sudoers
mivk

ขอบคุณสำหรับสิ่งนี้. ชัดเจนมากขึ้น สำหรับฉันนี่คือคำตอบที่ได้รับการยอมรับ
Fiddy Bux

6

Pure root คือ ID ผู้ใช้ "0"

ผู้ใช้ทั้งหมดในระบบอยู่ในไฟล์ / etc / passwd:

less /etc/passwd

ผู้ที่เป็นรูทจะมี "0" เป็น ID ผู้ใช้ซึ่งเป็นคอลัมน์ที่ 3 ผู้ที่มี "0" เป็นกลุ่ม (คอลัมน์ที่ 4) อาจมีสิทธิ์พิเศษบางอย่างเช่นกัน

ถัดไปคุณจะต้องดูกลุ่มและดูว่าใครเป็นสมาชิกเพิ่มเติมของกลุ่ม "root" หรือ "wheel" หรือ "admin":

less /etc/group

ผู้ใช้ที่แสดงรายการในกลุ่มเหล่านั้นอาจมีสิทธิ์ใช้งานรูทบางอย่างโดยเฉพาะอย่างยิ่งผ่านคำสั่ง "sudo"

สิ่งสุดท้ายที่คุณต้องการตรวจสอบคือ "sudo" config และดูว่าใครอยู่ในรายการว่ามีสิทธิ์ในการเรียกใช้คำสั่งนี้ ไฟล์นี้มีการบันทึกไว้อย่างดีดังนั้นฉันจะไม่ทำซ้ำที่นี่:

less /etc/sudoers

ซึ่งครอบคลุมพื้นที่หลักของผู้ที่สามารถเข้าถึงรูทได้


ดูเพิ่มเติมที่serverfault.com/questions/205598/…สำหรับสถานที่เพิ่มเติมอีกสองสามแห่งที่จะได้รับสิทธิ์การเลื่อนระดับสิทธิ์ (คือconsolehelperและPackageKit.)
mattdm

2
ผู้ใช้ทุกคนไม่รับประกันว่าจะอยู่ใน / etc / passwd พวกเขาอาจอยู่ใน LDAP ตัวอย่างเช่น แต่getent passwdควรแสดงรายการผู้ใช้ระบบทั้งหมด (รวมถึงรูท) ในรูปแบบ passwd โดยไม่คำนึงถึงฐานข้อมูลที่กำหนดไว้
mivk

3

เพื่อพิมพ์ผู้ใช้ทั้งหมด

perl -n -e '@user = split /:/ ; print "@user[0]\n";' < /etc/passwd

หากต้องการพิมพ์เฉพาะผู้ใช้ที่มีโพสต์ UID ตามที่คนอื่นพูดผู้ใช้ที่มีสิทธิ์ใช้งานรูทแบบปริยาย:

perl -n -e '@user = split /:/ ; print "@user[0]\n" if @user[2] == "0";' < /etc/passwd

เป็นซับที่ดี แต่ระวังข้อ จำกัด (ฉันแน่ใจว่า MadHatter รู้เรื่องนี้อยู่แล้ว) - มันจะไม่ตรวจสอบกลุ่มและจะไม่ตรวจสอบ sudoers มันจะตรวจสอบเท่านั้นในขณะที่เขาพูดว่ารากโดยปริยาย
Rafiq Maniar

2
อย่าแยก / etc / passwd ผู้ใช้อาจถูกกำหนดที่อื่น ใช้getent passwdแทน สำหรับตัวอย่าง "พิมพ์ผู้ใช้ทั้งหมด" เป็นครั้งแรกให้ลองทำสิ่งนี้:getent passwd | perl -naF: -e 'print "$F[0]\n"'
mivk

2

สำหรับรายการย่อของผู้ใช้ทั้งหมดลองกดปุ่มแท็บสองครั้ง (เพื่อเติมให้อัตโนมัติ) หลังจากพิมพ์passwdคำสั่งแล้วเว้นวรรค ใช้งานได้กับsuคำสั่งเช่นกัน

ต้องทำในฐานะผู้ใช้ที่มีสิทธิ์ใช้งานรูท


นี่เป็นคุณสมบัติเฉพาะของ zsh หรือไม่? Bash แนะนำไฟล์ต่าง ๆ ใน openSUSE
jgillich

ทดสอบกับ Debian (Squeeze) เป็น bash ฉันไม่เชื่อว่าใครจะสนับสนุนเรื่องนี้อย่างเป็นทางการ แต่เป็นทางลัด
Emeraldo

อัปเดต:ไม่สามารถใช้งานได้ใน El Capitan อาจถูกแก้ไขด้วยเหตุผลด้านความปลอดภัย
Emeraldo

0

มันน่ารำคาญสำหรับฉันที่ไม่มีคำตอบแบบใช้สายเดียว ... หากคุณต้องการแสดงรายการบัญชี UID 0 (root) ทั้งหมดให้ใช้รายการต่อไปนี้:

cat /etc/passwd | cut -f1,3,4 -d":" | grep"0:0" | cut -f1 -d":" | awk '{print $1}'

ที่ดีที่สุด

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