dalsi predchozi obsah
Dalsi: Prostredi procesu Predchozi: Soubory a adresare

  Systemove soubory a informace





Uvod

V unixu je nekolik zakladnich souboru nutnych pro beh systemu: soubor hesel /etc/passwd a soubor skupin /etc/group. Tyto soubory jsou casto pouzivany ostatnimi programy. Napr. soubor hesel je pouzit pri kazdem prihlaseni uzivatele nebo pri spusteni prikazu ls -l.



Soubor obsahujici hesla

POSIX.1 definuje soubor nazyvany databaze uzivatelu, ktery obsahuje nasledujici informace -- viz tab. 11

 

Popis struct passwd POSIX.1
uzivatelske jmeno char *pw_name o
sifrovane heslo char *pw_passwd
user ID uid_t pw_uid o
group ID gid_t pw_gid o
komentar char *pw_gecos
pocatecni pracovni adresar char *pw_dir o
pocatecni shell (ci jakykoli program) char *pw_shell o
Tabulka 11: Polozky v souboru /etc/passwd

Historicky jsou tyto informace ulozeny v ASCII souboru /etc/passwd. Priklad tohoto souboru muzete nalezt v kap. "Prihlaseni do systemu".

POSIX.1 definuje pouze dve operace nad temito zaznamy. Prvni funkce vyhleda polozku podle UID a druha podle uzivatelskeho jmena.

#include <sys/types.h>
#include <pwd.h>
struct passwd *getpwuid (uid_t uid);
struct passwd *getpwnam (const char name);
Obe vraci: ukazatel kdyz OK, NULL pri chybe

Tyto funkce vsak vrati jen jeden zaznam. Pro prochazeni celeho souboru slouzi nasledujici funkce.

#include <sys/types.h>
#include <pwd.h>
void setpwent(void);
void endpwent(void);
struct passwd *getpwent (void);
Vraci: ukazatel kdyz OK, NULL pri chybe

getpwent vrati dalsi polozku v poradi a ostatni funkce slouzi jen k otevreni a uzavreni souboru. Vse je nejlepe patrne na prikladu.

Priklad:

#include <sys/types.h>
#include <pwd.h>
#include <stddef.h>
#include <string.h>

struct passwd *
getpwnam(const char *name)
{
    struct passwd  *ptr;

    setpwent();
    while ( (ptr = getpwent()) != NULL) {
        if (strcmp(name, ptr->pw_name) == 0)
            break;        /* found a match */
    }
    endpwent();
    return(ptr);    /* ptr is NULL if no match found */
}



Soubor se skupinami

Informace o skupinach lze nalezt v souboru se skupinami, ktery POSIX nazyva databaze skupin. Tento soubor obsahuje polozky vypsane v tabulce 12.

 

Popis struct group POSIX.1
jmeno skupiny char *gr_name o
sifrovane heslo char *gr_passwd
group ID gid_t gr_gid o
pole ukazatelu na jmena uzivatelu char **gr_mem o
Tabulka 12: Polozky v souboru /etc/group

Pole uzivatelu je ukonceno NULL. V tomto souboru opet muzeme vyhledavat pomoci dvojice funkci.

#include <sys/types.h>
#include <grp.h>
struct group *getgrgid (gid_t gid);
struct group *getgrnam (const char name);
Obe vraci: ukazatel kdyz OK, NULL pri chybe

Tyto funkce vsak vrati jen jeden zaznam. Pro prochazeni celeho souboru slouzi nasledujici funkce.

#include <sys/types.h>
#include <grp.h>
void setgrent(void);
void endgrent(void);
struct group *getgrent (void);
Vraci: ukazatel kdyz OK, NULL pri chybe



Identifikace systemu

POSIX.1 poskytuje funkce pro identifikaci hostitelskeho pocitace a operacniho systemu:

#include <sys/utsname.h>
int uname (struct utsname *name);
Vraci: nezaporne cislo kdyz OK, -1 pri chybe

Funkce vyplni danou strukturu. Ta ma nasledujici tvar:

struct utsname {
  char  sysname[9];    /* nazev operacniho systemu */
  char  nodename[9];   /* nazev uzlu */
  char  release[9];    /* release operacniho systemu */
  char  version[9];    /* verze release */
  char  machine[9];    /* nazev typu hardware */
};



Cviceni

  1. Pomoci funkce crypt(3) napiste program, ktery zjisti, jake heslo bylo pouzito pro uzivatele root v prikladu souboru /etc/passwd v kapitole ??, vite-li, ze heslo je jednoznakove.


dalsi predchozi obsah
Dalsi: Prostredi procesu Predchozi: Soubory a adresare

Ladislav Dobias
Sat Nov 1 15:38:32 MET 1997