Hiểu nhóm người dùng 'nhân viên'


23

Được biết, tất cả người dùng là thành viên của nhóm 'nhân viên'. Nếu bạn thiết lập một người dùng chuẩn và tạo bất kỳ tệp nào, một danh sách các tệp đó trong thiết bị đầu cuối với 'ls -la' sẽ hiển thị nhóm người dùng là 'staff'.

Sử dụng lệnh dscacheutil, chúng ta có thể thấy thông tin về các nhóm. Ví dụ: -

dscacheutil -q group -a name admin

Điều này trả về thông tin về nhóm quản trị, bao gồm tất cả các thành viên.

Tuy nhiên, khi được sử dụng để xem xét nhóm 'nhân viên', tôi dự kiến ​​sẽ thấy người dùng chuẩn là thành viên của nhóm, nhưng đây không phải là trường hợp: -

dscacheutil -q group -a name staff

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

Vì vậy, nếu tất cả người dùng tiêu chuẩn là thành viên trong nhóm nhân viên, tại sao họ không xuất hiện ở đây?

Có một lệnh khác có thể hiển thị các thành viên thực sự của nhóm nhân viên?


3
Câu hỏi tuyệt vời. Có lẽ tôi sẽ muốn trả tiền cho điều này nếu nó không được chú ý đầy đủ. Tôi đã nghĩ rằng bằng cách nào đó, nó được mã hóa để chỉ hiển thị các thành viên nhóm chính, nhưng tất cả người dùng có tên của tôi (trên 500) đều là nhóm chính với tư cách là nhân viên và vẫn không được liệt kê bởi bộ đệm sử dụng như trong nhóm (trong đó root gốc với GID của bánh xe được liệt kê ...) Thực sự kỳ lạ ...
bmike

Cảm ơn @bmike, thật thú vị, có thể thấy điều tương tự trong ứng dụng Directory Utility, trong / System / Library / CoreService.
TheDarkKnight

Oh tôi nghĩ rằng chỉ có root là một thành viên của nhân viên. Like / etc / group shows: staff: *: 20: root
Scott Walter

@ScottWalter, người dùng quản trị viên là thành viên của 'staff' và 'admin' trong khi người không phải quản trị viên chỉ là thành viên của nhóm 'staff'. Xem phần "Chủ sở hữu, nhóm, những người khác" tại đây: support.apple.com/kb/HT2963
TheDarkKnight

Câu trả lời:


11

Chỉ có một cách đáng tin cậy để có được tất cả các thành viên của một nhóm trong OS X và câu trả lời từ 2DD8847 bao gồm điều đó. Đối với "tại sao" tôi không thể đưa ra một lời giải thích hợp lý. Tất cả tôi có thể nói với bạn là những gì phân biệt kết quả.

Các cách tiếp cận này không bao gồm những người dùng chỉ là thành viên của nhóm thông qua PrimarygroupID. Một cách để nghĩ về điều đó là những người dùng này không được liệt kê không được thêm chính thức vào nhóm nhân viên. Họ chỉ được cấp một Nhóm chính phù hợp với nhân viên gid. Do đó, chúng không được liệt kê chính thức với một số lệnh. Tôi biết, nó vô lý.

KẾT QUẢ THU NHẬP:

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

KẾT QUẢ HOÀN THÀNH:

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

Tất cả những gì tôi thực sự có thể nói với bạn là nếu không tra cứu các thành viên trong nhóm bởi Nhóm chính của họ (thay vì liệt kê các thành viên của một nhóm), nó sẽ không cung cấp cho bạn kết quả hoàn chỉnh. Phấn nó lên đến sự kỳ lạ của Unix. Có nhiều.

Mong rằng sẽ giúp!

Nguồn


