Start · Sprachen · PHP · Referenz · posix_getpwuid

posix_getpwuid

Funktion

Gibt ein Array mit Informationen über den Benutzer zurück, dessen numerische Benutzer-ID (UID) übergeben wurde.

seit PHP 4.0.0 Kategorie: misc

Signatur

posix_getpwuid(int $user_id): array|false

Beschreibung

posix_getpwuid() liest den Benutzer-Datensatz aus der Systemdatenbank (typischerweise /etc/passwd oder einem verknüpften Verzeichnisdienst wie LDAP/NIS) und gibt ihn als assoziatives Array zurück. Die Funktion ist äquivalent zur C-Funktion getpwuid() und steht nur auf POSIX-kompatiblen Betriebssystemen (Linux, macOS, BSD) zur Verfügung.

Das zurückgegebene Array enthält die Schlüssel name (Benutzername), passwd (Passwort-Hash, oft x), uid (numerische Benutzer-ID), gid (primäre Gruppen-ID), gecos (zusätzliche Informationen wie Klartextname), dir (Home-Verzeichnis) und shell (Standard-Shell).

Typische Einsatzgebiete sind Berechtigungsprüfungen, das Auflösen von UIDs zu lesbaren Benutzernamen in Protokolldateien oder das Ermitteln von Heimverzeichnissen und Shells in Verwaltungsskripten. Zusammen mit posix_getuid() oder posix_geteuid() lässt sich der aktuell ausführende Benutzer ermitteln und auflösen.

Parameter

Name Typ Default Beschreibung
$user_id Pflicht int Die numerische Benutzer-ID (UID), zu der die Benutzerinformationen abgerufen werden sollen. Üblicherweise eine nicht-negative ganze Zahl, z. B. 0 für root.

Rückgabewert

Typ
array|false
Beschreibung
Gibt bei Erfolg ein assoziatives Array mit den Schlüsseln name, passwd, uid, gid, gecos, dir und shell zurück. Existiert kein Benutzer mit der angegebenen UID oder tritt ein Fehler auf, wird false zurückgegeben.

Beispiele

Aktuelle Benutzerinformationen ermitteln

<?php
// UID des aktuell ausführenden Prozesses ermitteln
$uid = posix_getuid();
$info = posix_getpwuid($uid);

if ($info !== false) {
    echo 'Benutzername:    ' . $info['name']  . PHP_EOL;
    echo 'UID:             ' . $info['uid']   . PHP_EOL;
    echo 'Primäre GID:     ' . $info['gid']   . PHP_EOL;
    echo 'Home-Verzeichnis:' . $info['dir']   . PHP_EOL;
    echo 'Shell:           ' . $info['shell'] . PHP_EOL;
} else {
    echo 'Benutzer nicht gefunden.';
}
Benutzername: www-data UID: 33 Primäre GID: 33 Home-Verzeichnis:/var/www Shell: /usr/sbin/nologin

UID aus Datei-Metadaten in Benutzernamen umwandeln

<?php
$datei = '/etc/hostname';
$stat  = stat($datei);

if ($stat !== false) {
    $uid  = $stat['uid'];
    $info = posix_getpwuid($uid);

    if ($info !== false) {
        printf("Die Datei '%s' gehört dem Benutzer '%s' (UID %d).\n",
            $datei,
            $info['name'],
            $info['uid']
        );
    } else {
        echo "Kein Benutzer zur UID {$uid} gefunden.\n";
    }
}
Die Datei '/etc/hostname' gehört dem Benutzer 'root' (UID 0).

// Wichtig · Fallstricke

Plattformabhängigkeit: posix_getpwuid() ist nur auf POSIX-kompatiblen Systemen verfügbar. Unter Windows steht die Funktion nicht zur Verfügung; ein Aufruf führt zu einem fatalen Fehler. Das PHP-Modul posix muss aktiviert sein (Standard bei den meisten Linux-Installationen).

Sicherheit: Die Funktion liest lediglich öffentlich zugängliche Benutzerinformationen; sensible Passwort-Hashes befinden sich in der Regel in /etc/shadow und sind über diesen Weg nicht zugänglich. Vertraue dem Feld passwd nicht als Prüfmerkmal.

Rückgabewert prüfen: Bei ungültigen oder sehr großen UIDs gibt die Funktion false zurück. Prüfe den Rückgabewert immer mit === false, da ein Array mit UID 0 ansonsten fälschlicherweise als falsy interpretiert werden könnte.