Понимание группы пользователей «персонал»

Известно, что все пользователи являются членами группы «персонал». Если вы настроите стандартного пользователя и создадите какой-либо файл, список этого файла в терминале с «ls -la» покажет, что группа пользователей — «персонал».

С помощью команды dscacheutil мы можем посмотреть информацию о группах. Например: -

dscacheutil -q group -a name admin

Это возвращает информацию о группе администраторов, включая всех участников.

Однако, когда я смотрел на группу «персонал», я ожидал увидеть обычных пользователей в качестве членов группы, но это не так:

dscacheutil -q group -a name staff

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

Итак, если все обычные пользователи являются членами группы staff, почему они не отображаются здесь?

Есть ли другая команда, которая может показать реальных членов группы сотрудников?

Отличный вопрос. Я, вероятно, захочу наградить это, если оно не получит достаточного внимания. Я думал, что это было каким-то образом закодировано, чтобы показывать только основных членов группы, но все мои именованные пользователи (выше спрятанных 500) являются основной группой как сотрудники и до сих пор не перечислены утилитой кеша, как в группе (где, как ни странно, root с GID из колесо указано...) Странный соус действительно...
Спасибо @bmike, интересно, то же самое можно увидеть в приложении Directory Utility, которое находится в /System/Library/CoreServices.
О, я думал, что только корень был сотрудником. Например, /etc/group показывает: staff:*:20:root
@ScottWalter, пользователи с правами администратора являются членами «персонала» и «администратора», а лица, не являющиеся администраторами, являются членами только группы «персонал». См. раздел «Владелец, группа, другие» здесь: support.apple.com/kb/HT2963

Ответы (3)

Есть только один надежный способ получить всех членов группы в 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 пользователя, фактически не добавляя его в группу администраторов, даст ли это ему права администратора? Я буду исследовать.
Я не хотел сказать, что что-то не так. Не беспокойтесь, у сотрудников нет прав администратора на вашем компьютере. В OS X почти все имеет владельца, установленного как персонал, но помните, что другие разрешения имеют приоритет над неправильным использованием этой реальности. Каждая пользовательская папка «доступна для чтения» любому другому пользователю, но внутри каждой пользовательской папки вы увидите, что для отдельного элемента настроен запрет на чтение. Таким образом , в /Users/username/Desktop для всех пользователей установлено значение «Нет доступа ». Это не чистое управление разрешениями, но оно работает, и вы в безопасности.
Возможно, вы имели в видуChalk it up to the oddities of OS X. There are many.
я смотрел на диск с другой машины, и да, имена пользователей переименовываются, я стал «стивом» как пользователь 502 или, может быть, 501. во всяком случае. Моя теория заключается в том, что «персонал», вероятно, должен был называться «macosx», и он используется Finder для выполнения «рутовых» действий от имени обычных пользователей. просто случайная теория.
Персонал @Tomachi не мог быть Macosx, он был создан за несколько лет до OSX, когда система была NeXT.

Чего именно вы хотите добиться/сделать?

Эта команда выводит список всех пользователей в группе staff:

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

Источник

Объяснение: Группа сотрудников имеет PrimaryGroupID 20.

Я пытаюсь понять, почему группа персонала не показывает список своих членов через dscacheutil и утилиту каталогов. Моя основная цель — получить список членов группы с помощью C++, не вызывая отдельный процесс. В ходе этого процесса я столкнулся с проблемой, что группа не отображает своих участников, и я хочу знать, почему это так.
Почему dscacheutil не отображает группу персонала... я не знаю. developer.apple.com/library/mac/documentation/Darwin/Reference/… Это реализация, и почему-то решили их не показывать.
Извините, но фраза «это реализация» и ссылка на справочные страницы dscacheutil не дают ответа на вопрос.
Для C++ вы можете вызвать функцию оболочки. Я нашел этот сайт очень полезным: blog.earth-works.com/2012/09/13/… Я не думаю, что есть какая-то причина, по которой они его не показывают. Они построили функцию, и вы что-то упускаете ... что я должен сказать. Они мешают вам показывать участников, потому что им это нравится?
Вызов функции оболочки порождает отдельный процесс. По разным причинам это не подходит для проекта, над которым я работаю. Сейчас я смотрю на Identity Services: developer.apple.com/library/mac/documentation/networking/…

Почему здесь все придерживаются этих громоздких dsclи dscacheutilкоманд?

Почему бы не использовать гораздо более простую idкоманду (и еще более простую groupкоманду друга)?

id - Gn <user> 

даст вам то, что вы хотите для любого пользователя Mac, включая тех 50-кратных «обычных» пользователей Mac.

например.

> id -Gn 501     staff everyone localaccounts
_appserverusr admin _appserveradm _lpadmin com.apple.sharepoint.group.2 com.apple.sharepoint.group.1 _appstore
_lpoperator _developer _analyticsusers com.apple.access_ftp com.apple.access_screensharing com.apple.access_ssh com.apple.access_remote_ae

или, если вам нужны идентификаторы групп:

> id -G myusername
20 12 61 79 80 81 98 702 701 33 100 204 250 395 398 399 400
Как это можно использовать для отображения всех пользователей, входящих в группу staff?
Теперь я вижу, что перевернул его... вы можете легко увидеть группы (первая - основная группа) определенного пользователя, но эти команды не могут сделать это для всех пользователей.