"những người dùng này không được liệt kê không được thêm chính thức vào nhóm nhân viên. Họ chỉ được cấp một Nhóm chính phù hợp với gid của nhân viên" - Bây giờ điều đó có ý nghĩa. Tôi tự hỏi nếu có một vectơ tấn công bảo mật hợp lệ với điều này; nếu có thể thiết lập Sơ đồ nhóm của người dùng mà không thực sự thêm họ vào nhóm quản trị, điều đó có cung cấp cho họ quyền quản trị không? Tôi sẽ điều tra.
TheDarkKnight

Tôi không có ý đề nghị bất cứ điều gì là sai. Đừng lo lắng, nhân viên không có quyền quản trị trên máy của bạn. Trong OS X, hầu hết mọi thứ đều có chủ sở hữu được đặt thành nhân viên, nhưng hãy nhớ rằng các quyền khác ghi đè lên việc lạm dụng thực tế này. Mọi thư mục người dùng đều có thể "đọc được" bởi mọi người dùng khác, nhưng bên trong mỗi thư mục người dùng, bạn sẽ thấy các mục riêng lẻ được đặt để thu hồi quyền truy cập đọc. Vì vậy / Người dùng / tên người dùng / Máy tính để bàntất cả người dùng được đặt thành Không có quyền truy cập - Đây không phải là quản lý cấp phép rõ ràng, nhưng nó hoạt động và bạn an toàn.
sgelliott

4
Có thể bạn muốn nóiChalk it up to the oddities of OS X. There are many.
user3019105

Tôi đã xem một đĩa từ một máy khác và vâng, tên người dùng được đổi tên, tôi trở thành "steve" với tư cách là người dùng 502 hoặc có thể là 501. dù sao đi nữa. lý thuyết của tôi là "nhân viên" có lẽ nên được gọi là "macosx" và nó được Finder sử dụng để thực hiện công cụ "rooty" thay cho người dùng thông thường. chỉ là một lý thuyết ngẫu nhiên.
Tomachi

2
Nhân viên của @Tomachi không thể là macosx, nó đã được thiết lập bất kỳ năm nào trước OsX khi hệ thống là NeXT
user151019

4

Chính xác những gì bạn muốn đạt được / làm gì?

Lệnh này liệt kê tất cả người dùng trong nhóm nhân viên:

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

Nguồn

Giải thích: Nhóm nhân viên có Nhóm chính là 20.


Tôi đang cố gắng hiểu lý do tại sao nhóm nhân viên không hiển thị danh sách thành viên của mình thông qua dscacheutil và Tiện ích thư mục. Mục tiêu chính của tôi là lấy danh sách các thành viên từ một nhóm bằng C ++, mà không gọi một quy trình riêng biệt. Trong quá trình này, tôi đã gặp phải vấn đề của nhóm không hiển thị các thành viên của nhóm và tôi muốn biết tại sao lại như vậy.
TheDarkKnight

Tại sao dscacheutil không liệt kê nhóm nhân viên ... tôi không biết. developer.apple.com/l Library / mac / documentation / Darwin / Reference / Lỗi Đây là một triển khai và bằng cách nào đó, họ đã quyết định không hiển thị chúng.
Bastian Gruber

2
Xin lỗi, nhưng nói "đó là một triển khai" và liên kết đến các trang man của dscacheutil không trả lời câu hỏi.
TheDarkKnight

Đối với C ++, bạn có thể gọi hàm shell. Tôi thấy trang web này rất hữu ích: blog.earth-works.com/2012/09/13/ Nhật Tôi không nghĩ có bất kỳ lý do nào khiến họ không hiển thị nó. Họ đã xây dựng một chức năng và bạn đang thiếu một cái gì đó..tôi nên nói gì. Họ ngăn bạn cho bạn xem các thành viên vì họ thích nó?
Bastian Gruber

2
Gọi một hàm shell sinh ra một quá trình riêng biệt. Vì nhiều lý do, điều này không khả thi đối với dự án tôi đang thực hiện. Bây giờ tôi đang xem Dịch vụ Nhận dạng: developer.apple.com/l
Library / mac / document / networking
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.