Die Benutzergruppe „Mitarbeiter“ verstehen

Es ist bekannt, dass alle Benutzer Mitglieder der Gruppe „Mitarbeiter“ sind. Wenn Sie einen Standardbenutzer einrichten und eine beliebige Datei erstellen, zeigt eine Liste dieser Datei im Terminal mit „ls -la“ die Benutzergruppe als „Staff“ an.

Mit dem Befehl dscacheutil können wir Informationen zu Gruppen anzeigen. Zum Beispiel: -

dscacheutil -q group -a name admin

Dies gibt Informationen über die Administratorgruppe zurück, einschließlich aller Mitglieder.

Wenn ich jedoch die Gruppe "Mitarbeiter" anschaue, habe ich erwartet, Standardbenutzer als Mitglieder der Gruppe zu sehen, aber das ist nicht der Fall: -

dscacheutil -q group -a name staff

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

Wenn also alle Standardbenutzer Mitglieder der Gruppe staff sind, warum erscheinen sie dann nicht hier?

Gibt es einen anderen Befehl, der die echten Mitglieder der Mitarbeitergruppe anzeigen kann?

Tolle Frage. Ich werde das wahrscheinlich prämieren wollen, wenn es nicht genug Aufmerksamkeit bekommt. Ich dachte, es wäre irgendwie so codiert, dass nur die primären Gruppenmitglieder angezeigt werden, aber alle meine benannten Benutzer (über 500 versteckt) sind alle primäre Gruppen als Mitarbeiter und werden vom Cache-Dienstprogramm immer noch nicht als in der Gruppe aufgeführt (wo seltsamerweise root mit GID von Rad ist aufgeführt ...) Seltsame Soße in der Tat ...
Danke @bmike, interessanterweise ist dasselbe in der Verzeichnisdienst-App zu sehen, die sich in /System/Library/CoreServices befindet.
Oh, ich dachte, dass nur Root ein Mitarbeiter ist. Wie /etc/group zeigt: staff:*:20:root
@ScottWalter, Admin-Benutzer sind Mitglieder von „Staff“ und „Admin“, während Nicht-Administratoren nur Mitglieder der Gruppe „Staff“ sind. Siehe Abschnitt „Besitzer, Gruppe, Andere“ hier: support.apple.com/kb/HT2963

Antworten (3)

Es gibt nur einen zuverlässigen Weg, um alle Mitglieder einer Gruppe in OS X zu erhalten, und die Antwort von 2DD8847 deckt das ab. Was das "Warum" betrifft, kann ich keine logische Erklärung anbieten. Ich kann Ihnen nur sagen, was die Ergebnisse unterscheidet.

Diese Ansätze schließen Benutzer nicht ein, die nur Mitglieder der Gruppe über PrimaryGroupID sind. Man könnte sich das so vorstellen, dass diese nicht aufgeführten Benutzer nicht offiziell zur Mitarbeitergruppe hinzugefügt wurden. Sie haben gerade eine PrimaryGroupID erhalten, die mit der Mitarbeiter-GID übereinstimmt. Daher sind sie bei einigen Befehlen nicht offiziell aufgeführt. Ich weiß, es ist absurd.

UNVOLLSTÄNDIGE ERGEBNISSE:

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

VOLLSTÄNDIGE ERGEBNISSE:

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

Alles, was ich Ihnen wirklich sagen kann, ist, dass Sie ohne das Nachschlagen von Gruppenmitgliedern anhand ihrer PrimaryGroupID (anstatt Mitglieder einer Gruppe aufzulisten) keine vollständigen Ergebnisse erhalten. Schreiben Sie es den Kuriositäten von Unix zu. Es gibt viele.

Ich hoffe, das hilft!

Quelle

