Tag: ownership

  • Uno script php per assegnare i giusti permessi a file e cartelle di WordPress

    Uno script php per assegnare i giusti permessi a file e cartelle di WordPress

    Qualche tempo fa, abbiamo pubblicato un post con uno script sh, che poteva essere lanciato da console Linux che consentiva di settare i permessi a file e cartelle utili al corretto funzionamento di WordPress.

    Un nostro lettore, ci ha segnalato che in alcuni hosting non è possibile lanciare script sh, quindi abbiamo deciso di pubblicare uno script php, che può essere lanciato anche visitandone il path.

    Nel test che abbiamo fatto il file si chiamava set_wordpress_permissions.php e pertanto abbiamo avuto la possibilità, accedendo alla pagina nomesito.com/set_wordpress_permissions.php, di settare i permessi giusti a tutta l’alberatura di file e cartelle di wordpress e in un pochi attimi.

    Lo script php

    <?php
    // Configurazione della directory root di WordPress
    $wp_root = "/percorso/al/tuo/sito"; // Cambia con il percorso della tua installazione di WordPress

    // Configurazione dell'utente e gruppo (facoltativo, solo su server Linux/Unix con funzione `chown`)
    $user = "www-data"; // Utente del web server (es: www-data, apache, nginx)
    $group = "www-data"; // Gruppo del web server

    /**
    * Funzione per impostare i permessi sui file e directory.
    *
    * @param string $path Percorso della directory o file
    * @param int $filePerm Permessi da impostare sui file (es: 0644)
    * @param int $dirPerm Permessi da impostare sulle directory (es: 0755)
    */
    function set_permissions($path, $filePerm = 0644, $dirPerm = 0755) {
    // Controlla se il percorso è valido
    if (!file_exists($path)) {
    echo "Percorso non trovato: $path\n";
    return;
    }

    // Scansiona ricorsivamente file e directory
    $iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS),
    RecursiveIteratorIterator::SELF_FIRST
    );

    foreach ($iterator as $item) {
    if ($item->isDir()) {
    chmod($item->getPathname(), $dirPerm); // Imposta permessi sulle directory
    } else {
    chmod($item->getPathname(), $filePerm); // Imposta permessi sui file
    }
    }

    // Imposta i permessi sulla directory principale
    chmod($path, $dirPerm);
    echo "Permessi impostati su $path\n";
    }

    /**
    * Funzione per impostare proprietario e gruppo (facoltativo).
    *
    * @param string $path Percorso della directory o file
    * @param string $user Nome utente
    * @param string $group Nome gruppo
    */
    function set_owner($path, $user, $group) {
    if (!function_exists('chown') || !function_exists('chgrp')) {
    echo "Funzioni chown/chgrp non disponibili su questo sistema.\n";
    return;
    }

    // Scansiona ricorsivamente file e directory
    $iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS),
    RecursiveIteratorIterator::SELF_FIRST
    );

    foreach ($iterator as $item) {
    chown($item->getPathname(), $user);
    chgrp($item->getPathname(), $group);
    }

    // Imposta proprietario e gruppo sulla directory principale
    chown($path, $user);
    chgrp($path, $group);
    echo "Proprietario impostato su $path a $user:$group\n";
    }

    // Imposta i permessi di base per il sito WordPress
    set_permissions($wp_root, 0644, 0755);

    // Imposta permessi sicuri per wp-config.php
    $wp_config = $wp_root . "/wp-config.php";
    if (file_exists($wp_config)) {
    chmod($wp_config, 0600);
    echo "Permessi sicuri impostati per wp-config.php\n";
    }

    // Imposta permessi speciali per wp-content/uploads
    $uploads_dir = $wp_root . "/wp-content/uploads";
    if (is_dir($uploads_dir)) {
    set_permissions($uploads_dir, 0664, 0775); // Scrivibile da utente e gruppo
    }

    // Imposta proprietario e gruppo (facoltativo)
    set_owner($wp_root, $user, $group);

    echo "Permessi configurati con successo per WordPress.\n";
  • Uno script sh per settare i permessi di file e cartelle di wordpress

    Uno script sh per settare i permessi di file e cartelle di wordpress

    Lo script segue le pratiche consigliate per i permessi di WordPress:

    • File: Permessi a 644 (lettura/scrittura per il proprietario, lettura per altri).
    • Directory: Permessi a 755 (lettura/esecuzione per tutti, scrittura solo per il proprietario).
    • File sensibili: Come wp-config.php, impostati a 600 (solo il proprietario può leggere/scrivere).
    • Utente/Group: Facoltativamente, puoi assegnare un utente o un gruppo specifico.

    #!/bin/bash

    # Configura il percorso root di WordPress
    WP_ROOT="/percorso/al/tuo/sito" # Cambia con il percorso corretto

    # Configura il proprietario (user e group) - modifica se necessario
    USER="www-data" # Utente web server (es: www-data, apache, nginx)
    GROUP="www-data" # Gruppo web server

    # Controlla se eseguito come root
    if [ "$EUID" -ne 0 ]; then
    echo "Per favore esegui lo script come root o con sudo."
    exit 1
    fi

    echo "Impostazione dei permessi per il sito WordPress nella directory: $WP_ROOT"

    # Imposta il proprietario per tutti i file e directory
    echo "Imposto il proprietario a $USER:$GROUP..."
    chown -R $USER:$GROUP "$WP_ROOT"

    # Imposta i permessi per le directory
    echo "Imposto i permessi delle directory a 755..."
    find "$WP_ROOT" -type d -exec chmod 755 {} \;

    # Imposta i permessi per i file
    echo "Imposto i permessi dei file a 644..."
    find "$WP_ROOT" -type f -exec chmod 644 {} \;

    # Imposta i permessi sicuri per wp-config.php
    if [ -f "$WP_ROOT/wp-config.php" ]; then
    echo "Imposto permessi sicuri per wp-config.php (600)..."
    chmod 600 "$WP_ROOT/wp-config.php"
    fi

    # Permessi speciali per wp-content/uploads (scrivibili dal server)
    UPLOADS_DIR="$WP_ROOT/wp-content/uploads"
    if [ -d "$UPLOADS_DIR" ]; then
    echo "Imposto permessi per la directory uploads (775)..."
    chmod -R 775 "$UPLOADS_DIR"
    echo "Rendo uploads scrivibile da utente e gruppo..."
    chown -R $USER:$GROUP "$UPLOADS_DIR"
    fi

    echo "Permessi impostati correttamente per WordPress!"

    # Finitura
    exit 0

    Come usare lo script:

    1. Crea lo script:
      • Salva il codice in un file chiamato, ad esempio, set-wordpress-permissions.sh.
    2. Modifica le variabili:
      • Cambia WP_ROOT con il percorso della root del tuo sito WordPress.
      • Cambia USER e GROUP con l’utente e il gruppo utilizzati dal server web (es. www-data per Apache/Nginx su Ubuntu).
    3. Rendi lo script eseguibile:
      chmod +x set-wordpress-permissions.sh
    4. Esegui lo script con privilegi di amministratore:
      sudo ./set-wordpress-permissions.sh
    5. Verifica i permessi:
      Puoi controllare che i permessi siano stati applicati correttamente con
      ls -l /percorso/al/tuo/sito

    Spiegazione dei permessi:

    • 644 (file): Lettura/scrittura per il proprietario, lettura per il gruppo e altri.
    • 755 (directory): Lettura/esecuzione per tutti, scrittura per il proprietario.
    • 600 (wp-config.php): Lettura/scrittura solo per il proprietario.
    • 775 (uploads): Lettura/scrittura per proprietario e gruppo, lettura per altri.

    Nota:

    • Lo script si assume che il server web (Apache/Nginx) utilizzi l’utente/gruppo specificato (www-data).
    • Se stai utilizzando configurazioni diverse, assicurati di modificare di conseguenza i permessi o il proprietario.
    • Avrai bisogno di un’utenza con abbastanza privilegi per eseguire il file sh sulla macchina dove gira il tuo wordpress.