วิธีแสดงรายการผู้ใช้ทั้งหมดในกลุ่มบน Linux

เผยแพร่แล้ว: 2022-08-29
แล็ปท็อป Linux แสดง bash prompt
fatmawati achmad zaenuri/Shutterstock.com

บน Linux ไฟล์มีสิทธิ์สามชุด หนึ่งชุดสำหรับกลุ่มของไฟล์ ก่อนที่คุณจะจัดสรรไฟล์ให้กับกลุ่ม คุณอาจต้องการตรวจสอบว่าใครเป็นสมาชิกกลุ่ม

สิทธิ์ของไฟล์และไดเรกทอรี

ไฟล์และไดเร็กทอรีบน Linux มีชุดสิทธิ์สำหรับเจ้าของ ชุดอื่นสำหรับกลุ่มที่ไฟล์ได้รับการจัดสรร และสิทธิ์สำหรับทุกคนที่ไม่ได้อยู่ในหนึ่งในสองหมวดหมู่ก่อนหน้านี้

สิทธิ์แต่ละชุดกำหนดว่าสมาชิกของหมวดหมู่นั้นสามารถอ่าน เขียน หรือดำเนินการไฟล์ได้หรือไม่ ในกรณีของไดเร็กทอรี การดำเนินการดำเนินการเท่ากับความสามารถในการ cd ลงในไดเร็กทอรี

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

ตัวอย่างเช่น คุณอาจมีทีมนักพัฒนา ทีมเอกสาร ทีมวิจัย และอื่นๆ คุณสามารถเพิ่มสมาชิกของแต่ละทีมในกลุ่มที่มีชื่อเหมาะสม เพื่อช่วยในการทำงานร่วมกัน ผู้ใช้สามารถอยู่ในหลายกลุ่มพร้อมกัน

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

ที่เกี่ยวข้อง: วิธีใช้คำสั่ง chgrp บน Linux

ไฟล์ /etc/groups

ไฟล์ “/etc/group” ประกอบด้วยรายการกลุ่มและสมาชิกกลุ่มที่คั่นด้วยเครื่องหมายทวิภาค “ : ” แต่ละบรรทัดมีสี่ฟิลด์

  • Name : ชื่อเฉพาะของกลุ่ม
  • รหัสผ่าน : ไม่ได้ใช้ สิ่งนี้จะถือ "x" เสมอ
  • รหัสกลุ่ม : ตัวระบุกลุ่มเฉพาะ
  • ผู้ใช้ : รายชื่อสมาชิกของกลุ่มที่คั่นด้วยเครื่องหมายจุลภาค รายการมักจะว่างเปล่าสำหรับบัญชีระบบและภูต

ในการดัมพ์เนื้อหาของไฟล์ไปที่หน้าต่างเทอร์มินัล คุณสามารถใช้ cat ได้ แต่จะสะดวกกว่าที่จะเลื่อนดูเนื้อหาของไฟล์โดยใช้ less .

 น้อยกว่า /etc/group 

การใช้ cat เพื่อดูเนื้อหาของไฟล์ /etc/group

รายการส่วนใหญ่ที่ด้านบนสุดของรายการไม่มีสมาชิกแม้ว่ากลุ่ม "adm" จะมีสองกลุ่มและกลุ่ม "cdrom" จะมีหนึ่งกลุ่ม

ส่วนแรกของไฟล์ /etc/groups ในตัวแสดงไฟล์ที่น้อยกว่า

หากเราต้องการค้นหากลุ่มที่มีผู้ใช้รายใดรายหนึ่งอยู่ เราสามารถใช้ grep เพื่อค้นหารายการด้วยชื่อบัญชีผู้ใช้ของพวกเขา นี่ไม่ใช่งานของเราในมือ เราต้องการเห็นทุกคนที่เป็นสมาชิกของกลุ่ม ไม่ใช่กลุ่มที่มีเพียงคนเดียว แต่ก็เป็นอุทาหรณ์ให้เราได้ดู

 grep "เดฟ" /etc/group 

รายชื่อกลุ่มที่ผู้ใช้เดฟเป็นสมาชิกของ

รายการที่มีสตริง “dave” แสดงรายการสำหรับเรา และซ่อนตัวอยู่ท่ามกลางพวกเขาเป็นสัญญาณว่าสิ่งต่าง ๆ อาจไม่ง่ายอย่างที่เราคิด

เมื่อมีการเพิ่มผู้ใช้ใน Linux การดำเนินการเริ่มต้นคือการจัดกลุ่มที่มีชื่อเดียวกับบัญชีผู้ใช้ นี่คือกลุ่ม หลัก ของพวกเขา กลุ่มอื่นๆ ที่เพิ่มเข้าไปจะเรียกว่ากลุ่ม รอง

ปัญหาคือผู้ใช้ไม่ได้เป็นสมาชิกของ กลุ่มหลัก นั่นเป็นสาเหตุที่กลุ่ม “เดฟ” ไม่แสดงสมาชิกใดๆ แม้ว่าผู้ใช้ “เดฟ” จะเป็นสมาชิกของกลุ่มนั้นก็ตาม

