ทำความเข้าใจกับกลุ่มผู้ใช้ 'พนักงาน'


23

เป็นที่ทราบกันว่าผู้ใช้ทั้งหมดเป็นสมาชิกของกลุ่ม 'พนักงาน' หากคุณตั้งค่าผู้ใช้มาตรฐานและสร้างไฟล์ใด ๆ รายการของไฟล์นั้นในเทอร์มินัลที่มี 'ls -la' จะแสดงกลุ่มผู้ใช้ว่าเป็น 'staff'

ใช้คำสั่ง dscacheutil เราสามารถดูข้อมูลเกี่ยวกับกลุ่ม ตัวอย่างเช่น: -

dscacheutil -q group -a name admin

ส่งคืนข้อมูลเกี่ยวกับกลุ่มผู้ดูแลรวมถึงสมาชิกทั้งหมด

อย่างไรก็ตามเมื่อใช้เพื่อดูกลุ่ม 'พนักงาน' ฉันคาดว่าจะเห็นผู้ใช้มาตรฐานเป็นสมาชิกของกลุ่ม แต่นี่ไม่ใช่กรณี: -

dscacheutil -q group -a name staff

name: staff
password: *
gid: 20
users: root

ดังนั้นหากผู้ใช้มาตรฐานทั้งหมดเป็นสมาชิกในกลุ่มพนักงานทำไมพวกเขาจึงไม่ปรากฏที่นี่

มีคำสั่งอื่นที่สามารถแสดงให้สมาชิกที่แท้จริงของกลุ่มพนักงาน?


3
เป็นคำถามที่ดีมาก ฉันอาจจะอยากได้เงินนี้ถ้ามันไม่ได้รับความสนใจมากพอ ผมก็คิดว่ามันเป็นรหัสอย่างใดที่จะแสดงเฉพาะสมาชิกในกลุ่มหลัก แต่ผู้ใช้ทั้งหมดของฉันชื่อ (เหนือ HID 500) ทั้งหมดกลุ่มหลักเป็นพนักงานและยังคงไม่ได้ระบุไว้โดยแคช util เป็นในกลุ่ม (ที่ผิดปกติรากกับ GID ของล้อมีการระบุไว้ ... ) ซอสแปลกแน่นอน ...
bmike

ขอบคุณ @ bmike ที่น่าสนใจสามารถเห็นได้ในแอพ Directory Utility ซึ่งอยู่ใน / System / Library / CoreServices
TheDarkKnight

โอ้ฉันคิดว่ารูทเท่านั้นเป็นสมาชิกของทีมงาน Like / etc / group แสดง: staff: *: 20: root
Scott Walter

@ScottWalter ผู้ใช้ที่เป็นผู้ดูแลระบบเป็นสมาชิกของ 'staff' และ 'admin' ในขณะที่ไม่ใช่ผู้ดูแลระบบจะเป็นสมาชิกของกลุ่ม 'staff' เท่านั้น ดูส่วน "เจ้าของกลุ่มอื่น ๆ " ที่นี่: support.apple.com/kb/HT2963
TheDarkKnight

คำตอบ:


11

มีเพียงวิธีเดียวที่เชื่อถือได้ในการรับสมาชิกทุกคนในกลุ่มใน OS X และการตอบกลับจาก 2DD8847 ครอบคลุมว่า สำหรับ "ทำไม" ฉันไม่สามารถอธิบายเหตุผลได้ ทั้งหมดที่ฉันสามารถบอกคุณได้คือความแตกต่างของผลลัพธ์

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

ผลลัพธ์ไม่สมบูรณ์:

dscl . -read /Groups/[groupname]
dscl . -read /Groups/[groupname] GroupMembership
dscacheutil -q group -a name [groupname]

ผลลัพธ์ที่สมบูรณ์:

dscl . -list /Users PrimaryGroupID | grep [gid]

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

หวังว่าจะช่วย!

แหล่ง


