Comprendre le groupe d'utilisateurs «personnel»

23

Il est connu que tous les utilisateurs sont membres du groupe «personnel». Si vous configurez un utilisateur standard et créez un fichier, une liste de ce fichier dans le terminal avec «ls -la» indique que le groupe d'utilisateurs est «personnel».

En utilisant la commande dscacheutil, nous pouvons voir des informations sur les groupes. Par exemple: -

dscacheutil -q group -a name admin

Cela renvoie des informations sur le groupe d'administration, y compris tous les membres.

Cependant, lorsque je regardais le groupe «personnel», je m'attendais à voir les utilisateurs standard comme des membres du groupe, mais ce n'est pas le cas: -

dscacheutil -q group -a name staff

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

Donc, si tous les utilisateurs standard sont membres du groupe du personnel, pourquoi n'apparaissent-ils pas ici?

Y a-t-il une autre commande qui peut montrer les vrais membres du groupe d'état-major?

Le Chevalier Noir
la source
3
Grande question. Je vais probablement vouloir en profiter si ça n'attire pas assez l'attention. Je pensais qu'il était en quelque sorte codé pour n'afficher que les membres du groupe principal, mais tous mes utilisateurs nommés (au-dessus de 500 cachés) sont tous du groupe principal en tant que personnel et ne sont toujours pas répertoriés par l'utilitaire de cache comme dans le groupe (où étrangement root avec GID de roue est cotée ...) Sauce
bizarre en
Merci @bmike, fait intéressant, la même chose peut être vue dans l'application Directory Utility, qui se trouve dans / System / Library / CoreServices.
TheDarkKnight
Oh, je pensais que seule la racine était un membre du personnel. Comme / etc / group shows: staff: *: 20: root
Scott Walter
@ScottWalter, les utilisateurs administrateurs sont membres de "staff" et "admin" tandis que les non-administrateurs sont membres du groupe "staff" uniquement. Voir la section "Propriétaire, groupe, autres" ici: support.apple.com/kb/HT2963
TheDarkKnight

Réponses:

11

Il n'y a qu'un seul moyen fiable d'obtenir tous les membres d'un groupe sous OS X et la réponse de 2DD8847 couvre cela. Quant au «pourquoi», je ne peux pas offrir d'explication logique. Tout ce que je peux vous dire, c'est ce qui différencie les résultats.

Ces approches ne parviennent pas à inclure les utilisateurs qui sont uniquement membres du groupe via PrimaryGroupID. Une façon de penser à cela est que ces utilisateurs non répertoriés n'ont pas été officiellement ajoutés au groupe du personnel. On leur a juste donné un PrimaryGroupID qui correspond au gid du personnel. Par conséquent, ils ne sont pas officiellement répertoriés avec certaines commandes. Je sais, c'est absurde.

RÉSULTATS INCOMPLETS:

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

RÉSULTATS COMPLETS:

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

Tout ce que je peux vraiment vous dire, c'est que sans rechercher les membres du groupe par leur PrimaryGroupID (au lieu de répertorier les membres d'un groupe), cela ne vous donnera pas de résultats complets. Craquez les bizarreries d'Unix. Il y a beaucoup de.

J'espère que ça t'as aidé!

La source

sgelliott
la source
"ces utilisateurs non répertoriés n'ont pas été officiellement ajoutés au groupe de personnel. Ils ont juste reçu un PrimaryGroupID qui correspond au gid de personnel" - Maintenant, cela a du sens. Je me demande s'il y a un vecteur d'attaque de sécurité valide avec ceci; s'il est possible de définir le PrimaryGroupId d'un utilisateur sans l'ajouter réellement au groupe d'admin, cela leur donnerait-il des droits d'administrateur? Je vais enquêter.
TheDarkKnight
Je ne voulais pas suggérer que quelque chose ne va pas. Ne vous inquiétez pas, les membres du personnel n'ont pas de droits d'administrateur sur votre machine. Dans OS X, presque tout est réglé par le propriétaire sur le personnel, mais n'oubliez pas que d'autres autorisations prévalent sur l'utilisation abusive de cette réalité. Chaque dossier utilisateur est "lisible" par tous les autres utilisateurs, mais à l'intérieur de chaque dossier utilisateur, vous verrez que chaque élément est défini pour que l'accès en lecture soit révoqué. Donc / Users / nom d' utilisateur / Desktop a utilisateur tous ensemble à Pas d' accès - Ce n'est pas propre gestion des autorisations, mais cela fonctionne et vous êtes sûr.
sgelliott
4
Peut-être que vous vouliez direChalk it up to the oddities of OS X. There are many.
user3019105
je regardais un disque d'une autre machine et oui, les noms d'utilisateur sont renommés, je suis devenu "steve" en tant qu'utilisateur 502 ou peut-être 501. de toute façon. ma théorie est que "personnel" aurait probablement dû être appelé "macosx" et il est utilisé par le Finder pour faire des choses "rooty" au nom des utilisateurs réguliers. juste une théorie aléatoire.
Tomachi
2
Le personnel de @Tomachi ne pouvait pas être macosx, il a été configuré des années avant OsX lorsque le système était NeXT
user151019
4

Que voulez-vous exactement accomplir / faire?

Cette commande répertorie tous les utilisateurs du groupe d'employés:

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

La source

Explication: Le groupe d'employés a le PrimaryGroupID de 20.

Bastian Gruber
la source
J'essaie de comprendre pourquoi le groupe d'employés n'affiche pas sa liste de membres via dscacheutil et l'utilitaire d'annuaire. Mon objectif principal est de récupérer la liste des membres d'un groupe à l'aide de C ++, sans appeler de processus séparé. Au cours de ce processus, je suis tombé sur la question du groupe ne présentant pas ses membres et je veux savoir pourquoi c'est le cas.
TheDarkKnight
Pourquoi dscacheutil ne répertorie pas le groupe du personnel ... je ne sais pas. developer.apple.com/library/mac/documentation/Darwin/Reference/… C'est une implémentation, et ils ont en quelque sorte décidé de ne pas les montrer.
Bastian Gruber
2
Désolé, mais dire "c'est une implémentation" et créer un lien vers les pages de manuel de dscacheutil ne répond pas à la question.
TheDarkKnight
Pour C ++, vous pouvez appeler une fonction shell. J'ai trouvé ce site très utile: blog.earth-works.com/2012/09/13/… Je ne pense pas qu'il y ait une raison pour laquelle ils ne le montrent pas. Ils ont construit une fonction et il vous manque quelque chose .. que dois-je dire. Ils vous empêchent de vous montrer les membres parce qu'ils aiment ça?
Bastian Gruber
2
L'appel d'une fonction shell engendre un processus distinct. Pour diverses raisons, ce n'est pas viable pour le projet sur lequel je travaille. Je regarde maintenant les services d'identité: developer.apple.com/library/mac/documentation/networking/…
TheDarkKnight