Server Management

PHP und Linux Benutzerkontingentverwaltung

Spread the love

Die effiziente Verwaltung des Benutzer-Festplattenspeichers ist entscheidend für eine gesunde Serverumgebung. Dieser Artikel untersucht verschiedene PHP-basierte Methoden zum Abrufen von Benutzer-Quoteninformationen auf einem Linux-System, die auf verschiedene Szenarien und Präferenzen zugeschnitten sind. Wir behandeln Techniken, die von der Nutzung standardmäßiger Linux-Befehle über die Verwendung von Datenbanklösungen bis hin zu IMAP-Funktionen reichen, wobei der Schwerpunkt auf einer sicheren und robusten Implementierung liegt.

Inhaltsverzeichnis

Verwendung von repquota für systemweite Quotenberichte

Der Befehl repquota -a liefert einen umfassenden Bericht über Benutzerquoten auf Ihrem Dateisystem. PHP kann diesen Befehl mit shell_exec() ausführen und die resultierende Ausgabe verarbeiten. Wichtiger Sicherheitshinweis: Geben Sie Benutzereingaben immer vor der Einbindung in Shell-Befehle frei, um Command-Injection-Schwachstellen zu vermeiden.


&1'); // 2>&1 leitet stderr nach stdout zur besseren Fehlerbehandlung um
if ($output === null || strpos($output, 'repquota: ') === 0) { //Prüfung auf Fehler bei der repquota-Ausführung
    error_log("Fehler bei der Ausführung von repquota: " . $output); 
    echo "Fehler beim Abrufen der Quoteninformationen.";
    exit(1);
}

$lines = explode("n", trim($output));
$quotas = [];
foreach ($lines as $line) {
    if (strpos($line, "/") !== false) { //Überspringen von Kopfzeilen
        continue;
    }
    $parts = preg_split('/s+/', $line); //preg_split für robuste Leerzeichenbehandlung verwenden
    if(count($parts) > 5){ //Sicherstellen, dass genügend Daten vorhanden sind
        $username = $parts[0];
        $used = $parts[1];
        $limit = $parts[2];
        $quotas[$username] = ['used' => $used, 'limit' => $limit];
    }
}


print_r($quotas); //Ergebnisse anzeigen
?>

Schätzung der Nutzung mit du

Der Befehl du -sh liefert eine Zusammenfassung der Festplattennutzung für ein gegebenes Verzeichnis. Obwohl es sich nicht um einen direkten Quotenabruf handelt, ist er nützlich, um den von einem Benutzer-Home-Verzeichnis verbrauchten Festplattenspeicher zu schätzen. Denken Sie daran, potenzielle Fehler, wie z. B. das Nichtvorhandensein des Verzeichnisses, zu behandeln.


&1");
    if ($output === null || strpos($output, "du: cannot access") === 0) {
        return false; //Fehlerbehandlung
    }
    list($size, $path) = explode("t", trim($output));
    return $size;
}

$username = "user1";
$homeDir = "/home/{$username}";
$size = getDirectorySize($homeDir);
if ($size !== false) {
    echo "Festplattengröße des Home-Verzeichnisses von {$username}: {$size}n";
} else {
    echo "Fehler beim Abrufen der Verzeichnisgröße für {$username}n";
}
?>

Abrufen von Quoten aus einer MySQL-Datenbank

Wenn Sie eine MySQL-Datenbank zur Verfolgung von Benutzerquoten verwenden, bietet die MySQLi-Erweiterung von PHP eine bequeme Möglichkeit, diese Informationen abzurufen. Verwenden Sie parametrisierte Abfragen, um SQL-Injection zu verhindern.


connect_errno) {
    die("Verbindung fehlgeschlagen: " . $mysqli->connect_error);
}

$stmt = $mysqli->prepare("SELECT quota FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$username = "user1";
$stmt->execute();
$stmt->bind_result($quota);
$stmt->fetch();
$stmt->close();
$mysqli->close();

echo "Quote von {$username}: " . $quota . "n";
?>

Zugriff auf IMAP-Postfachquoten

Die Funktion imap_get_quota() ist speziell zum Abrufen von Postfachquoten für IMAP-Server konzipiert. Dies ist relevant, wenn Sie E-Mail-Konten und deren Speichergrenzen verwalten.


usage . " Bytes von " . $quota->limit . " Bytesn";
    imap_close($imapStream);
} else {
    echo "Verbindung zum IMAP-Server fehlgeschlagen: " . imap_last_error() . "n";
}
?>

Planung von Quotenprüfungen mit Cron

Für die automatisierte Quotenüberwachung können Cron-Jobs verwendet werden. Ein Shell-Skript kann repquota ausführen, und ein PHP-Skript kann die Ausgabe verarbeiten und Berichte oder Warnungen erstellen. Dies ermöglicht regelmäßige Prüfungen ohne ständige Ausführung von PHP-Prozessen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert