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

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) являются основной группой в качестве персонала и все еще не перечислены утилитой кэша, как в группе (где странно root с GID колесо в списке ...) Действительно странный соус ...
bmike
Спасибо @bmike, что интересно, то же самое можно увидеть в приложении Directory Utility, которое находится в / System / Library / CoreServices.
TheDarkKnight
О, я думал, что только root был членом персонала. Как / etc / group показывает: staff: *: 20: root
Скотт Уолтер
@ScottWalter, пользователи с правами администратора являются членами «персонала» и «администратора», а пользователи без прав администратора являются членами только группы «сотрудники». См. Раздел «Владелец, группа, Другие» здесь: 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. Здесь очень много.

Надеюсь, это поможет!

Источник

sgelliott
источник
«эти пользователи, которых нет в списке, не были официально добавлены в группу персонала. Им просто дали PrimaryGroupID, который соответствует gid персонала» - теперь это имеет смысл. Интересно, есть ли действительный вектор атаки безопасности с этим; если можно установить PrimaryGroupId пользователя без фактического добавления его в группу администраторов, даст ли это ему права администратора? Я буду расследовать.
TheDarkKnight
Я не хотел сказать, что что-то не так. Не волнуйтесь, у сотрудников нет прав администратора на вашем компьютере. В OS X почти все имеют владельца, установленного на персонал, но помните, что другие разрешения отвергают злоупотребление этой реальностью. Каждая папка пользователя «читается» любым другим пользователем, но внутри каждой пользовательской папки вы увидите, что для отдельного элемента установлен доступ на чтение. Таким образом, / Users / username / Desktop имеет пользователя, для которого все настроены как No Access - это не чистое управление разрешениями, но оно работает, и вы в безопасности.
sgelliott
4
Может быть, вы имели в видуChalk it up to the oddities of OS X. There are many.
user3019105
Я смотрел на диск с другой машины, и да, имена пользователей переименовывались, я стал "Стивом" как пользователь 502 или, может быть, 501. В любом случае. моя теория состоит в том, что «штат», вероятно, должен был называться «macosx», и он используется Finder для выполнения «рутинных» действий от имени обычных пользователей. просто случайная теория.
Томачи
2
Персонал @Tomachi не мог быть macosx, он был создан за несколько лет до OsX, когда система была NeXT
user151019
4

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

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

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

Источник

Объяснение: Группа персонала имеет PrimaryGroupID, равный 20.

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