Start · Sprachen · PHP · Referenz · ssh2_sftp_chmod

ssh2_sftp_chmod

Funktion

Ändert die Dateiberechtigungen einer Datei auf einem entfernten Server über SFTP.

seit PHP 0.9.0 Kategorie: http

Signatur

ssh2_sftp_chmod(resource $sftp, string $filename, int $mode): bool

Beschreibung

ssh2_sftp_chmod() setzt die Zugriffsrechte (Unix-Permissions) einer Datei oder eines Verzeichnisses auf einem entfernten SSH/SFTP-Server. Die Funktion ist das SFTP-Äquivalent der lokalen PHP-Funktion chmod() und erfordert eine aktive SFTP-Subsystem-Ressource, die zuvor mit ssh2_sftp() erzeugt wurde.

Der Parameter mode wird als oktale Ganzzahl übergeben, genau wie bei der lokalen chmod()-Funktion. Dabei ist darauf zu achten, dass oktal-Literale in PHP mit einer führenden 0 geschrieben werden (z. B. 0644 für Besitzer lesen/schreiben, Gruppe und andere nur lesen). Alternativ kann octdec() verwendet werden, um einen Oktaldezimal-String in einen Integer umzuwandeln.

Die Funktion ist besonders nützlich bei der automatisierten Verwaltung von Dateien auf Remote-Servern, etwa beim Deployment von Webanwendungen, wenn nach dem Hochladen von Dateien spezifische Berechtigungen gesetzt werden müssen (z. B. ausführbare Skripte oder schreibgeschützte Konfigurationsdateien).

Voraussetzung für die Nutzung ist die PECL-Erweiterung ssh2. Eine SSH-Verbindung muss mit ssh2_connect() aufgebaut und eine Authentifizierung (z. B. per ssh2_auth_password() oder ssh2_auth_pubkey_file()) durchgeführt worden sein.

Parameter

Name Typ Default Beschreibung
$sftp Pflicht resource Eine SFTP-Ressource, die zuvor durch den Aufruf von ssh2_sftp() über eine aktive SSH-Verbindung erzeugt wurde.
$filename Pflicht string Der absolute Pfad zur Datei oder zum Verzeichnis auf dem entfernten Server, deren Berechtigungen geändert werden sollen.
$mode Pflicht int Die neuen Berechtigungen als oktale Ganzzahl, z. B. 0644 oder 0755. Muss als Oktal-Literal oder mit octdec() übergeben werden.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück. Im Fehlerfall wird false zurückgegeben, etwa wenn die Datei nicht existiert, der Benutzer keine ausreichenden Rechte besitzt oder die Verbindung unterbrochen wurde.

Beispiele

Dateiberechtigung nach Upload auf 0644 setzen

<?php
// SSH-Verbindung aufbauen
$connection = ssh2_connect('example.com', 22);
if (!$connection) {
    die('Verbindung fehlgeschlagen.');
}

// Authentifizierung mit Benutzername und Passwort
if (!ssh2_auth_password($connection, 'benutzer', 'geheimespasswort')) {
    die('Authentifizierung fehlgeschlagen.');
}

// SFTP-Subsystem initialisieren
$sftp = ssh2_sftp($connection);
if (!$sftp) {
    die('SFTP-Initialisierung fehlgeschlagen.');
}

// Datei hochladen
$remotePath = '/var/www/html/config.php';
ssh2_scp_send($connection, '/local/path/config.php', $remotePath, 0644);

// Berechtigungen explizit auf 0644 setzen (Besitzer: lesen+schreiben, andere: nur lesen)
if (ssh2_sftp_chmod($sftp, $remotePath, 0644)) {
    echo "Berechtigungen erfolgreich gesetzt.";
} else {
    echo "Fehler beim Setzen der Berechtigungen.";
}
?>
Berechtigungen erfolgreich gesetzt.

Skriptdatei ausführbar machen (0755)

<?php
$connection = ssh2_connect('example.com', 22);
ssh2_auth_pubkey_file(
    $connection,
    'deploy',
    '/home/deploy/.ssh/id_rsa.pub',
    '/home/deploy/.ssh/id_rsa'
);

$sftp = ssh2_sftp($connection);

$scriptPath = '/var/www/scripts/deploy.sh';

// Shell-Skript ausführbar machen: Besitzer rwx, Gruppe und andere rx
if (ssh2_sftp_chmod($sftp, $scriptPath, 0755)) {
    echo "Skript ist jetzt ausführbar.";
} else {
    echo "Fehler: Berechtigung konnte nicht gesetzt werden.";
}
?>
Skript ist jetzt ausführbar.

// Wichtig · Fallstricke

Oktal-Schreibweise beachten: Ein häufiger Fehler ist die Übergabe von 644 statt 0644. Ohne die führende 0 wird die Zahl dezimal interpretiert, was zu falschen Berechtigungen führt. Immer Oktal-Literale (0644, 0755) oder octdec('644') verwenden.

Sicherheitshinweis: Zu permissive Berechtigungen (z. B. 0777) auf Webserver-Verzeichnissen können ein erhebliches Sicherheitsrisiko darstellen. Konfigurationsdateien mit sensiblen Daten sollten möglichst restriktiv (z. B. 0600 oder 0400) geschützt werden.

Erweiterung: ssh2_sftp_chmod() gehört zur PECL-Erweiterung ssh2, die nicht standardmäßig in PHP enthalten ist. Sie muss separat installiert werden (pecl install ssh2). Alternativ kann die Bibliothek phpseclib als Pure-PHP-Implementierung genutzt werden.