แน่นอน ผู้ดูแลระบบสามารถเปลี่ยนกลุ่มหลักของผู้ใช้ใดๆ เป็นกลุ่มอื่นได้ นั่นหมายความว่าผู้ใช้สามารถเป็นสมาชิกของกลุ่มใดก็ได้ แต่จะไม่อยู่ในรายการดังกล่าวในไฟล์ "/ etc / group" นั่นเป็นประเด็นหนึ่ง

ปัญหาที่สองคือไฟล์ “/etc/group” ไม่ใช่แหล่งความจริงเพียงแหล่งเดียว การติดตั้ง Linux สมัยใหม่อาจเก็บข้อมูลผู้ใช้และกลุ่มไว้ในที่ต่างๆ มากกว่า "/etc/passwd" และ "/etc/group" โดยเฉพาะอย่างยิ่งในสถานการณ์ขององค์กรที่มีการปรับใช้บริการต่างๆ เช่น Lightweight Directory Access Protocol มองแค่ที่เดียวอาจไม่เห็นภาพรวม

ในสถานการณ์ทดสอบของเรา เราสร้างกลุ่มสี่กลุ่มสำหรับแผนกพัฒนา พวกเขาคือ:

  • รีสตีม : ทีมวิจัย.
  • devteam : ทีมพัฒนา
  • pvqteam : ทีมงานตรวจสอบสินค้าและคุณภาพ
  • docteam : ทีมเอกสาร

เราเพิ่มคนในทีมเหล่านี้ บางคนอยู่ในมากกว่าหนึ่งทีม หากเราเปิดไฟล์ “/etc/group” ให้ less และเลื่อนไปที่ด้านล่างของไฟล์ เราจะเห็นกลุ่มและสมาชิกกลุ่มใหม่ อย่างน้อย สมาชิกจำนวนมากเท่าที่ไฟล์ “/ etc / group” รู้

ด้านล่างของไฟล์ /etc/group ในตัวแสดงไฟล์ที่เล็กกว่า

หากเราต้องการแยกกลุ่มเดียว เราสามารถค้นหาโดยใช้ grep คาเร็ต “ ^ ” แทนจุดเริ่มต้นของบรรทัด

 grep "^devteam" /etc/group 

ใช้ grep เพื่อแยกสมาชิกสำหรับกลุ่มเดียว

ซึ่งจะแยกรายการ "devteam" ออกจากไฟล์และแสดงรายการสมาชิกกลุ่มทั้งหมด หรือไม่?

คำสั่งที่ได้รับ

คำสั่ง getent ตรวจสอบหลายฐานข้อมูลสำหรับข้อมูลกลุ่มผู้ใช้ ไม่ใช่แค่ “/etc/group” เราจะใช้ getent เพื่อแสดงให้เราเห็นกลุ่มผู้ใช้

 รับกลุ่ม 

ใช้ getent เพื่อแสดงรายการกลุ่มที่กำหนดทั้งหมด

การใช้ getent กับตัวเลือก group จะทำให้เกิด—บนเครื่องทดสอบนี้—ให้ผลลัพธ์เหมือนกับการใช้ไฟล์ “/ etc/group” นั่นเป็นเพราะว่าเราไม่ได้ใช้ LDAP หรือบริการตั้งชื่อแบบรวมศูนย์อื่นๆ ดังนั้นจึงไม่มีแหล่งอื่นสำหรับการ getent

ผลลัพธ์จาก getent group แสดงกลุ่มและสมาชิก

ไม่แปลกใจเลยที่ผลลัพธ์จะนับรวมกับผลลัพธ์จากไฟล์ “/etc/group” บางทีสิ่งที่เราเห็นจริงๆ ก็คือความเป็นจริงของสถานการณ์นั้น บางทีทุกอย่างก็ตรงไปตรงมา และในคอมพิวเตอร์เครื่องนี้ สิ่งที่คุณเห็นคือสิ่งที่คุณได้รับ ขอสงวนการตัดสินว่า

คำสั่ง getent สามารถดูกลุ่มเดียวสำหรับเรา เราจะดูที่กลุ่ม "devteam"

 getent กลุ่ม devteam 

การใช้ getent group ดึงรายละเอียดของกลุ่มเดียว

เราได้ผลลัพธ์เหมือนเดิมทุกประการ มีวิธีขุดให้ลึกกว่านั้น

ที่เกี่ยวข้อง: วิธีการแสดงรายการผู้ใช้ใน Linux

คำสั่งฝา

คำสั่ง lid เป็นส่วนหนึ่งของชุดเครื่องมือ libuser ติดตั้งแล้วในคอมพิวเตอร์ทดสอบ Fedora 36 ของเรา แต่ต้องติดตั้งบน Ubuntu 22.04 และ Manjaro 21