"Diese nicht aufgeführten Benutzer wurden nicht offiziell zur Mitarbeitergruppe hinzugefügt. Sie erhielten nur eine PrimaryGroupID, die der Mitarbeiter-GID entspricht." - Das macht jetzt Sinn. Ich frage mich, ob es dabei einen gültigen Sicherheitsangriffsvektor gibt. Wenn es möglich ist, die PrimaryGroupId eines Benutzers festzulegen, ohne ihn tatsächlich zur Administratorgruppe hinzuzufügen, würde ihm das Administratorrechte geben? Ich werde nachforschen.
Ich wollte nicht andeuten, dass etwas nicht stimmt. Keine Sorge, Mitarbeiter haben keine Administratorrechte auf Ihrem Computer. In OS X hat der Eigentümer fast alles auf Mitarbeiter eingestellt, aber denken Sie daran, dass andere Berechtigungen den Missbrauch dieser Realität außer Kraft setzen. Jeder Benutzerordner ist für jeden anderen Benutzer "lesbar", aber in jedem Benutzerordner sehen Sie, dass für einzelne Elemente der Lesezugriff widerrufen wurde. Also /Benutzer/Benutzername/Desktop hat den Benutzer jeder auf Kein Zugriff gesetzt - Es ist keine saubere Berechtigungsverwaltung, aber es funktioniert und Sie sind sicher.
Vielleicht meintest duChalk it up to the oddities of OS X. There are many.
Ich habe mir eine Disc von einer anderen Maschine angesehen und ja, die Benutzernamen werden umbenannt, ich wurde "Steve" als Benutzer 502 oder vielleicht 501. Jedenfalls. Meine Theorie ist, dass "staff" wahrscheinlich "macosx" heißen sollte und vom Finder verwendet wird, um "rooty" Sachen im Namen der normalen Benutzer zu machen. nur eine zufällige Theorie.
@Tomachi-Mitarbeiter konnten nicht macosx sein, es wurde einige Jahre vor OsX eingerichtet, als das System NeXT war

Was genau willst du erreichen/tun?

Dieser Befehl listet alle Benutzer in der Gruppe staff auf:

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

Quelle

Erläuterung: Die Mitarbeitergruppe hat die PrimaryGroupID 20.

Ich versuche zu verstehen, warum die Mitarbeitergruppe ihre Mitgliederliste nicht über dscacheutil und das Verzeichnisdienstprogramm anzeigt. Mein Hauptziel ist es, die Liste der Mitglieder einer Gruppe mit C++ abzurufen, ohne einen separaten Prozess aufzurufen. Während dieses Vorgangs bin ich auf das Problem gestoßen, dass die Gruppe ihre Mitglieder nicht anzeigt, und ich möchte wissen, warum dies der Fall ist.
Warum dscacheutil die Mitarbeitergruppe nicht auflistet ... ich weiß es nicht. developer.apple.com/library/mac/documentation/Darwin/Reference/… Es ist eine Implementierung, und irgendwie haben sie beschlossen, sie nicht zu zeigen.
Entschuldigung, aber die Aussage "es ist eine Implementierung" und das Verlinken auf die Manpages von dscacheutil beantwortet die Frage nicht.
Für C++ können Sie eine Shell-Funktion aufrufen. Ich fand diese Seite sehr hilfreich: blog.earth-works.com/2012/09/13/… Ich glaube nicht, dass es einen Grund gibt, warum sie es nicht zeigen. Sie haben eine Funktion gebaut und Ihnen fehlt etwas ... was soll ich sagen. Sie hindern dich daran, dir die Mitglieder zu zeigen, weil es ihnen gefällt?
Der Aufruf einer Shell-Funktion erzeugt einen separaten Prozess. Aus verschiedenen Gründen ist dies für das Projekt, an dem ich arbeite, nicht praktikabel. Ich schaue mir jetzt die Identitätsdienste an: developer.apple.com/library/mac/documentation/networking/…

Warum halten sich hier alle an diese umständlichen dsclBefehle dscacheutil?

Warum nicht den viel einfacheren idBefehl (und seinen noch einfacheren groupFriend-Befehl) verwenden?

id - Gn <user> 

gibt Ihnen das, was Sie sich für jeden Mac-Benutzer wünschen, einschließlich der 50x "normalen" Mac-Benutzer.

z.B.

> 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

oder, wenn Sie stattdessen die Gruppen-IDs möchten:

> id -G myusername
20 12 61 79 80 81 98 702 701 33 100 204 250 395 398 399 400
Wie kann dies verwendet werden, um alle Benutzer anzuzeigen, die Teil der Gruppe sind staff?
Jetzt sehe ich, dass ich es auf den Kopf gestellt habe ... Sie können leicht die Gruppen (die erste ist die primäre Gruppe) eines bestimmten Benutzers sehen, aber diese Befehle können dies nicht für alle Benutzer tun.