Jak nainstalovat LAMP konfiguraci na Wedos VPS ON s čistou instalací Debian 9, včetně zprovoznění Let's Encrypt certifikátu.
Ihned po zprovoznění služby na email přijdou root přístupy na server pomocí SSH. Tento návod je koncipován pro Linux Debian 9. Verzi vašeho systému je možné zjistit pomocí příkazu:
cat /etc/debian_version
Přihlásíme se k serveru a provedeme upgrade:
apt-get update apt-get upgrade
Pro snadnější orientaci v souborovém systému si nainstalujeme Midnight Commander příkazem:
apt-get install mc
Provedeme instalaci nadstavby apt a to konkrétně aptitude. Ta nám umožní pohodlnou instalaci ostatních nezbytných součástí.
apt-get install -y aptitude
Instalace APACHE
Nainstalujeme APACHE2 server
aptitude install apache2
Server spustíme
service apache2 start
A otestujeme zda vše funguje jak má, pomocí zadání IP adresy serveru, kterou najdete v emailu o aktivaci služby. Měla by se zobrazit defaultní stránka "Apache2 Debian Default Page".
Pro ověření správného fungování můžeme použít příkaz
service apache2 status
Apache běží, nicméně hlásí chybu "Could not reliably determine the server's fully qualified domain name". Nemámem nastaven ServerName, což je v ideálním případě konkrétní doména. Pro tyto účely si tedy zaregistrujeme doménu 2.řádu ve standardní zákaznické administraci Wedos. Jak nastavit DNS domény a následně direktivu ServerName se dostaneme později v tomto návodu.
Povolíme mod_rewrite modul pro přepisování adres:
a2enmod rewrite
Upravíme soubor /etc/apache2/apache2.conf tak, aby pro adresář var/www povolil přepisování adres.
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
V tuto chvíli ale Apache vypneme:
service apache2 stop
Instalace PHP 7
apt-get install apache2 libapache2-mod-php
Instalace PHP 5.6
apt-get install software-properties-common
apt-get install apt-transport-https lsb-release ca-certificates
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
apt-get update
aptitude install php5.6
Instalace extensions pro PHP5.6
aptitude install memcached php5.6-memcache
apt-get install php5.6-gd
apt-get install php5.6-intl
apt-get install php5.6-mysql
apt-get install php5.6-mbstring
apt-get install php5.6-xml
Volba PHP
update-alternatives --config php
Toto nám umožní zvolit aktivní verzi PHP.
Test funkčnosti PHP
touch /var/www/html/test.php
echo -e '<?php\nphpinfo();' > /
var/www/html/test2.php
Instalace MySQL
aptitude install mysql-server
Rovnou si vytvoříme uživatele, který bude mít přístup do MySQL
mysql CREATE USER 'user1'@'localhost' IDENTIFIED BY 'heslo123'; GRANT ALTER,INDEX,CREATE,INSERT,UPDATE,SELECT,DELETE,DROP ON *.* TO 'user1'@'localhost'; FLUSH PRIVILEGES;
Dodatečně dle potřeb nastavit innodb_buffer_pool_size.
Instalace FTP přístupu
apt-get install proftpd
Upravíme konfigurační soubor /etc/proftpd/proftpd.conf
UseIPv6 off DefaultRoot ~ Port 1980
A provedeme restart
systemctl restart proftpd
Upravíme soubor /ets/shells a přidáme do něj řádek
/bin/false
Vytvoření FTP uživatele
adduser ftpuser1 --shell /bin/false sudo passwd ftpuser1 chown ftpuser1 /var/www/html systemctl restart proftpd
Příkaz pro případné smazání uživatele je
userdel ftpuser1
Restriktivní přístup pro FTP uživatele
Uživatelů je možno vitvořit více, včetně nastavení jejich přístupu do konkrétních složek. Klíčové je nastavení hodnoty DefaultRoot v souboru /etc/proftpd/proftpd.conf
Ukázka jak lze oprávnění nastavit:
DefaultRoot ~ DefaultRoot /var/www/html/web1 ftpuser2 DefaultRoot /var/www/html/web2 ftpuser3
Po změně konfigurace ProFtpd je nutné službu restartovat:
systemctl restart proftpd
Uživatelské skupiny
Mnohem sofistikovanější způsob jak pracovat s uživateli je vytvoření skupiny, přiřazení uživatelů do skupiny a nastavení oprávnění skupiny.
sudo groupadd ftpusers
usermod -a -G ftpusers ftpuser1 usermod -a -G ftpusers ftpuser2
DefaultRoot /var/www ftpusers
Nastavení skupiny pro přístup k adresáři /var/www
chgrp -R ftpusers /var/www
Změna skupiny i vlastníka:
chown -R ftpuser2:ftpusers /var/www
Kontrola oprávnění lze provést příkazem
ls -l /var/www
Seznam všech skupin najdete v souboru /etc/group a seznam všech uživatelů v souboru /etc/passwd.
Zabezpečení FTP přístupu
cd /etc/ssl/private openssl req -x509 -nodes -newkey rsa:2048 -keyout proftpd.pem -out proftpd.pem -days 365 chmod 600 proftpd.pem
Nastavíme konfiguraci proFTPD v souboru /etc/proftpd/proftpd.conf:
# odkomentujte řádek 138 Include /etc/proftpd/tls.conf
Nastavíme konfiguraci TLS v souboru /etc/proftpd/tls.conf
TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol SSLv23 TLSRSACertificateFile /etc/ssl/private/proftpd.pem TLSRSACertificateKeyFile /etc/ssl/private/proftpd.pem
a restartujeme proFTPD
systemctl restart proftpd
Nastavení systémového jména serveru
Je nutné nastavit jméno serveru v /etc/hostname
mujserver.tld
a také v /etc/hosts.
vase.ip.adre.sa mujserver.tld
Poté doporučuji provést restart serveru.
reboot
Poté můžeme zkontrolovat jestli se správně nastavil HostName
hostnamectl
Instalace zasílání emailů z PHP
Nejdříve nainstalujeme sendmail:
apt-get install sendmail
Spustíme konfiguraci sendmail:
sendmailconfig
a na všechny dotazy je nutné odpovědět Y - ano.
Pak již stačí restartovat apache:
service apache2 restart
nyní je vše připraveno a z PHP lze odesílat funkcí mail() emaily.
HTTPS - Instalace Let's Encrypt
Do souboru etc/apt/sources.list přidáme řádek
deb http://ftp.debian.org/debian stretch-backports main
a provedeme update
apt update
Nainstalujeme si CERTBOTa
apt-get install python-certbot-apache -t stretch-backports
certbot --authenticator webroot --installer apache
Vygenerujeme si certifikát pro naši doménu
certbot certonly --webroot -w /var/www/html -d mujserver.tld -d www.mujserver.tld
Upravíme soubor /etc/apache2/sites-available/default-ssl.conf
DocumentRoot /var/www/html ServerName mujserver.tld SLEngine on SLCertificateFile /etc/letsencrypt/live/mujserver.tld/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/mujserver.tld/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/mujserver.tld/chain.pem
Spustíme APACHE ssl extension, defaultní web a restartujeme APACHE:
a2enmod ssl
a2ensite default-ssl.conf
service apache2 restart
V tuto chvíli by mělo fungovat https://mujserver.tld
Zabezpečení FTP a SSH
Aby na server neútočili hackeři a roboti, bude nutné zabezpečit službu SSH a FTP přístup například pomocí souboru /etc/host.allow a /etc/host.deny
do souboru /etc/host.allow doplňte vaší IP adresu
sshd: xxx.xxx.xxx.xxx proftpd: xxx.xxx.xxx.xxx
a do souboru /etc/host.deny
sshd: ALL proftpd: ALL
a restartujte službu sshd
service sshd restart
Případné útoky na SSH jde zjistit pomocí
journalctl
Zřejme bude log plný neplatných přihlášení pod různými uživateli.
Závěrem
A je to! V tuto chvíli máme vše nainstalováno.
UPDATE:
Instalace podpory MS SQL
sudo apt-get install php5.6-sybase freetds-common libsybdb5 apach2ctl restart
Nastavení swapování systému
Narazil jsem na problém s padáním MySQL s hláškou "Error establishing a Database Connection" a jeho příčinou byla nedostatečná dostupná paměť RAM. V tomto případě to můžeme vyřešit nastavením swapovacího souboru systému, který je používán v případě, že není dostupná dostatečná paměť.
Podíváme se tedy do logu, co se děje..
/var/log/mysql/error.log
kde je následující problém..
[NOTE] Initializing buffer pool, size = 1.0G InnoDB: mmap(140574720 bytes) failed; errno 12 [ERROR] InnoDB: Cannot allocate memory for the buffer pool [ERROR] InnoDB: Plugin 'InnoDB' init function returned error. [ERROR] InnoDB: Plugin 'InnoDB' registration as a STORAGE ENGINE failed. [ERROR] Aborting
Také je vhodné prozkoumat syslog
grep "mysql" /var/log/syslog
Který obsahuje
Současně pokud zkontrolujeme využití paměti RAM
free -m
a zobrazí se
Swap: 0 0 0
je evidentní, že budeme potřebovat nastavit swapování systému.
Vytvoříme si swapfile ( příkazy jsou v roli root )
fallocate -l 4G /swapfile
ls -lh /swapfile
Výsledkem bude..
-rw-r--r-- 1 root root 4.0G Apr 30 17:19 /swapfile
Nastavení zabezpečení
chmod 600 /swapfile
Kontrola zabezpečení
ls -lh /swapfile
mělo by se zobrazit..
-rw------- 1 root root 4.0G Apr 30 17:19 /swapfile
Řekneme systému o souboru
mkswap /swapfile
swapon /swapfile
swapon -s
Dodatečné nastavení tak, aby swap soubor byl permanentní..
nano /etc/fstab
do fstab tedy přidáme řádek
/swapfile swap swap defaults 0 0
a zkontrolujeme zda je vše nastaveno
swapon --show
a také jestli je swap skutečně používán..
free -m