นอกจากนี้ คำสั่งนี้เรียกว่า lid บน Fedora และ Manjaro แต่บน Ubuntu คุณต้องใช้ libuser-lid

ในการติดตั้งคำสั่งบน Ubuntu ให้พิมพ์:

 sudo apt ติดตั้ง libuser 

การติดตั้ง libuser บน Ubuntu

บน libuser มีการติดตั้ง libuser จาก AUR ดังนั้น คุณจะต้องใช้ตัวช่วย AUR ที่คุณชื่นชอบ เราใช้ yay

 เย้ libuser 

การติดตั้ง libuser บน Manjaro

คุณสามารถใช้ libuser-lid เพื่อแสดงข้อมูลกลุ่มเกี่ยวกับกลุ่มหรือผู้ใช้ หากต้องการแสดงกลุ่มที่บุคคลนั้นอยู่ ให้ส่งชื่อบัญชีผู้ใช้ของพวกเขาในบรรทัดคำสั่ง บน Fedora และ Manjaro อย่าลืมใช้ lid แทน libuser-lid

 sudo libuser-lib dave 

ใช้ libuser-lid เพื่อแสดงกลุ่มที่ผู้ใช้เดฟเป็นสมาชิกของ

หากต้องการดูสมาชิกของกลุ่ม ให้ใช้ตัวเลือก -g (กลุ่ม) พร้อมกับชื่อกลุ่ม

 sudo libuser-lid -g devteam 

ใช้ libuser-lid เพื่อแสดงรายการสมาชิกของกลุ่ม devteam

ดูเถิด ผู้ใช้ที่ชื่อ “ฟรานซิส” ได้ปรากฏตัวขึ้นเป็นสมาชิกของรายการ นี่เป็นครั้งแรกที่เราได้เห็นเขา เขาไม่อยู่ใน "/etc/group" และ getent ก็ไม่พบเขาเช่นกัน

ลองดูผู้ใช้สองสามรายด้วยคำสั่ง groups

 กลุ่ม abigail
 กลุ่มเฮย์เดน
 กลุ่ม ฟรานซิส 

การใช้คำสั่งกลุ่มในการเลือกผู้ใช้

  • ผู้ใช้ "abigail" อยู่ในกลุ่มที่เรียกว่า "abigail" และอีกสองกลุ่มคือ "reteam" และ "devteam"
  • ผู้ใช้ “เฮย์เดน” อยู่ในกลุ่มที่เรียกว่า “เฮย์เดน” และอีกสองกลุ่มคือ “pvqteam” และ “docteam”
  • ผู้ใช้ “francis” อยู่ในกลุ่มเดียว คือกลุ่ม “devteam” เป็นที่น่าสังเกตว่าพวกเขา ไม่ อยู่ในกลุ่มชื่อ “ฟรานซิส”
เพิ่มผู้ใช้ในกลุ่ม (หรือกลุ่มที่สอง) บน Linux
ที่เกี่ยวข้อง เพิ่มผู้ใช้ในกลุ่ม (หรือกลุ่มที่สอง) บน Linux

เราทราบดีว่าผู้ใช้ทุกคนต้องเป็นสมาชิกของกลุ่มหลัก และโดยค่าเริ่มต้น กลุ่มหลักจะมี GID และชื่อที่ตรงกับ UID ของผู้ใช้และชื่อบัญชี ดูเหมือนว่าผู้ใช้ "francis" จะแตกต่างออกไป

ลองใช้คำสั่ง id และดูว่า UID และ GID บอกอะไรเรา

 id abigail
 ไอดี ฟรานซิส 

การใช้คำสั่ง id กับผู้ใช้ abigail และ francis

ผู้ใช้ “abigail” มี UID 1002 และ GID 1002 อยู่ในสามกลุ่ม หนึ่งในนั้นเรียกว่า “abigail” มี GID เท่ากับ 1002 นี่คือกลุ่มหลัก เริ่มต้น

ผู้ใช้ “francis” มี GID เท่ากับ 1,019 ซึ่งตรงกับ GID ของกลุ่ม “devteam” ผู้ใช้รายนี้ได้รับการกำหนดกลุ่มหลักใหม่ หรือกลุ่ม "devteam" ถูกกำหนดเป็นกลุ่มหลักเมื่อผู้ใช้รายนี้ถูกเพิ่มลงในระบบ

ไม่ว่าจะเป็นตัวใด มีเพียง libuser-lid ตรวจพบและรายงานการมีอยู่ในกลุ่ม "devteam"

ปีศาจในรายละเอียด

ดังนั้นสิ่งสำคัญคือต้องดูรายละเอียดของแท้

Groups เป็นวิธีที่ยอดเยี่ยมในการทำงานร่วมกัน ตราบใดที่คุณรู้ว่าคุณกำลังเปิดมันกับใคร

ที่เกี่ยวข้อง: วิธีเปลี่ยนข้อมูลผู้ใช้ด้วย chfn และ usermod บน Linux