introduzione
Data la propensione di OpenBSD per la sicurezza, ha senso alimentare il tuo sito Web WordPress con esso, soprattutto perché WordPress e PHP tendono a spostare obiettivi per i kiddie degli script. Poiché httpd di OpenBSD è progettato principalmente per servire pagine statiche, le operazioni POST sono riservate ai processi fastcgi e slowcgi. Ciò rende più difficile per un attore canaglia interrompere potenzialmente il processo del server web e ottenere l'accesso al tuo server. Le operazioni POST vengono convogliate al processo fastcgi e utilizzano un interprete esterno. Questo articolo discuterà non solo della configurazione del sito WordPress, ma di alcune tecniche di manutenzione di base e di come eseguire il backup e il ripristino del sito e del suo database. Ovunque tu veda example.com
come dominio, ti preghiamo di sostituirlo con il tuo dominio.
Configurazione iniziale
Se non lo hai già fatto, dovrai creare un /etc/doas.conf
file. Il comando doas è la facile sostituzione di OpenBSD per sudo. Per comodità, ho aggiunto l'opzione nopass in modo da non dover digitare nuovamente la password quando si utilizza doas. Se preferisci non avere questo, ometti semplicemente nopass.
su -
echo "permit nopass keepenv :wheel" > /etc/doas.conf
A seconda di come OpenBSD è stato impacchettato per la distribuzione, a volte il gestore pacchetti potrebbe non avere un repository configurato. Per configurare il repository ufficiale OpenBSD, dobbiamo creare il /etc/installurl
file.
doas su
echo "https://cdn.openbsd.org/pub/OpenBSD" > /etc/installurl
exit
Ora dobbiamo aggiungere PHP e alcuni moduli extra di cui WordPress avrà bisogno per gestire cose come immagini e crittografia. Quando richiesto, scegliere di installare il pacchetto più recente di PHP. Una cosa che devi fare è copiare i file ini del modulo dalla directory di esempio a quella principale. Questo deve essere fatto per abilitare i moduli PHP aggiuntivi.
doas pkg_add -r mariadb-client mariadb-server php php-curl php-mysqli php-zip pecl73-mcrypt pecl73-imagick wget
doas cp /etc/php-7.3.sample/* /etc/php-7.3/.
Ottieni crittografiamo i certificati
Nel mondo di oggi, i siti Web devono essere gestiti tramite SSL o essere affiancati dai motori di ricerca. Fortunatamente, OpenBSD ha una fantastica applicazione chiamata acme-client. Il client acme genererà automaticamente una nuova chiave privata e richiederà un nuovo certificato pienamente valido. Il client acme dipende dalla presenza di un server Web, quindi sarà necessario creare una rapida definizione predefinita del server.
Con il tuo editor preferito, crea /etc/httpd.conf
. In seguito aggiungeremo le altre definizioni del server al file. Per ora questo sarà sufficiente affinché acme-client funzioni correttamente.
prefork 5
types { include "/usr/share/misc/mime.types" }
server "default" {
listen on egress port 80
root "/htdocs"
directory index "index.html"
location "/.well-known/acme-challenge/*" {
request strip 2
root "/acme"
}
}
Utilizzando anche il tuo editor preferito, crea /etc/acme-client.conf
.
authority letsencrypt {
api url "https://acme-v02.api.letsencrypt.org/directory"
account key "/etc/acme/letsencrypt-privkey.pem"
}
authority letsencrypt-staging {
api url "https://acme-staging-v02.api.letsencrypt.org/directory"
account key "/etc/acme/letsencrypt-staging-privkey.pem"
}
domain example.com {
alternative names { www.example.com }
domain key "/etc/ssl/private/example.com.key"
domain full chain certificate "/etc/ssl/example.com.crt"
sign with letsencrypt
}
Ora dobbiamo abilitare e avviare httpd. Una volta fatto questo, possiamo eseguire acme-client e attendere che ottenga il nostro nuovo certificato. Dopo averlo fatto, aggiungeremo un cron job per richiederne automaticamente uno nuovo ogni 7 giorni, quindi non dobbiamo preoccuparci della scadenza.
doas rcctl enable httpd
doas rcctl start httpd
doas acme-client -v example.com
Ora creiamo il processo cron. Aggiungi questa riga sotto l'ultima voce. In questo caso, stiamo dicendo ad acme-client di richiedere il nuovo certificato all'1: 00 ogni sabato.
doas crontab -e
0 1 * * 6 acme-client -F example.com && rcctl reload httpd
Configurazione di HTTPD per WordPress
Ora è il momento di installare httpd per WordPress. Invece di inserire direttamente la definizione del nostro sito Web, la /etc/httpd.conf
inseriremo in un file separato chiamato /etc/httpd.conf.example.com
e lo includeremo nel file di configurazione principale. In genere è una buona pratica separare i due, mantenendo le definizioni a livello di sito nel file di configurazione principale e le impostazioni specifiche del dominio in uno diverso.
Aggiungi la seguente riga alla fine del /etc/httpd.conf
file:
include "/etc/httpd.conf.example.com"
Ora usando il tuo editor preferito, crea il tuo /etc/httpd.conf.example.com
. Per comodità, creeremo file di registro separati per il tuo dominio. Ciò semplifica la ricerca di potenziali problemi con il tuo sito.
server "example.com" {
listen on egress port 80
alias "www.example.com"
# Automatically redirect to SSL
block return 302 "https://$SERVER_NAME$REQUEST_URI"
log {
access "access-example.com"
error "error-example.com"
}
}
server "example.com" {
listen on egress tls port 443
alias "www.example.com"
root "/htdocs/wordpress"
directory index "index.php"
log {
access "access-example.com"
error "error-example.com"
}
tcp { nodelay, backlog 10 }
tls {
certificate "/etc/ssl/example.com.crt"
key "/etc/ssl/private/example.com.key"
}
hsts {
# max-age value is the number of seconds in 1 year
max-age 31556952
preload
subdomains
}
location "/.well-known/acme-challenge/*" {
root "/acme"
request strip 2
}
location "/posts/*" {
fastcgi {
param SCRIPT_FILENAME \
"/htdocs/wordpress/index.php"
socket "/run/php-fpm.sock"
}
}
location "/page/*" {
fastcgi {
param SCRIPT_FILENAME \
"/htdocs/wordpress/index.php"
socket "/run/php-fpm.sock"
}
}
location "/feed/*" {
fastcgi {
param SCRIPT_FILENAME \
"/htdocs/wordpress/index.php"
socket "/run/php-fpm.sock"
}
}
location "/comments/feed/*" {
fastcgi {
param SCRIPT_FILENAME \
"htdocs/wordpress/index.php"
socket "/run/php-fpm.sock"
}
}
location "/wp-json/*" {
fastcgi {
param SCRIPT_FILENAME \
"htdocs/wordpress/index.php"
socket "/run/php-fpm.sock"
}
}
location "/wp-login.php*" {
authenticate "WordPress" with "/htdocs/htpasswd"
fastcgi socket "/run/php-fpm.sock"
}
location "*.php*" {
fastcgi socket "/run/php-fpm.sock"
}
}
Per una maggiore sicurezza, implementeremo un prompt aggiuntivo per un nome utente e una password durante l'accesso al sito di amministrazione di WordPress. Poiché i kiddie degli script amano provare ripetutamente e forzare l'accesso di WordPress, creiamo un accesso aggiuntivo a livello di server Web. In genere, ottengono circa 5 ipotesi prima che WordPress emetta un errore 401 non autorizzato.
doas su
cd /var/www/htdocs
doas htpasswd htpasswd <user>
doas chown www:www htpasswd
doas chmod 0640 htpasswd
doas rcctl reload httpd
Dobbiamo apportare una modifica a php in modo che l'installazione di WordPress possa inviare e-mail. WordPress e alcuni plugin si basano sulla capacità di inviare e-mail di notifica di aggiornamenti, avvisi e modifiche. L'incapacità di inviare e-mail può interrompere alcune funzionalità di WordPress. Poiché httpd funziona in ambiente chroot, dobbiamo dire a php come inviare e-mail. Inoltre, dobbiamo fare alcune tweek di performance a php-fpm.
Cerca la sendmail_path
linea /etc/php-7.3.ini
e apporta le seguenti modifiche:
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
; sendmail_path =
sendmail_path = /bin/femail -t -i
Cerca le seguenti righe /etc/php-fpm.conf
e modificale come segue:
pm.start_servers = 5
pm.min_spare_servers = 1
pm.max_spare_servers = 6
Il prossimo passo è abilitare e avviare php-fpm.
doas rcctl enable php73_fpm
doas rcctl start php73_fpm
MariaDB è un fork sostitutivo drop-in di MySQL. Dobbiamo fare alcuni lavori di configurazione iniziale e preparazione del database per WordPress.
Prima di poter utilizzare MariaDB in modo efficace, dobbiamo consentire al demone mysql di utilizzare più risorse rispetto al valore predefinito. Per fare ciò, apporta le seguenti modifiche /etc/login.conf
aggiungendo questa voce in fondo.
mysqld:\
:openfiles-cur=1024:\
:openfiles-max=2048:\
:tc=daemon:
Dobbiamo fare alcune modifiche nel file di configurazione MariaDB, /etc/my.cnf
. Consentendo al client mysql e al server di comunicare tramite socket di dominio UNIX anziché TCP, l'utilizzo della memoria del server può essere ridotto. Non è necessario apportare tutte le modifiche suggerite di seguito. I due importanti da cambiare sono la socket
linea e commentare la bind-address
linea. Questo sposta il socket all'interno /var/www
dell'ambiente chroot in modo che WordPress possa connettersi al database. Commentando la bind-address
linea, impediamo a MariaDB di ascoltare su una porta TCP.
[client-server]
socket=/var/www/var/run/mysql/mysql.sock
#port=3306
# This will be passed to all MariaDB clients
[client]
#password=my_password
# The MariaDB server
[mysqld]
# To listen to all IPv4 network addresses, use "bind-address = 0.0.0.0"
#bind-address=127.0.0.1
# Directory where you want to put your data
#data=/var/mysql
# This is the prefix name to be used for all log, error and replication files
#log-basename=mysqld
# Logging
#log-bin=/var/mysql/mariadb-bin
#max_binlog_size=100M
#binlog_format=row
#expire_logs_days = 7
#general-log
#slow_query_log
query_cache_type = 1
query_cache_limit = 1M
query_cache_size = 16M
Ora dobbiamo eseguire il binario di installazione di MariaDB e abilitare e avviare MariaDB. Questa procedura imposterà una password di root e, facoltativamente, eliminerà il database di test. È una buona idea seguire tutti i suggerimenti nella fase di installazione sicura.
doas mysql_install_db
doas rcctl enable mysqld
doas rcctl start mysqld
doas mysql_secure_installation
Creare il database WordPress e l'utente del database. Ricorda di sostituire <wp_user>
con il nome utente del database scelto e <password>
con una password complessa di tua scelta.
mysql -u root -p
CREATE DATABASE wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO '<wp_user>'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;
EXIT
WordPress non ha una porta ufficiale OpenBSD da un po 'di tempo perché praticamente funziona subito. Scarica, estrai e sposta la cartella di installazione di WordPress.
cd /tmp
wget https://wordpress.org/latest.tar.gz
tar xvfz latest.tar.gz
doas mv wordpress /var/www/htdocs/.
doas chown -R www:www /var/www/htdocs/wordpress
doas chmod 0755 /var/www/htdocs/wordpress
cd /var/www/htdocs/wordpress/
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
Dobbiamo copiare /etc/resolv.conf
e /etc/hosts
in una directory che creeremo chiamata /var/www/etc
. Questo in modo che WordPress possa raggiungere con successo il mercato. Ne avrai bisogno per scaricare plugin e temi tramite il sito di amministrazione di WordPress. È anche importante che il plug-in Jet Pack funzioni correttamente.
doas mkdir /var/www/etc
doas cp /etc/hosts /var/www/etc/.
doas cp /etc/resolv.conf /var/www/etc/.
Da qui, accedi al tuo sito Web WordPress utilizzando https tramite l'URL specificato nella definizione del server Web. Se tutto funziona correttamente, dovresti vedere l'installazione guidata di WordPress. Quando si arriva all'opzione per specificare un server di database, è necessario utilizzarelocalhost:/var/run/mysql/mysql.sock
Una volta installato WordPress, è il momento di impostare i permalink in modo che appaiano più SEO friendly. Dalla schermata di amministrazione di WordPress, vai a Settings -> Permalinks
. Fai clic su Struttura personalizzata e digita /posts/%postname%
. Dopo aver apportato questa modifica, fai clic sul pulsante Salva modifiche. Ora hai collegamenti molto più belli. Ad esempio, un permalink sarà simile al seguente:https://example.com/posts/example-blog-post
Da qui, dovresti avere un sito Web di base pronto per partire. Assicurati di installare plugin come Jet Pack e WP-Super Cache. Il plug-in WP-Super Cache consente di velocizzare il tuo sito Web memorizzando nella cache le pagine Web ed eliminando ricerche di database costanti e JetPack ti offre eccellenti statistiche di visualizzazione.
Backup del sito Web e del database di WordPress
Va da sé che il backup del sito Web e del database è molto importante. Per fortuna, questa è una cosa relativamente facile da fare. Eseguire il backup di entrambi nella directory principale e quindi è possibile copiarli tramite SCP in un'altra posizione. Puoi anche creare un'istantanea tramite il Pannello di controllo Vultr. È una buona idea fare entrambe le cose.
cd /var/www/htdocs
tar cvfz wordpress.tgz wordpress/
cp wordpress.tgz /home/user
mysqldump -u root -p wordpress > wordpress.sql && gzip wordpress.sql
Ripristino del sito Web WordPress
Se il database è stato danneggiato ed è necessario un ripristino, eseguire le seguenti operazioni:
gunzip wordpress.sql.gz
mysql -u root -p wordpress
DROP USER '<user>'@'localhost';
DROP DATABASE wordpress;
CREATE DATABASE wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO '<wp_user>'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;
EXIT
mysql -u root -p wordpress < wordpress.sql
Se hai apportato una modifica a un file di script di WordPress che ha rotto qualcosa, puoi sempre reinstallare WordPress dal pannello di controllo dell'amministratore. Cerca la Updates
sezione e fai clic sul collegamento. Cerca un pulsante con l'etichetta Re-install Now
. Questo risolverà almeno ciò che è rotto ma la maggior parte della configurazione dovrebbe rimanere intatta.
Se il tuo database è in buone condizioni, ma hai accidentalmente modificato un file e hai rotto le cose al punto in cui non riesci nemmeno ad accedere alla console di amministrazione di WordPress, procedi come segue:
rm /var/www/htdocs/wordpress
cp /home/user/wordpress.tgz /tmp
tar xvfz wordpress.tgz
mv wordpress /var/www/htdocs/.
chown -R www:www /var/www/htdocs/wordpress
cd /var/www/htdocs/wordpress
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;