6.praktikum - LAMP ------------------ LAMP: Linux #OS Apache #veebiserver MySQL #andmebaasiserver PHP #hüperteksti eelprotsessor, https://en.wikipedia.org/wiki/PHP Levinud komplekt veebipõhiste keskkondade püstipanekuks https://www.raspberrypi.org/learning/lamp-web-server-with-wordpress/worksheet/ virtuaalmasinate seadistamiseks vt eraldi faili http://enos.itcollege.ee/~edmund/inf-hw/praktikumid/virtuaallaborid.txt tavapärased õigused veebiserveris --------------------------------- kataloogid: 755 (kataloogi puhul käivitusõigus tähendab õigust siseneda) chmod 755 failid: 644 chmod 644 lisalugemist: http://enos.itcollege.ee/~edmund/osadmin/materials/failioigused-UNIXis/failioigused-UNIXis.html kiirelt saab numbrid paika - http://permissions-calculator.org/ Ubuntu pakettide otsimine veebis - http://packages.ubuntu.com/ Uusimate varamute otsimine Launchpad'ist: https://launchpad.net/ubuntu/+ppas Vaatame, mis programmid ja milliste portide peal "kuulavad": netstat -tlnp VEEBISERVERI PAIGALDAMINE sudo apt update && sudo apt-get install apache2 -y vt veebiserverite alternatiive: http://alternativeto.net/software/apache/ veateate simuleerimine, et teada saada veebiserveri versiooni (alguses) http://192.168.xxx.xxx/aaa otsime haavatavusi: Apache/2.4.10 vulnerabilities https://www.cvedetails.com/vulnerability-list/vendor_id-45/product_id-66/version_id-177881/Apache-Http-Server-2.4.10.html Mis tarkvara veebiserveris töötab: https://toolbar.netcraft.com/site_report The Open Web Application Security Project (OWASP) https://www.owasp.org/index.php/Main_Page kuniks veebi ehitatakse, on mõistlik server avalikust võrgust ära võtta ja näidata "web under construction" tüüpi avalehte PAIGALDAME PHP Raspberry Pi: sudo apt-get update && sudo apt-get install php libapache2-mod-php5 -y x86, x86_64 Ubuntu: sudo apt-get update && sudo apt-get install php libapache2-mod-php -y php sõltub uusimast PHP versioonist libapache2-mod-php sõltub samuti uusimast versioonist vt ka PHP alternatiive: http://alternativeto.net/software/php/ otsing: sudo apt search libapache2-mod-php PHP infoleht veebiserverisse: sudo nano /var/www/html/index.php tekitame phpinfo faili veebiserverisse: sudo nano /var/www/html/i.php vaatamine üle veebi: http://192.168.0.1/i.php fail i.php asub /var/www/html/ kaustas leidke phpinfo failist: - Apache versioon (Apache Version) - PHP versioon (PHP Version) - OpenSSL Library Version - DOCUMENT_ROOT näitab kataloogi kust veebileht (antud phpinfo fail) laaditi - kui suuri faile saab läbi php vormi üles laadida (upload_max_filesize) - mitu faili korraga saab üles laadida (max_file_uploads) salasõnade hulgi tekitamine veebis: https://www.msdservices.com/apg/index.php salasõnade tekitamine Linuxis käsureal: pwgen - generate pronounceable passwords sudo apt update && sudo apt install pwgen -y && sudo apt clean https://linux.die.net/man/1/pwgen pwgen [ OPTION ] [ pw_length ] [ num_pw ] pwgen -1B 20 20 -1 Print the generated passwords one per line. -B, --ambiguous Don't use characters that could be confused by the user when printed, such as 'l' and '1', or '0' or 'O'. This reduces the number of possible pass‐ words significantly, and as such reduces the quality of the passwords. It may be useful for users who have bad vision, but in general use of this option is not recommended. PAIGALDAME ANDMEBAASISERVERI NB! Mitte jätta paigaldamisel määratamata kasutaja root salasõna! Raspberry Pi: sudo apt-get install mysql-server php5-mysql -y x86, x86_64 Ubuntu (laua-, sülearvuti, virtuaalmasin): sudo apt-get install mysql-server php-mysql -y abiinfot: https://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html https://www.cyberciti.biz/faq/mysql-change-root-password/ Kui ununes MySQL root kasutaja salasõna määramata siis seda saab määrata: sudo mysqladmin -u root password NEWPASSWORD või muutmiseks: sudo mysqladmin -u root -p'oldpassword' password 'newpassword' või ka sudo mysqladmin -u root -p oldpassword newpassword või ka sudo dpkg-reconfigure mysql-server-N.N ... kus N.N on MySQL'i versiooninumber Lisainfot: https://www.startpage.com/do/search?q=reset+mysql+root+password https://www.howtoforge.com/setting-changing-resetting-mysql-root-passwords https://help.ubuntu.com/community/MysqlPasswordReset https://www.cyberciti.biz/faq/mysql-change-root-password/ MySQL serveri turvalisuse parandamine -------------------------------------- selleks on käsk: sudo mysql_secure_installation peale lühikest infot küsitakse superkasutaja salasõna Securing the MySQL server deployment. Enter password for user root: superkasutaja salasõna turvalisuse kontroll: VALIDATE PASSWORD PLUGIN can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD plugin? Press y|Y for Yes, any other key for No: y Siis küsitakse salasõna tugevuse poliitika määramist: There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1 Siis võimalus superkasutaja (root) salasõna tugevamaks muuta: Estimated strength of the password: 25 Change the password for root ? ((Press y|Y for Yes, any other key for No): y Anonüümsete kasutajate eemaldamine: Remove anonymous users? (Press y|Y for Yes, any other key for No): y Success. Superkasutaja (root) sisselogimise keelamine üle võrgu sisselogimisel: Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No): y Success. Test andmebaasi eemaldamine: By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No): y Success. Viimaks seadete uuestilaadimine: Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No): y Success. All done! Lisalugemist: https://dev.mysql.com/doc/refman/5.7/en/mysql-secure-installation.html http://manpages.ubuntu.com/manpages/xenial/man1/mysql_secure_installation.1.html phpMyAdmin ---------- MySQL'i graafiliseks veebipõhiseks haldamiseks võimalik paigaldada ka phpMyAdmin (eelnevalt peab andmebaasiserver olema paigaldatud): sudo apt update && sudo apt-get -y install phpmyadmin && sudo apt-get clean paigaldamisel veenduge, et märgite tühikuga apache2 seadistamise phpMyAdmin on MySQL'i veebiliides ja seetõttu saab sisse logida kõikide kasutajatega kes on olemas MySQL andmebaasis. Kuid haldamiseks tuleks sisse logida kasutajaga root. dbconfig-common No ----- Muidugi võib phpMyAdmin'i asemel kasutada ka midagi muud: http://alternativeto.net/software/phpmyadmin/ https://w3guy.com/alternatives-phpmyadmin/ https://tecadmin.net/alternatives-of-phpmyadmin/ ----- phpMyAdmin'i paigaldamisel märkida tühikuklahviga Apache2 automaatne seadistamine phpMyAdmin'i jaoks. NB! Viga, mida siin on tehtud - vajutatakse tühiku asemel Enter kuid see läheb edasi ja jätab Apache2 valimata. kui phpMyAdmin paigaldamisel jäi märkimata Apache2 seadistamine siis phpMyAdmin'i uuesti seadistamiseks sudo dpkg-reconfigure phpmyadmin --- vt http://askubuntu.com/questions/642224/how-to-reconfigure-phpmyadmin/642227 phpMyAdmin haldamine aadressil http:///phpmyadmin/ dokumentatsioon peale paigaldamist: /usr/share/doc/phpmyadmin Kaitseme phpMyAdmin sisselogimise eraldi salasõnaga: Failis /etc/phpmyadmin/apache.conf lisada viimane rida (AllowOverride...): Options FollowSymLinks DirectoryIndex index.php AllowOverride AuthConfig Apache dokumentatsioon: https://httpd.apache.org/docs/ Kaitseme phpMyAdmin kausta salasõnaga programmi htpasswd abil, mis tekitab .htaccess faili ja sisselogimiseks kasutaja student: sudo htpasswd -c /etc/apache2/access/.phpmyadmin-htaccess student (lisainfo: man htpasswd) Vajadusel paigaldada pakett, mis sisaldab htpasswd rakendust: sudo apt-get update && sudo apt-get -y install apache2-utils && sudo apt-get clean info apache2-utils paketi kohta: sudo apt show apache2-utils Package: apache2-utils Version: 2.4.18-2ubuntu3.2 Priority: optional Section: net Source: apache2 Origin: Ubuntu Maintainer: Ubuntu Developers Original-Maintainer: Debian Apache Maintainers Bugs: https://bugs.launchpad.net/ubuntu/+filebug Installed-Size: 324 kB Depends: libapr1 (>= 1.4.8-2~), libaprutil1 (>= 1.5.0), libc6 (>= 2.14), libssl1.0.0 (>= 1.0.1) Homepage: http://httpd.apache.org/ Task: lamp-server, mythbuntu-frontend, mythbuntu-desktop, mythbuntu-backend-slave, mythbuntu-backend-master, mythbuntu-backend-master Supported: 5y Download-Size: 81,7 kB APT-Sources: http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages Description: Apache HTTP Server (utility programs for web servers) Provides some add-on programs useful for any web server. These include: - ab (Apache benchmark tool) - fcgistarter (Start a FastCGI program) - logresolve (Resolve IP addresses to hostnames in logfiles) - htpasswd (Manipulate basic authentication files) - htdigest (Manipulate digest authentication files) - htdbm (Manipulate basic authentication files in DBM format, using APR) - htcacheclean (Clean up the disk cache) - rotatelogs (Periodically stop writing to a logfile and open a new one) - split-logfile (Split a single log including multiple vhosts) - checkgid (Checks whether the caller can setgid to the specified group) - check_forensic (Extract mod_log_forensic output from Apache log files) - httxt2dbm (Generate dbm files for use with RewriteMap) Seejärel lisame faili /usr/share/phpmyadmin/.htaccess: AuthType Basic AuthName "Kaitstud ala" AuthUserFile /etc/apache2/access/.phpmyadmin-htaccess Require valid-user Taaskäivita Apache2: sudo service apache2 restart Nüüd on phpMyAdmin kaust sisselogimine kaitstud salasõnaga. Värskendada veebilehitsejat (laadib lehe serverist uuesti) - CTRL+F5 htaccess'i kirjutamiseks on tehtud ka erinevaid veebipõhiseid laiendusi, nt phpaccess - https://sourceforge.net/projects/phpaccess/ PHP info salasõnaga kaitstud kausta tegemine -------------------------------------------- tekitame kataloogi ja faili: sudo mkdir /var/www/html/phpinfo echo "" > /var/www/html/phpinfo/index.php ---------------- seadistame veebiserveri: sudo nano /etc/apache2/apache2.conf Options Indexes FollowSymLinks AllowOverride All Require all granted ---------------- tekitame kasutaja, salasõna: sudo htpasswd -c /etc/apache2/.phpinfo-htaccess student ---------------- tekitame .htaccess faili: sudo nano /var/www/html/phpinfo/.htaccess AuthType Basic AuthName "Kaitstud ala" AuthUserFile /etc/apache2/.phpmyadmin-htaccess Require valid-user taaskäivitame veebiserveri sudo service apache2 restart ... ja võime pöörduda http:///phpinfo kausta poole ning küsitakse salasõna enne PHP info näitamist. Ülekirjutamisreeglite lubamiseks “.htaccess” failis peab veebiserveri konfifailis olema globaalselt määratud “AllowOverride All”. Kataloogi indekseerimise keelamine ---------------------------------- sudo nano /etc/apache2/apache2.conf Options -Indexes -- taaskäivitame veebiserveri: sudo service apache2 restart phpMyAdmin uue kasutaja lisamine -------------------------------- Kui phpMyAdmin paigaldatud siis logime sisse ja tekitame ka uue kasutaja: Kasutajate kontod->Lisa kasutajate konto kasutajanimi: student hostinimi: kohalik - localhost (hiljem muutmine: Andmebaasid->Kasutajate kontod-> student - muuda õiguseid ja klõpsa lingil 'kasutaja'@'host' -> sisselogimise teave ja märgi ka allpool "kustuta eelmine kasutaja tabelist" - vajadusel MySQL'ile taaskäivitus: sudo service mysql restart) parool: student Ubuntu (x86/x86_64): autentimise pistik (authentication plugin): MySQL omavahenditega (Native...) võib ka salasõna tekitada, mis tuleb turvaline (piisavalt pikk ja keerukas) märkida ka linnuke: Loo samanimeline andmebaas ja anna kõik õigused. * * * kui peaks olema vajadus salasõnata ligi pääseda phpMyAdmin'ile (nt ununes root kasutaja salasõna MySQL'i puhul määramata, mida saab muidugi ka hiljem määrata): /etc/phpmyadmin/config.inc.php failis otsida AllowNoPasswords (rida 103) ja lubada see (eemaldada kaldkriipsud rea eest). * * * Apache veebiserveri piiramine vaid IPv4 peale --- Seda ei pea tegema kuid kui on soov ja vajadus siis saab teha. Lisaks siis võiks ka tulemüüris kustutada IPv6 reegli Apache kohta kui see on lisatud. Vaatame, milliseid porte hetkel kuulatakse: netstat -tulpn Apache sätetefailis /etc/apache2/ports.conf # Listen 80 #kommenteerime vana väärtuse välja Listen 0.0.0.0:80 # lisame uue väärtuse taaskäivitame Apache2: sudo service apache2 restart * * * Peale muutmist taaskäivitame apache2 ja mysql: sudo service apache2 restart sudo service mysql restart teenuste haldamine: sudo service apache2 status sudo service mysql status abiinfo valikutest: sudo service apache2 help veebilehe värskendamine: F5 CTRL+F5 - puhvrit arvestamata (cache override) (sõltub veebilehitsejast) veebileht on kataloogipõhine nähtus - saame olemasoleva liigutada nt kataloogi "vana" ja teha uue kataloogi uue veebi jaoks ning hiljem suuname päringud sinna või tekitame eraldi veebiserveri seadistuse siseneme veebiserveri juurkataloogi: cd /var/www/html/ tekitame kataloogi vana: sudo mkdir /var/www/html/vana tõstame esialgsed failid kausta vana: sudo mv /var/www/html/i* /var/www/html/vana/ WORDPRESSI PAIGALDAMINE ----------------------- loome eraldi kataloogi väljapoole html kausta (teeme eraldi virtualhost'i) ja laadime WordPress'i alla: sudo mkdir /var/www/lamp.dev sudo wget -O /var/www/lamp.dev/latest.tar.gz http://wordpress.org/latest.tar.gz kui latest.tar.gz on juba olemas siis ei ole vaja alla laadida pakime allalaaditud WordPress'i lahti: cd /var/www/lamp.dev tar zxf latest.tar.gz tekib alamkataloog wordpress tõstame failid kausta wp (üks tase üles) ja kustutame kausta wordpress: cd /var/www/lamp.dev sudo mv wordpress/* ./ sudo rm -r /var/www/lamp.dev/wordpress muudame omaniku ära (vastasel korral ei suudeta teha wp-config.php faili): sudo chown -R www-data: /var/www/lamp.dev Wordpress eraldi kaustas nähtavaks veebiserveris (virtualhost) -------------------------------------------------------------- Faili /etc/apache2/apache2.conf lisame: Options Indexes FollowSymLinks AllowOverride All Require all granted Tekitame eraldi lehe profiili: cd /etc/apache2/sites-available cp 000-default.conf lamp.dev.conf (fail peab olema .conf laiendiga) ... ja muudame seda: DocumentRoot /var/www/lamp.dev ServerName lamp.dev ServerAlias www.lamp.dev ServerAdmin webmaster@lab.dev ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined IP-alias kliendimasinas ----------------------- serveri nimi ja alias eeldab ka nimeserveri seadistamist ent meie kasutame /etc/hosts kaudu nimelahendust sudo nano /etc/hosts xxx.xxx.xxx.xxx lamp.dev seejärel lubame loodud virtualhost'i: sudo a2ensite lamp.dev.conf (selle faili nimi, mis tekitati /etc/apache2/sites-available kausta) seejärel taaslaadime Apache: sudo service apache2 reload * * * WordPressi seadistamine ----------------------- avame http://lamp.dev/ see avaneb kui: - haldusmasinas on /etc/hosts fail seadistatud - apache on serveris seadistatud ja seaded uuesti laaditud andmebaasi nimi, kasutaja, salasõna vastavalt sellele, mis eespool tehtud (phpMyAdmin'is): student database host: localhost Table Prefix: wp_ # # # kui ei kasutanud eespool kirjeldatud phpMyAdmin abil eraldi kasutaja loomist siis (Raspberry Pi kodulehe õpetus): mysql -uroot -p mysql> create database wordpress; exit (CTRL+D) MySQL'i viiteid https://www.cyberciti.biz/faq/mysql-command-to-show-list-of-databases-on-server/ vaatame andmebaase: show databases; vajadusel: peale WordPressi paigaldamist tekitame suunamislehe: echo "" > /var/www/html/index.php Edasi saab WordPress'i seadistada eestikeelseks, lisada ehk mõned turvalisuse lisandid jne. Näiteks võiks olla robotilõks (captcha) sisselogimiseks WordPress'i. * * * Apache, PHP info peitmine ------------------------- https://viki.pingviin.org/Apache_ja_PHP_info_peitmine Midnight Commander'i abil mugav liikuda (sudo apt update && sudo apt-get -y install mc && sudo apt-get clean) Ubuntu: /etc/apache2/conf-enabled/security.conf (kui ei ole lubatud siis: sudo a2enconf security.conf) - kommenteeri õiged read sisse (eemalda trellid eest): ServerSignature Off ServerTokens Minimal (ka Prod) TraceEnable Off Siis võimalik näiteks pärida: curl -I http://lamp.dev/ või ka curl -X HEAD -I http://lamp.dev/ HTTP/1.1 200 OK Date: Mon, 6 Mar 2017 15:27:40 GMT Server: Apache Last-Modified: Sun, 5 Mar 2017 03:21:14 GMT ETag: "2c39-54b21050ab588" Accept-Ranges: bytes Content-Length: 11321 Vary: Accept-Encoding Content-Type: text/html sisesta midagi, mida olemas ei ole: http://lamp.dev/aaa ... ei tohiks enam veebiserveri versiooni näha... Lisainfot: http://stackoverflow.com/questions/4672088/how-can-i-find-the-version-of-php-that-is-running-on-a-distinct-domain-name http://redbot.org/ http://web-sniffer.net/ Ubuntu (x86/x86_64): /etc/php/7.0/apache2/php.ini expose_php = Off sudo service apache2 reload näiteks: curl -I http://lamp.dev/ HTTP/1.1 200 OK Date: Mon, 6 Mar 2017 15:27:40 GMT Server: Apache Last-Modified: Sun, 5 Mar 2017 03:21:14 GMT #seda rida ei ole kui PHP versiooni näitamine keelatud X-Powered-By: PHP/7.0.15-0ubuntu0.16.04.4 #seda rida ei ole kui PHP versiooni näitamine keelatud Link: ; rel="https://api.w.org/" Content-Type: text/html; charset=UTF-8 Ehk siis kui siit puudub rida (PHP versioon muutub ajas): X-Powered-By: PHP/7.0.15-0ubuntu0.16.04.4 ... siis on PHP versiooni näitamine väljas Peale PHP konfiguratsioonifaili muutmist ära unusta laadida Apache sätted uuesti: sudo service apache2 reload lisaks pöördume phpinfo faili poole - ei tohiks ka näha olla /etc/php5/apache2/php.ini expose_php Off PHP versioon ------------ http://php.net/expose-php http://www.wikihow.com/Check-PHP-Version käsureal: php -r 'phpinfo();' | grep "PHP Version" PHP käskude käivitamine käsureal: https://www.tecmint.com/run-php-codes-from-linux-commandline/ https://www.tecmint.com/execute-php-codes-functions-in-linux-commandline/ avalikus internetis testimine http://toolbar.netcraft.com/site_report PHP turvalisusest https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet https://www.cyberciti.biz/tips/php-security-best-practices-tutorial.html Turvalisus ---------- Võib veel rakendada mitmeid kaitseargumente, mille kohta leiab palju õpetusi. https://www.unixmen.com/ways-to-secure-your-ubuntu-14-04-server-running-lamp/ https://tecadmin.net/security-tips-for-lamp-stack-on-linux/ https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-16-04 https://www.thefanclub.co.za/how-to/how-secure-ubuntu-1604-lts-server-part-1-basics WordPress'i lisad https://wordpress.org/plugins/redirect-404-error-page-to-homepage/ https://wordpress.org/plugins/tags/ https://wordpress.org/plugins/tags/security https://wordpress.org/plugins/tags/captcha