"ผู้ใช้เหล่านี้ไม่ได้อยู่ในรายการอย่างเป็นทางการไม่ได้ถูกเพิ่มเข้าไปในกลุ่มพนักงานพวกเขาเพิ่งได้รับ PrimaryGroupID ที่ตรงกับพนักงาน gid" - ตอนนี้มันสมเหตุสมผลแล้ว ฉันสงสัยว่ามีเวกเตอร์โจมตีความปลอดภัยที่ถูกต้องด้วยสิ่งนี้หรือไม่ หากเป็นไปได้ที่จะตั้งค่า PrimaryGroupId ของผู้ใช้โดยไม่ต้องเพิ่มลงในกลุ่มผู้ดูแลระบบจะให้สิทธิ์ผู้ดูแลระบบแก่พวกเขาหรือไม่ ฉันจะตรวจสอบ
TheDarkKnight

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

4
บางทีคุณอาจหมายถึงChalk it up to the oddities of OS X. There are many.
user3019105

ฉันกำลังดูแผ่นดิสก์จากเครื่องอื่นและใช่ชื่อผู้ใช้จะถูกเปลี่ยนชื่อฉันกลายเป็น "สตีฟ" ในฐานะผู้ใช้ 502 หรืออาจ 501. อย่างไรก็ตาม ทฤษฎีของฉันคือ "พนักงาน" น่าจะถูกเรียกว่า "macosx" และมันถูกใช้โดย Finder เพื่อทำสิ่งที่ "รูท" ในนามผู้ใช้ปกติ เป็นเพียงทฤษฎีสุ่ม
Tomachi

2
@ เจ้าหน้าที่ Tomachi ไม่สามารถ macosx ได้มีการตั้งค่าใด ๆ ก่อน OsX เมื่อระบบเป็น NeXT
user151019

4

คุณต้องการบรรลุ / ทำอะไรอย่างแน่นอน

คำสั่งนี้แสดงผู้ใช้ทั้งหมดในกลุ่มพนักงาน:

dscl . -list /Users PrimaryGroupID | grep ' 20$'

แหล่ง

คำอธิบาย:กลุ่มพนักงานมี PrimaryGroupID เป็น 20


ฉันพยายามที่จะเข้าใจว่าทำไมกลุ่มพนักงานไม่แสดงรายชื่อสมาชิกผ่าน dscacheutil และ Directory Utility เป้าหมายหลักของฉันคือการดึงรายชื่อสมาชิกจากกลุ่มโดยใช้ C ++ โดยไม่ต้องเรียกกระบวนการแยกต่างหาก ในระหว่างกระบวนการนี้ฉันเจอปัญหาของกลุ่มที่ไม่แสดงสมาชิกและฉันต้องการทราบว่าทำไมถึงเป็นเช่นนี้
TheDarkKnight

ทำไม dscacheutil ไม่แสดงรายชื่อกลุ่มพนักงาน ... ฉันไม่รู้ developer.apple.com/library/mac/documentation/Darwin/Reference/ ......มันเป็นการนำไปใช้และพวกเขาตัดสินใจที่จะไม่แสดงมัน
Bastian Gruber

2
ขออภัย แต่การพูดว่า "เป็นการดำเนินการ" และการเชื่อมโยงไปยังหน้า man ของ dscacheutil ไม่ตอบคำถาม
TheDarkKnight

สำหรับ C ++ คุณสามารถเรียกใช้ฟังก์ชันเชลล์ได้ ฉันพบว่าไซต์นี้มีประโยชน์มาก: blog.earth-works.com/2012/09/13/…ฉันไม่คิดว่ามีเหตุผลใด ๆ ที่พวกเขาไม่แสดง พวกเขาสร้างฟังก์ชั่นและคุณก็ขาดอะไรไป .. ฉันควรจะพูดยังไงดี พวกเขาป้องกันไม่ให้คุณแสดงสมาชิกเพราะพวกเขาชอบ?
Bastian Gruber

2
การเรียกฟังก์ชั่นเชลล์จะสร้างกระบวนการแยกต่างหาก ด้วยเหตุผลต่างๆสิ่งนี้ไม่สามารถใช้ได้กับโครงการที่ฉันกำลังดำเนินการ ตอนนี้ฉันกำลังมองหา Identity Services: developer.apple.com/library/mac/documentation/networking/…
TheDarkKnight
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.