Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger

 << zurück
Linux-UNIX-Programmierung von Jürgen Wolf
Das umfassende Handbuch – 2., aktualisierte und erweiterte Auflage 2006
Buch: Linux-UNIX-Programmierung

Linux-UNIX-Programmierung
1216 S., mit CD, 49,90 Euro
Rheinwerk Computing
ISBN 3-89842-749-8
gp Kapitel 6 System- und Benutzerdateien
  gp 6.1 Die Datei /etc/passwd
    gp 6.1.1 Die Datei /etc/passwd auswerten
    gp 6.1.2 getpwuid und getpwnam – einzelne Abfrage von /etc/passwd
    gp 6.1.3 getpwent, setpwent und endpwent – komplette Abfrage von /etc/passwd
  gp 6.2 Die Datei /etc/shadow
    gp 6.2.1 Die Datei /etc/shadow auswerten
    gp 6.2.2 getspent, setspent und endspent – komplette Abfrage von /etc/shadow
  gp 6.3 Die Datei /etc/group
    gp 6.3.1 Die Datei /etc/group auswerten
    gp 6.3.2 getgrnam und getgrgid – einzelne Einträge aus /etc/group abfragen
    gp 6.3.3 getgrent, setgrent und endgrent – alle Einträge in /etc/group abfragen
  gp 6.4 uname – Informationen zum lokalen System erfragen
  gp 6.5 Das Verzeichnis /etc/skel und Network Information Service (NIS)
  gp 6.6 Dateien für Netzwerkinformationen


Rheinwerk Computing

6.3 Die Datei /etc/groudowntop

In der Datei /etc/group werden die Gruppennummern und Gruppennamen einander zugeordnet. In der Datei /etc/passwd wird mit der GID ja praktisch schon eine Standardgruppe für den Benutzer festgelegt. Mit /etc/group können weitere Gruppenzugehörigkeiten eines Benutzers definiert werden. Ein Eintrag in der Datei /etc/group sieht wie folgt aus:

Gruppenname:Passwort:Gruppennummer:Mitglied1,...
gp  Gruppenname – der Name der Gruppe
gp  Passwort – Bei älteren Systemen steht hier ein verschlüsseltes Passwort. Befindet sich hier ein »x«, dann bedeutet dies, dass das Passwort (verschlüsselt) in /etc/gshadow abgelegt ist. Die Datei /etc/gshadow ist das Gruppengegenstück von dem, was bei /etc/shadow für die Benutzer gilt. Natürlich kann auch hier ein Passwort entfallen – dann finden Sie hier ein »*« oder »!« wieder. Etwas Besonderes gibt es aber dann doch noch: Wenn ein Passwort eingerichtet ist, können auch Nichtmitglieder dieser Gruppe Zugang zu den Daten der Gruppe erhalten, wenn diese das Passwort kennen. Richten Sie hingegen kein Passwort ein, so können nur Benutzer auf Daten einer Gruppe zugreifen, wenn diese auch wirklich in der Gruppe eingetragen sind.
gp  Gruppennummer (GID) – die Gruppennummer der Gruppe
gp  Mitglieder – Hier werden die Mitglieder der Gruppe eingetragen. Mehrere Mitglieder werden durch ein einfaches Komma getrennt.

In der Praxis reichen der Gruppenname und die Gruppennummer für einen Eintrag in /etc/group aus. Soll aber ein Benutzer in mehr als einer Gruppe (abgesehen von der Standardgruppe) Mitglied sein, muss dieser in die entsprechende Gruppe eingetragen werden. Ebenfalls sollten Sie einen Eintrag in /etc/group machen, wenn Sie wollen, dass mehrere Mitglieder in einer Gruppe zusammengehören sollen. Solange Sie also nur wollen, dass ein Benutzer in seiner Standardgruppe bleibt, ist kein Eintrag in /etc/group notwendig (weil dieser ja in /etc/passwd vorhanden ist). Dieser Eintrag ist erst nötig, wenn ein Benutzer in weiteren Gruppen Mitglied sein soll. Hier ein Beispiel eines solchen Eintrags:

cdrom:x:24:tot,john,jack

Hier sehen Sie eine Gruppe mit dem Namen »CD-ROM« (ich denke, die Bedeutung spricht für sich) mit der GID 24. Zugriff auf das CD-ROM-Laufwerk hat gewöhnlich nur root. Das »x« zeigt an, dass ein Passwort in /etc/gshadow abgelegt ist. Im Beispiel befindet sich in /etc/gshadow ein »*«, womit für diese Gruppe also kein Passwort nötig ist. Allerdings bedeutet dies auch, dass nur Mitglieder dieser Gruppe Zugang zu ihr haben. Die Mitglieder dieser Gruppe hier lauten »tot«, »john« und »jack«.


Hinweis   Die Gruppendatei /etc/group wird in POSIX.1 als Gruppendatenbank (Group Database) bezeichnet.



Rheinwerk Computing

6.3.1 Die Datei /etc/group auswerten  downtop

Die einzelnen Felder der Datei /etc/group sind in der Struktur struct group enthalten und in der Headerdatei <grp.h> definiert.


Tabelle 6.3    Die Struktur group in der Headerdatei <grp.h>

