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.

Come faccio a eliminare massivamente gli utenti di wordpress che hanno una certa email?

Questo script SH viene in nostro soccorso:

#!/bin/bash

# usalo per RIMUOVERE UTENTI CON UNA CERTA EMAIL @dominio-da-eliminare.com

# Trova gli utenti con email che contengono "@dominio-da-eliminare.com" e cancella ciascuno di essi
wp user list --field=ID,user_email --allow-root | while read -r line; do
user_id=$(echo "$line" | awk '{print $1}')
user_email=$(echo "$line" | awk '{print $2}')

# Controlla se l'email contiene "@dominio-da-eliminare.com"
if [[ "$user_email" == *"@dominio-da-eliminare.com"* ]]; then
echo "Eliminazione utente con ID: $user_id e email: $user_email"
# Elimina l'utente senza chiedere conferma
wp user delete "$user_id" --yes --allow-root
fi
done

Teniamo presente che lo script si può personalizzare per ottenere un elenco di utenti corrispondente ad altre caratteristiche, che possono provenire anche da comandi cli personalizzati.

Inoltre, per coloro che hanno una bella banca dati e che vogliono lasciare il processo attivo, senza necessità di stare collegato contestualmente via console (ssh), che il comando può essere lanciato con screen.

Spiegazione dello script

  1. Elenco ID degli utenti: il comando wp user list --field=ID --allow-root restituisce una lista di ID di tutti gli utenti.
  2. Ciclo sugli ID degli utenti: usa while read -r user_id per iterare su ciascun ID utente.
  3. Controllo dell’email: per ogni utente, il comando wp user get "$user_id" --field=user_email --allow-root recupera l’email dell’utente. Successivamente, viene eseguito un controllo per verificare se l’email contiene la stringa "@pippo.".
  4. Eliminazione dell’utente: se l’email contiene “@pippo.”, l’utente viene eliminato con wp user delete "$user_id" --reassign=0 --allow-root. L’opzione --reassign=0 assicura che i contenuti creati da questi utenti siano assegnati all’utente con ID 0 (tipicamente “Admin”).

ATTENZIONE

  • Back up: Assicurati di effettuare un backup del database prima di eseguire questo script, per evitare di perdere dati accidentalmente.
  • Log delle eliminazioni: L’output del comando echo ti aiuterà a monitorare quali utenti vengono eliminati.
  • Lo script utilizza la WP-CLI.

Spero di essere stato utile.

Backup di tutti i database mysql

Talvolta capita di dover cambiare pc o semplicemente cambiare versione del proprio virtual web server locale preferito. Sia esso Xamp, Mamp o Wamp il concetto è sempre lo stesso. Dobbiamo trasportare i database da un posto ad un altro.

Problema

Ho più database sul mio mysql (locale o remoto) di cui devo ottenere un backup. Il comando che segue ci consente di effettuare questa operazione da linea di comando è il seguente:

mysqldump -u NOME_UTENTE -p NOME_DATABASE > /percorso/dove/salvare/ildatabase.sql

Come si può facilmente notare in questo modo sarà creato un dump del singolo database mysql in un file .sql.

Tuttavia talvolta è necessario esportare tutti i database presenti su mysql. A tale scopo si rende indispensabile creare uno script.

Soluzione

È possibile creare uno script che con pochi comandi adempia al compito desiderato: esportare tutti i database mysql con uno script.

Lo script verrà inserito in un file con estensione .sh, che è possibile eseguire sia su Windows, sia ovviamente su Linux e Mac.

Su Windows è possibile farlo con la bash di git o cygwin, in linux eseguendo da riga di comando

sh nomescript.sh

oppure

bash nomescript.sh

a seconda dell’interprete che si desidera utilizzare.

Ma veniamo alla soluzione riportata direttamente dal blog di Daniel Dvorkin:

#!/bin/bash
 
USER="DATABASE_USERNAME"
PASSWORD="DATABASE_PASSWORD"
OUTPUT="/path/to/backup/folder/"
 
rm "$OUTPUT/*gz" > /dev/null 2>&1
 
databases=`mysql --user=$USER --password=$PASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`
 
for db in $databases; do
    if [[ "$db" != "information_schema" ]] && [[ "$db" != _* ]] ; then
        echo "Dumping database: $db"
        mysqldump --force --opt --user=$USER --password=$PASSWORD --databases $db > $OUTPUT/`date +%Y%m%d`.$db.sql
        gzip $OUTPUT/`date +%Y%m%d`.$db.sql
    fi
done

Una volta inserito in un file di testo, con estensione “sh”, lanciando questo script consentirà di creare un file tar.gz contentente un file .sql per ciascun database presente nel proprio mysql.

È possibile ottenere file zippati con un altro sistema o non compressi affatto semplicemente intervenendo sulla riga dello script che comincia con “gzip” (cancellandola ad esempio si otterrà un file .sql non compresso).

Si noti che la cartella di destinazione deve esistere prima di lanciare lo script, che altrimenti potrebbe fallire miseramente.

Ho testato la soluzione e devo dire che mi è stata molto utile in quanto pratica e veloce.

Ora devo cercare/scrivere uno script per caricare tutti i database siffatti da una cartella ai database veri e propri, ma questo sarà un’altro post.