Strukturvariable Bedeutung
char *gr_name Gruppenname
char *gr_passwd Verschlüsseltes Passwort (nicht POSIX.1)
gid_t gr_gid Gruppennummer (GID)
char **gr_mem Liste von Mitgliedern der Gruppe


Rheinwerk Computing

6.3.2 getgrnam und getgrgid – einzelne Einträge aus /etc/group abfragen  downtop

Mit den beiden Funktionen getgrnam() und getgruid() können Sie einen Eintrag der Datei /etc/group erfragen. Die Syntax:

#include <grp.h>
#include <sys/types.h>
struct group *getgrnam(const char *name);
struct group *getgrgid(gid_t gid);

Die Funktion getgrnam() liefert einen Zeiger auf eine Struktur group zurück, welche die Gruppeninformation zur Gruppe name enthält. Diese Information wird natürlich aus der Datei /etc/group gelesen.

Die Funktion getgrgid() liefert ebenfalls einen Zeiger auf eine Struktur group zurück, welche die Gruppeninformation zur Gruppe mit der Gruppennummer gid enthält. Auch diese Information wird aus der Datei /etc/group gelesen.

Beide Funktionen geben bei einem Fehler, oder wenn kein passender Eintrag in /etc/group gefunden wurde, NULL zurück. Konnte kein Speicher für die Struktur group reserviert werden, wird errno auf ENOMEM gesetzt.

Natürlich gilt auch hier, nach einem erneuten Funktionsaufruf wird der alte Inhalt der Struktur überschrieben.

Hierzu soll als Beispiel die Funktion getgrnam() verwendet werden, die alle Informationen zu einem bestimmten Gruppennamen (zweites Argument) zurückliefert.

/* groupname.c */
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <grp.h>
#include <string.h>
int main(int argc, char *argv[]) {
   struct group *group_ptr;
   int i=0;
   if( argc != 2 ) {
      fprintf(stderr, "Usage: %s Name\n", argv[0]);
      exit (EXIT_FAILURE);
   }
   group_ptr=getgrnam(argv[1]);
   if(group_ptr == NULL) {
      printf("Konnte nichts über %s ermitteln\n", argv[1]);
      exit (EXIT_FAILURE);
   }
   printf("Folgendes wurde zu %s ermittelt: \n", argv[1]);
   printf("Gruppenname             : %s\n",
      group_ptr->gr_name);
   printf("Passwort (verschlüsselt) : %s\n",
      group_ptr->gr_passwd);
   printf("Gruppennummer           : %d\n",
      group_ptr->gr_gid);
   printf("Mitglieder dieser Gruppe : \n");
   while( group_ptr->gr_mem[i] != NULL )
      printf("\tName       : %s\n", group_ptr->gr_mem[i++]);
   return EXIT_SUCCESS;
}

Das Programm bei der Ausführung:

you@host > ./groupname cdrom
Folgende Angaben wurden zu cdrom ermittelt:
Gruppenname              : cdrom
Passwort (verschlüsselt)  : x
Gruppennummer            : 24
Mitglieder dieser Gruppe :
        Name       : tot
        Name       : hal
you@host > ./groupname dialout
Folgende Angaben wurden zu dialout ermittelt:
Gruppenname              : dialout
Passwort (verschlüsselt)  : x
Gruppennummer            : 20
Mitglieder dieser Gruppe :
        Name       : tot
        Name       : cupsys

Rheinwerk Computing

6.3.3 getgrent, setgrent und endgrent – alle Einträge in /etc/group abfragen  toptop

Natürlich gibt es auch hier, wie schon bei den Dateien /etc/passwd und /etc/shadow, eine Funktion, um alle Einträge nacheinander aus der Gruppendatei /etc/group zu erfragen.

#include <grp.h>
#include <sys/types.h>
struct group *getgrent(void);
void setgrent(void);
void endgrent(void);

Alle diese Funktionen machen schon dasselbe wie die Gegenstücke für die /etc/passwd- und /etc/shadow-Datei, nur dass sich diese eben auf die Datei /etc/group beziehen.

Die Funktion getgrent() liefert einen Zeiger auf einen Struktur group zurück, welche die Gruppeninformationen aus /etc/group enthält. Beim ersten Aufruf wird der erste Eintrag der Datei /etc/group zurückgegeben. Bei jedem weiteren Aufruf erfolgt der jeweils nächste Eintrag. Mit setgrent() können Sie wieder den Dateizeiger auf den Anfang der Datei /etc/group zurücksetzen. Mit der Funktion endgrent() schließen Sie die Datei /etc/group wieder.

Ein Beispiel kann ich mir hierzu ersparen, da die Vorgehensweise immer dieselbe ist, wie dies jetzt schon mehrmals, nur eben mit anderen Funktionen und Dateien, demonstriert wurde.

 << zurück
  
  Zum Katalog
Zum Katalog: Linux-UNIX-Programmierung
Linux-UNIX-
Programmierung

bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Linux-Server






 Linux-Server


Zum Katalog: Das Komplettpaket LPIC-1 & LPIC-2






 Das Komplettpaket
 LPIC-1 & LPIC-2


Zum Katalog: Linux-Hochverfügbarkeit






 Linux-
 Hochverfügbarkeit


Zum Katalog: Shell-Programmierung






 Shell-
 Programmierung


Zum Katalog: Linux Handbuch






 Linux Handbuch


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
Info





Copyright © Rheinwerk Verlag GmbH 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de