The Ubuntu Server Edition LTS is a highly reliable server system and comes with reasonable security defaults. Still there are additional steps to take if we want to enhance its security.

Note
These steps will only help make your server more secure but they will not make it bulletproof! Security is an evergoing process and you should always be alert for new security issues.

Prerequisites

  1. Install a fresh Ubuntu Server 14.04 (Preferable 64 bit).

  2. Use the following command to install SSH, if not already installed:

    $ sudo apt-get -y install openssh-server
    
  3. Make sure you have a sudo enabled user:

    $ id | grep sudo
    uid=1000(theoadm) gid=1000(theoadm) groups=1000(theoadm),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),116(lpadmin),117(sambashare),1006(gitusers)
    

    If the above is not true, you will have to login as root with su – and execute all the commands as the root user.

Secure SSH

  1. Block remote logins as root. Set the value of the PermitRootLogin keyword, in /etc/ssh/sshd_config, to without-password or no. This will disable password based authentication for the user root and only allow Public Key Authentication.

    • First check what is the value of the PermitRootLogin keyword:

      $  grep PermitRootLogin /etc/ssh/sshd_config
      PermitRootLogin without-password
      
    • If the value is yes, it is considered a very bad practice, especially on a public server. Use your favorite editor or the following command to change it:

      $ sudo sed -i 's/^\(PermitRootLogin\s\)[yY][eE][sS]/\1without-password/' /etc/ssh/sshd_config
      
    • Don’t forget to restart SSH:

      $ sudo service ssh restart
      
  2. Change the SSH listening port from 22 to something else. This is not the ultimate security measure but, since most ssh attack bots target the default port, it will largely minimize the attacks.

    • First select a port not used by a well known service. Let’s assume that we decided to use port 4547:

      $  grep 4547 /etc/services ; echo $?
      1
      

      A return value of 1 indicates that no well known service is using that port.

    • Then change the value of the Port keyword to 4547. Use your favorite editor or the following sed command to do so:

      $  sudo sed -i 's/^\(Port\s\)22/\14547/' /etc/ssh/sshd_config
      
    • Restart your SSH server:

      $ sudo service ssh restart
      
    • Verify that the port has been changed:

      $ sudo netstat -lnpt | grep ssh
      tcp     0    0 0.0.0.0:4547   0.0.0.0:*   LISTEN   11979/sshd      
      tcp6    0    0 :::4547        :::*        LISTEN   11979/sshd      
      

Enable Filtering

  1. Enable the firewall functionality. We will be using the pre-installed Uncomplicated Firewall (ufw) which is just a front-end to the, more complicated, iptables.

    • First allow port 4547. Make sure you type the correct port or you will be locked out of your server! Use the following command to allow traffic to our chosen port:

      $ sudo ufw allow 4547/tcp
      
    • Then enable the firewall:

      $ sudo ufw enable
      
    • Verify that is working:

      $ sudo ufw status
      Status: active
      To Action From -- ------ ---- 4547/tcp ALLOW Anywhere 4547/tcp (v6) ALLOW Anywhere (v6)
  2. Setup the Fail2ban intrusion prevention software. Fail2ban is an excellent tool to block attacks against SSH and many other services.

    • Install fail2ban:

      $ sudo apt-get -y install fail2ban
      
    • SSH protection is enabled by default but we need to reconfigure the ssh port to 4547. In the file /etc/fail2ban/jail.conf change the port = ssh value to 4547:

      [ssh]
      enabled = true port = 4547 filter = sshd logpath = /var/log/auth.log maxretry = 6
    • Enable protections against distributed attacks. Edit the [ssh-ddos] section in /etc/fail2ban/jail.conf:

      [ssh-ddos]
      enabled = yes port = 4547 filter = sshd-ddos logpath = /var/log/auth.log maxretry = 6

Unattended upgrades

Enabling unattended upgrades may not be a very good idea on mission critical servers. On such scenarios you may want to test the upgrades on a test server before you apply them on the production. Nevertheless it may be a good practice to enable this functionality on machines that are expected to run unattended for long periods of time. This will help to automatically patch vulnerabilities of your machine. Note, however, that patches do not automatically apply on the Linux kernel or the glibc library, because a restart is needed in these cases. So even on mostly unattended scenarios, you still need to check occasionally whether your machine needs a restart.

  1. Make sure that the unattended-upgrades package is installed. It is usually pre-installed but if not, you can use the following command to install it:

    $ sudo apt-get -y install unattended-upgrades
    
  2. Then we must configure automatic upgrades. Answer Yes when asked in the following command:

    $ sudo dpkg-reconfigure updates unattended-upgrades
    

    Alternatively you can edit the /etc/apt/apt.conf.d/20auto-upgrades configuration file as follows:

    APT::Periodic::Update-Package-Lists "1";
    APT::Periodic::Unattended-Upgrade "1";
    

Further Reading

As we said earlier, security is an ongoing process. Some further info to make your site more secure:

Μεσάνυχτα και ταξιδεύεις δίχως πλευρικά
σκιάζεσαι μήπως στο γιαλό, τα φώτα σε προδίδουν
μα πρίμα πλώρα μόνη εσύ, πατάς στοχαστικά
κρατώντας στα χεράκια σου, το λύχνο του Αλαδδίνου
~ Νίκος Καββαδίας ~

Αυτός ο οδηγός αφορά την εγκατάσταση ενός εξυπηρετητή ιστού , βασισμένου σε Ubuntu/Linux με μια βάση δεδομένων στο παρασκήνιο και ενσωματωμένη γλώσσα προγραμματισμού PHP.  Ο όρος LAMP δεν αναφέρεται βέβαια σε λάμπες ούτε και σε λυχνάρια από μεσανατολίτικα παραμύθια, αλλά στον συνδυασμό Linux, Apache, MySQL MariaDB και PHP.

Παραδοσιακά θα χρησιμοποιούσαμε MySQL για αυτή την δουλειά αλλά από την έκδοση της Ubuntu 14.04, η εναλλακτική βάση δεδομένων MariaDB είναι διαθέσιμη από τα αποθετήρια της Ubuntu. Συστήνεται η χρήση της MariaDB αντί της πολυαγαπημένης MySQL, επειδή το μέλλον της τελευταίας διαγράφεται ζοφερό μετά από την αγορά της από την Oracle.

Θα χρησιμοποιήσουμε επίσης το εργαλείο εικονικοποίησης VirtualBox  για να εγκαταστήσουνε την έκδοση Ubuntu Server σε εικονική μηχανή (VM), αλλά μπορείτε να ακολουθήσετε αυτές τις οδηγίες σε ένα πραγματικό υπολογιστή ή χρησιμοποιώντας κάποιο παροχέα υπηρεσιών.

Για να ακολουθήσετε αυτές τις οδηγίες θα πρέπει να κατεβάσετε το πιο πρόσφατο αρχείο ISO για Ubuntu Server (τρέχουσα έκδοση 14.04.2)

Δημιουργία της εικονικής μηχανής

  1. Εγκατάσταση VirtualBox: Βεβαιωθείτε ότι υπάρχει εγκατεστημένο το VirtualBox. Αν δεν το έχετε εγκατεστημένο μπορείτε να χρησιμοποιήσετε το διαχειριστή πακέτων του συστήματος σας ή χρησιμοποιώντας την γραμμή εντολών (αν έχετε σύστημα βασισμένο σε Ubuntu ή Debian):
    $ sudo apt-get -y install virtualbox
    Για χρήστες Windows θα πρέπει να κατεβάσετε το πρόγραμμα εγκατάστασης του VirtualBox από το σχετικό ιστοχώρο.
  2. Ξεκινήστε το VirtualBox:VBox-1 Πατήστε στο εικονίδιο New για να δημιουργήσετε μια καινούργια εικονική μηχανή.
  3. Ρύθμιση του ονόματος της μηχανής: VBox-2 Πληκτρολογήστε Ubuntu-server στο πεδίο Name και πατήστε ‘Next’.
  4. Ρύθμιση του  μεγέθους της μνήμης. VBox-3 Η προκαθορισμένη επιλογή, 512 MB, είναι αρκετή  αλλά μπορείτε να χρησιμοποιήσετε 1024 ή περισσότερη αν έχετε αρκετή διαθέσιμη μνήμη στο πραγματικό σας υπολογιστή.
  5. Ρύθμιση του εικονικού σκληρού δίσκου:
    • Δημιουργία του εικονικού δίσκου: VBox-4
    • Ρύθμιση μορφοποίησης του εικονικού δίσκου: VBox-5 Η μορφή VDI είναι η προκαθορισμένη στο VirtualBox.
    • Επιλογή του τύπου του σκληρού δίσκου: VBox-6 Η επιλογή Fixed size (σταθερό μέγεθος) υποτίθεται ότι ευνοεί καλύτερες επιδόσεις αλλά θα καταλάβει ισάξιο χώρο από τον πραγματικό σας δίσκο. Για πειραματικούς σκοπούς επιλέξτε Dynamically allocated.
    • Επιλογή μεγέθους του σκληρού δίκου: VBox-7 Αν επιλέξατε Dynamically allocated προηγουμένως, τότε ο εικονικός σας δίσκος μπορεί να φτάσει σε μέγεθος τα 2,00 TB χωρίς στην πραγματικότητα να καταλάβει τόσο μεγάλο χώρο στο δίσκο. 40,00 GB είναι υπεραρκετά για αυτό το σενάριο.
  6. Δικτυακές ρυθμίσεις: Η προκαθορισμένη λειτουργία δικτύωσης, για νεο-δημιουργημένες εικονικές μηχανές στο VirtualBox, είναι η NAT.  Αυτή η λειτουργία δεν είναι ιδιαίτερα βολική αν θέλετε δικτυακή πρόσβαση στη εικονική σας μηχανή από τον υπολογιστή σας ή από άλλες μηχανές του δικτύου. Γι’ αυτό συστήνεται καλύτερα η επιλογή Bridged Adapter.

    Προειδοποίηση: σε ορισμένα επιχειρηματικά περιβάλλοντα, η λειτουργία Bridge Adapter μπορεί να ενεργοποιήσει τις άμυνες του δικτύου και να κλειδωθείτε εκτός. Παρακαλώ να συμβουλευτείτε το διαχειριστή του δικτύου πριν το δοκιμάσετε!

    Περισσότερες πληροφορίες για τις διάφορες δικτυακές λειτουργίες του VirtualBox μπορείτε να βρείτε εδώ: VirtualBox Networking Modes
    • Για να ρυθμίσετε το Bridged Networking πατήστε το εικονίδιο Settings:VBox-Net-1
    • Η προκαθορισμένη λειτουργία στο πεδίο Attached to: είναι NAT: VBox-Net-2
    • Αλλάξτε τη ρύθμιση NAT σε Bridged Adapter: VBox-Net-3 Αν έχετε περισσότερες από μια δικτυακές συνδέσεις θα πρέπει να επιλέξετε την κατάλληλη από το πεδίο Name. Συνήθως η σωστή επιλογή είναι eth0 αλλά αυτό δεν ισχύει πάντα. Πατήστε OK και τελειώσαμε με τα δικτυακά.
  7. Ενεργοποίηση της εικονικής μηχανής:
    • Πατήστε το εικονίδιο Start: VBox-8
    • Εκκινήστε το σύστημα από το αρχείο ISO του Ubuntu server: VBox-9 Πατήστε το μικρο εικονίδιο φακέλου στα δεξιά.
    • Επιλέξτε το αρχείο ISO του Ubuntu που κατεβάσατε προηγουμένως: VBox-10
    • Πατήστε το Start για να ξεκινήσει η εγκατάσταση: VBox-11

Η πιο πάνω διαδικασία είναι ευνοϊκή για όσους δεν έχουν κάποιο διαθέσιμο υπολογιστή για δοκιμές. Η χρήση εικονικών μηχανών είναι η ασφαλέστερη μέθοδος για να πειραματιστείτε σε διάφορα σενάρια χωρίς να κάνετε ζημιά στο υπολογιστή σας.

Τώρα αν έχετε κάποιο ελεύθερο υπολογιστή διαθέσιμο μπορείτε να παραλείψετε τα πιο πάνω βήματα και να ακολουθήσετε αμέσως τα επόμενα βήματα. Σε ένα πραγματικό υπολογιστή θα χρειαστεί να «κάψετε» το αρχείο ISO σε ένα CD/DVD ή να το γράψετε σε ένα φλασάκι USB, χρησιμοποιώντας το  usb-creator σε Ubuntu ή το UNetbootin για άλλα συστήματα. Θα χρειαστεί να ρυθμίσετε το σύστημα BIOS/UEFI για εκκίνηση πρώτα από CD ή USB. Σε συστήματα Window 8 ενδεχομένως να πρέπει να απενεργοποιήσετε το έκτρωμα που ονομάζεται Secure Boot.

Εγκατάσταση Ubuntu Server 14.04 (Trusty Tahr)

Ώρα να εφοδιαστείτε με τα αναλγητικά σας γιατί αυτό θα πάρει λίγη ώρα.

  1. Επιλογή γλώσσας: Αν δεν το έχετε ήδη αντιληφθεί, το ποντίκι δεν δουλεύει απ’ εδώ και προς. Με τα βέλη επιλέξτε την γλώσσα και πατήστε ‘Enter’ για το επόμενο βήμα. Αν το  Virtualbox δεσμεύσει το ποντίκι σας πατήστε το δεξί κουμπι Ctrl για να το απελευθερώσει.
  2. Έναρξη εγκατάστασης: http://www.theo-andreou.org/wp-content/uploads/2015/02/ubuntu-server-gr-2.png Επιλέξτε Εγκατάσταση Ubuntu Server και πατήστε ‘Enter’.
  3. Επιβεβαίωση γλώσσας: αν επιλάξατε Ελληνικά θα σας παρουσιάσει το πιο κάτω μήνυμα:

    Επιλέξτε Ναι και πατήστε ‘Enter’

  4. Επιλογή τοποθεσίας:Επιλέξτε τοποθεσία και ‘Enter’
  5. Ανίχνευση διάταξης πληκτρολογίου: Επιλέξτε Ναι αν δεν είστε βέβαιοι για τη διάταξη του πληκτρολογίου σας. Η επιλογή Όχι είναι συνήθως επαρκής εκτός και αν έχετε κανένα περίεργο πληκτρολόγιο.
  6. Επιλογή βασικής διάταξης πληκτρολογίου:
  7. Επιλογή ειδικής διάταξης πληκτρολογίου: Διαλέξτε την πρώτη επιλογή αν δεν είστε βέβαιοι.
  8. Επιλογή μεθόδου εναλλαγής διάταξης πληκτρολογίου: Διαλέξτε Alt+Shift αν έχετε συνηθίσει στην προκαθορισμένη μέθοδο εναλλαγής των Windows.
    • Αναμείνατε μέχρι να ολοκληρωθεί η φόρτωση των αναγκαίων στοιχείων για την εγκατάσταση. Αν δεν είστε συνδεδεμένοι σε ένα δίκτυο με υπηρεσία DHCP ο εγκαταστάτης θα σας καλέσει να δώσετε τις δικτυακές σας ρυθμίσεις. Ζητήστε βοήθεια από το διαχειριστή δικτύου.
  9. Επιλογή ονόματος του συστήματος: Πατήστε’Tab’, επιλέξτε Συνέχεια και μετά ‘Enter’.
  10. Επιλογή ονόματος: Κανείς δεν σας υποχρεώνει να δώσετε το πραγματικό σας όνομα :).
  11. Επιλογή ονόματος χρήστη:
  12. Επιλογή κωδικού πρόσβασης: Αυτός θα είναι ένας προνομιούχος λογαριασμός (μέσω της εντολής sudo) και καλά κάνετε να διαλέξετε ένα δύσκολο, να το μαντέψει κανείς, κωδικό.
  13. Επιβεβαίωση κωδικού πρόσβασης:
  14. Κρυπτογράφηση προσωπικού φακέλου: Αυτό θα προστατέψει τα προσωπικά σας αρχεία αν είστε παρανοϊκός. Για πειραματικούς σκοπούς είναι εντάξει να επιλέξετε Όχι.
  15. Ρυθμίσεις ώρας: Αν η ζώνη ώρας είναι σωστή, επιλέξτε Ναι διαφορετικά Όχι.
  16. Επιλογή μεθόδου διαμέρισης: Η πρώτη επιλογή είναι πιο απλή και μάλλον εντάξει για πειραματικούς σκοπούς. Αλλα σε παραγωγικά συστήματα μπορεί να χρειαστει να αυξομειώσετε τη χωρητικότητα των διαμερισμάτων,  έτσι συστήνεται η μέθοδος LVM.
  17. Επιλογή δίσκου για διαμέριση:
  18. Επιβεβαίωση αλλαγών στο δίσκο που επιλέξατε: Επιλέξτε Ναι και πατήστε ‘Enter’.  Βεβαιωθείτε ότι δεν έχετε οτιδήποτε χρήσιμα δεδομένα σε αυτό το δίσκο!
  19. Επιλογή ποσοστού χωρητικότητας που θα χρησιμοποιηθεί: Είναι εντάξει να χρησιμοποιήσετε όλο τον διαθέσιμο χώρο σε μια πειραματική μηχανή.
  20. Αποθήκευση αλλαγών στο δίσκο: Επιλέξτε Ναι και πατήστε ‘Enter’.
    • Αναμείνατε την ολοκλήρωση της εγκατάστασης του βασικού συστήματος.
  21. Ρύθμιση διαμεσολαβητή (Proxy): Αν δεν χρησιμοποιείτε διαμεσολαβητή αφήστε το πεδίο κενό και προχωρήστε.
  22. Μέθοδος διαχείρισης ενημερώσεων: Αυτό είναι ένα δύσκολο δίλημμα. Αν επιλέξετε Χωρίς αυτοματες ρυθμίσεις τότε μπορεί να ξεχάσετε να εφαρμόσετε τις ενημερώσεις ασφαλείας εγκαίρως και το σύστημα σας να είναι ευάλωτο σε επιθέσεις. Αν επιλέξετε Αυτόματη εγκατάσταση ενημερώσεων ασφαλείας τότε μπορεί να σπάσει το σύστημα σας από μια προβληματική ενημέρωση. Επιλέξτε σοφά!
  23. Επιλογή επιπρόσθετων πακέτων: Είναι καλή ιδέα να εγκαταστήσετε το πακέτο OpenSSH που θα σας επιτρέψει να διαχειριστείτε την μηχανή σας εξ αποστάσεως. Υπάρχει επίσης μια επιλογή LAMP εδώ αλλά θα εγκαταστήσει τη βάση MySQL αντί την MariaDB και ίσως να θέλετε να το αποφύγετε.
    • Αναμείνατε την ολοκλήρωση εγκατάστασης επιπρόσθετων πακέτων.
  24. Εγκατάσταση φορτωτή εκκίνησης GRUB: Eπιλέξτε Ναι σε αυτό το σημείο.
  25. Επανεκκινήστε το σύστημα σας: Επιλέξτε Συνέχεια για να ολοκληρώσετε την εγκατάσταση.
  26. Καλώς ήρθατε στο καινούργιο σας Ubuntu Server: Ubuntu-Server-28 Αν καταφέρατε να φτάσετε μέχρι εδώ συγχαρητήρια! Μόλις εγκαταστήσατε με επιτυχία ένα φρέσκο Ubuntu Serve πανέτοιμο να ροκάρει.

Εγκατάσταση περιβάλλοντος LAMP

Η εγκατάσταση ενός περιβάλλοντος LAMP environment είναι εύκολη.  Χρειάζεται να εγκατασταθεί ο εξυπηρετητής ιστού Apache, η σχεσιακή βάση δεδομένων  MariaDB , η γλώσσα PHP και το πρόσθετο PHP του Apache.

  1. Πριν προχωρήσουμε με την εγκατάσταση του περιβάλλοντος LAMP είναι καλή ιδέα να φορτώσετε στο σύστημα τις τελευταίες ενημερώσεις. Η πιο κάτω εντολή θα κατεβάσει τις λίστες μα τις καινούργιες εκδόσεις των διαθέσιμων πακέτων.
    $ sudo apt-get update
    
    Η πιο κάτω εντολή θα κατεβάσει τα πακέτα προς ενημέρωση, θα αφαιρέσει τα ξεπερασμένα πακέτα και θα εγκαταστήσει καινούργια:
    $ sudo apt-get -y dist-upgrade
    
  2. Εγκατάσταση απαιτούμενων πακέτων:
    $ sudo apt-get -y install apache2 libapache2-mod-php5 mariadb-server php5-mysql 
    
  3. Ορισμός κωδικού για χρήστη root σε MariaDB: mariadb-gr-1
  4. Επαλήθευση κωδικού χρήστη root: mariadb-gr-2
  5. Επιβεβαίωση αντικατάστασης MySQL mariadb-gr-3 Αυτή η επιλογή θα εμφανιστεί μόνο αν υπάρχει προηγούμενη εγκατάσταση MySQL ή MariaDB.

Όταν ολοκληρωθεί η εγκατάσταση όλων των πακέτων είμαστε έτοιμοι να ξεκινήσουμε!

Δοκιμάστε τον εξυπηρετητή ιστού

Πριν τις δοκιμές θα πρέπει να βρούμε τη διεύθυνση IP του εξυπηρετητή. Τρέξτε τη πιο κάτω εντολή στο εξυπηρετητή σας:

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host 
 valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
 link/ether 08:00:27:5a:6e:a9 brd ff:ff:ff:ff:ff:ff
 inet 192.168.56.101/24 brd 192.168.56.255 scope global eth0
 valid_lft forever preferred_lft forever
 inet6 fe80::a00:27ff:fe5a:6ea9/64 scope link 
 valid_lft forever preferred_lft forever

Η διεύθυνση IP σας είναι 192.168.56.101.

  1. Δοκιμή της σύνδεσης ssh με τον εξυπηρετητή: Πρώτα ας ελέγξουμε κατά πόσο δουλεύει η υπηρεσία ssh. Δοκιμάστε την πιο κάτω εντολή στο τερματικό του υπολογιστή σας:
    me@PC:~$ ssh user@192.168.56.101
    The authenticity of host '192.168.56.101 (192.168.56.101)' can't be established.
    ECDSA key fingerprint is e4:e7:ac:6c:68:ea:71:90:29:03:bc:92:8e:23:f7:0e.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.56.101' (ECDSA) to the list of known hosts.
    user@192.168.56.101's password: 
    Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-35-generic x86_64)
    
     * Documentation: https://help.ubuntu.com/
    
     System information as of Mon Sep 15 11:36:04 EEST 2014
    
     System load: 0.09 Processes: 84
     Usage of /: 4.5% of 38.02GB Users logged in: 0
     Memory usage: 13% IP address for eth0: 192.168.56.101
     Swap usage: 0%
    
     Graph this data and manage this system at:
     https://landscape.canonical.com/
    
    Last login: Mon Sep 15 11:36:04 2014
    user@webserver:~$
    Την πρώτη φορά που θα συνδεθείτε με οποιαδήποτε υπηρεσία ssh θα δείτε την προειδοποίηση ότι  «The authenticity of host ‘<myhost(myip)>’ can’t be established.» Αυτό συμβαίνει μόνο την πρώτη φορα που θα συνδεθείτε σε μια καινούργια υπηρεσία ssh και είναι μηχανισμός ασφαλείας απέναντι σε επιθέσεις ενδιάμεσου χρήστη (MITM). Πληκτρολογήστε yes (όχι y!) εδώ. Μετά θα ζητήσει τον κωδικό σας. Δεν θα δείτε τίποτα καθώς πληκτρολογείτε! Αυτό είναι φυσιολογικό. Αν ο κωδικός είναι σωστός θα σας εμφανίσει τις βασικές πληροφορίες του συστήματος και την γραμμή εντολών.
  2.  Δοκιμή του εξυπηρετητή ιστού Apache: Ανοίξτε το φυλλομετρητή σας και πληκτρολογήστε αυτή τη διεύθυνση URL στη γραμμή διευθύνσεων: http://192.168.56.101 Test-Apache Αν δείτε την πιο πάνω σελίδα να εμφανίζεται στο φυλλομετρητή σημαίνει ότι ο Apache είναι έτοιμος.
  3. Δοκιμή PHP: Θα χρειαστεί να δημιουργήσετε το πιο κάτω αρχείο κάτω από το ριζικό κατάλογο (DocumentRoot/var/www/html) του Apache. Πληκτρολογήστε τις πιο κάτω εντολές στο τερματικό του εξυπηρετητή σας:
    $ sudo -i
    [sudo] password for user:
    # cat > /var/www/html/phpinfo.php << EOF
    > <?php phpinfo(); ?>
    > EOF
    # exit
    
    Η εντολή sudo -i θα σας δώσει πρόσβαση ως ο υπερ-προνομιούχος χρήστης root. Προσέξτε πως το σήμα ετοιμότητας αλλάζει από $ σε #.

    Η εντολή cat … θα δημιουργήσει ένα καινούργιο αρχείο /var/www/html/phpinfo.php με περιεχόμενο το κείμενο <?php phpinfo(): ?>.  Αυτός είναι ένας απλός τρόπος να ελέγξετε τις ρυθμίσεις της PHP και να δείτε κάποιες βασικές πληροφορίες του περιβάλλοντος LAMP.

    Η εντολή exit θα σας φέρει πίσω στο λογαριασμό του απλού χρήστη. Δεν θεωρείται καλή πρακτική να είμαστε συνδεδεμένοι σαν root για πάρα πολύ.

    Τέλος πληκτρολογήστε την διεύθυνση http://192.168.56.101/phpinfo.php στο φυλλομετρητή σας και θα πρέπει να δείτε το πιο κάτω αποτέλεσμα: Test-php-1 Αν προχωρήσετε περισσότερο θα δείτε ότι η διεπαφή της PHP για διαχείριση mysql έχει επίσης ενεργοποιηθεί: Test-php-2 Για λόγους ασφαλείας είναι καλή ιδέα να διαγράψετε το αρχείο phpinfo.php όταν τελειώσετε με αυτή την δοκιμή:
    $ sudo rm /var/www/html/phpinfo.php
  4. Εγκατάσταση phpMyAdmin (προαιρετική):
    $ sudo apt-get -y install phpmyadmin
  5. Επιτρέψτε στο διαχειριστή πακέτων να διαχειρίζεται τις ρυθμίσεις του phpMyAdmin: phpmyadmin-gr-1
  6. Πληκτρολογήστε το κωδικό του χρήστη root της MariaDB: phpmyadmin-gr-2
  7. Ορίστε το κωδικό της βάσης δεδομένων του phpMyAdmin: phpmyadmin-gr-3
  8. Επαλήθευση κωδικού: phpmyadmin-gr-4
  9. Επιλογή του σωστού εξυπηρετητή ιστού (apache2): phpmyadmin-gr-5
  10. Ακολουθήστε την διεύθυνση του phpMyAdmin με το φυλλομετρητή σας: (http://192.168.56.101/phpmyadmin): phpmyadmin-gr-6 Χρησιμοποιήστε το όνομα χρήστη root και το κωδικό του χρήστη root στην MariaDB για να συνδεθείτε.
  11. Τώρα μπορείτε να διαχειριστείτε τη MariaDB μέσω του phpMyAdmin: phpmyadmin-gr-7

Αυτή ήταν και η τελευταία δοκιμή για να βεβαιωθούμε ότι όλα δουλεύουν όπως πρέπει. Τώρα μπορείτε να αναπτύξετε την ιστοσελίδα σας σε PHP ή να εγκαταστήσετε μια εφαρμογή PHP όπως το WordPress ή το ownCloud.

You sail with no lights in the midnight dark. Afraid of betrayal by lights from the land, alone and thoughtful, you walk the deck, clutching Aladdin’s lamp in your hand. ~ Nikos Kavvadias ~

In this guide we are setting up an Ubuntu/Linux based webserver with a database backend and using the PHP scripting language. The term LAMP is not related to lighting, nor Middle Eastern tales but refers to the combination of Linux, Apache, MySQL MariaDB and PHP.

Traditionally we have been using MySQL for this task but since Ubuntu 14.04, MariaDB is available from the stock Ubuntu repos. It is recommended to  use MariaDB over the beloved MySQL, because the future of the latter is not so promising after the purchase from Oracle.

We will also be using VirtualBox to install Ubuntu Server on a virtual machine but you can follow this guide on an actual computer or on your cloud/hosting provider.

To complete this guide you will need to download a copy of the latest Ubuntu Server ISO image (current version 14.04.2)

Setting up the Virtual Machine

  1. Install VirtualBox: Make sure you have VirtualBox installed. If not, you can download it from your package manager or from command line (works for Ubuntu and Debian based systems):
    $ sudo apt-get -y install virtualbox
    If you are using a Windows PC you will need to go to the VirtualBox website and download it.
  2. Start VirtualBox:VBox-1 Click on the New icon to create a new virtual machine.
  3. Setup the VM name: VBox-2 Type Ubuntu-server in the Name and click ‘Next’.
  4. Setup the memory size. VBox-3 The default 512 MB is enough but you may use 1024 if you have memory to spare.
  5. Setup the Virtual Hard Drive:
    • Create the Virtual Hard Drive: VBox-4
    • Select the format of the Hard Drive: VBox-5 VDI is the default for VirtualBox.
    • Select the type of the Hard Drive: VBox-6 Fixed size is supposedly better for performance but it will occupy space equal to its size on your disk. For testing purposes choose Dynamically allocated.
    • Select the size of your disk: VBox-7 If you have chosen Dynamically allocated before, then your Hard Drive can be as large as 2,00 TB without actually occupying that much space on the physical  disk. 40,00 GB is more than enough.
  6. Setup Networking: The default network mode for newly created VirtualBox machines is NAT.  This mode is not very convinient if you want to access your VM from the physical host so we are changing that to Bridged Adapter. Warning: in some enterprise environments this could trigger the security defences of your network and lock you out! Please consult with you network administrator before enabling this at work! You can find more information about the VirtualBox networking modes here: VirtualBox Networking Modes
    • To setup Bridged Networking press the Settings icon:VBox-Net-1
    • The default mode in the Attached to: field is NAT: VBox-Net-2
    • Change NAT to Bridged Adapter: VBox-Net-3 If you have more than one ethernet interfaces you will need to choose the correct one in the Name field. Usually the correct value is eth0 but this is not always the case. Press OK and you are done with networking.
  7. Start your VM:
    • Press the Start icon: VBox-8
    • Boot the Ubuntu ISO: VBox-9 Click on the little folder icon on the right side.
    • Select the Ubuntu ISO file you downloaded earlier: VBox-10
    • Press Start to begin the installation: VBox-11

The above procedure is for those that do not have a spare computer for testing. Building a VM is the safest way to experiment with all kind of setups without breaking your working computer.

Now if you do have a spare computer you can skip the steps above and go straight to the steps below. On a physical computer you will need to burn the ISO file on a CD/DVD or write it on a USB stick, using the usb-creator on Ubuntu or UNetbootin  for other systems. You will need to setup your BIOS/UEFI to boot from the CD or USB first. On Windows 8 systems you may need to disable the abomination called Secure Boot.

Setting up Ubuntu Server 14.04 (Trusty Tahr)

Now prepare your pain-killers as this will take some time.

  1. Select the Language for the setup process: Ubuntu-Server-1 This is the language during the installation. Choose English or whatever language you feel comfortable with. If you haven’t figured it out already, the mouse will not work here. Use the arrow keys to select the language and press ‘Enter’ to go to the next step. In case Virtualbox captures your mouse you can press the right Ctrl button to release it.
  2. Start the installation: Ubuntu-Server-2 Select Install Ubuntu Server and press ‘Enter’.
  3. Select the system Language: Ubuntu-Server-3 Again select whatever language you need. This is the language for the system, after the installation is finished.
  4. Select your location: Ubuntu-Server-4 If your location is not listed here choose Other and press ‘Enter’.
  5. Select your location now: Ubuntu-Server-5
  6. Select your country: Ubuntu-Server-6
  7. Select your Locale: Ubuntu-Server-7 If you selected English before you will get a list of English speaking countries to choose from.
  8. Detect keyboard layout: Ubuntu-Server-8 Select Yes if you are unsure of your keyboard layout. No is usually safe unless you have a weird keyboard.
  9. Choose the basic keyboard layout: Ubuntu-Server-9
  10. Select specific keyboard layout: Ubuntu-Server-10 Select the first if you are unsure.
    • Wait for the setup to load all necessary components for the installation. If you are not connected to a DHCP enabled network, you will be prompted to give your network settings. Ask your network administrator for assistance.
  11. Select the hostname of your server: Ubuntu-Server-11 Press ‘Tab’, select Continue and then ‘Enter’.
  12. Enter your name: Ubuntu-Server-12 Nobody forces you to enter your actual name :).
  13. Enter your username: Ubuntu-Server-13
  14. Select your password: Ubuntu-Server-14 This is a privileged account (using the sudo command) so you better choose a hard to guess password.
  15. Verify your password again: Ubuntu-Server-15
  16. Encrypt your home directory: Ubuntu-Server-16 This will protect your personal files if you are paranoid. For testing it’s OK to choose No.
  17. Confirm your timezone: Ubuntu-Server-17 If the time zone is correct select Yes otherwise No.
  18. Select the partitioning method: Ubuntu-Server-18The first option is simpler and probably OK for testing. But on a production server you may need to resize the partitions, create new ones and add more disks, so the LVM method is the recommended.
  19. Select the hard drive for the installation: Ubuntu-Server-19
  20. Confirm if you want to write to this hard drive: Ubuntu-Server-20 Select Yes and press ‘Enter’. Make sure you don’t have any data you need on this drive!
  21. Select Disk Size for the system: Ubuntu-Server-21 It’s OK to give all available disk size on a test machine.
  22. Write changes to disk: Ubuntu-Server-22 Select Yes and press ‘Enter’.
    • Wait for the Base system installation to complete
  23. Setup your proxy server: Ubuntu-Server-23 If you do not use a proxy server leave this field blank.
  24. Method to manage upgrades: Ubuntu-Server-24 This is a tricky dilemma. If you choose No automatic updates you may forgot to apply updates and render your system vulnerable to attacks. If you choose Install security features automatically your system could break after an update. Choose wisely!
  25. Choose additional software to install: Ubuntu-Server-25 It is a good idea to enable the OpenSSH server so you can access your machine remotely. There is also a LAMP option here but this will install the MySQL server  instead of MariaDB and you may wish to avoid that.
    • Wait for the additional software to be installed.
  26. Install the boot loader: Ubuntu-Server-26 Select Yes here.
  27. Restart your machine: Ubuntu-Server-27 Press Continue to restart the system.
  28. Welcome to your newly created Ubuntu server: Ubuntu-Server-28 Congratulations if you have reached so far! You have just installed a fresh Ubuntu server ready to rock!

Installing the LAMP stack

Installing a LAMP environment is easy.  We will need to install the Apache webserver, the MariaDB relational database, PHP and the Apache PHP module.

  1.  Before we proceed with the LAMP stack installation it is a good idea to update/upgrade our system.The command below will download the lists containing the most fresh version of available packages.
    $ sudo apt-get update
    
    The following command will download the packages to be upgraded, remove obsolete packages and download new ones:
    $ sudo apt-get -y dist-upgrade
    
  2. Installing necessary packages:
    $ sudo apt-get -y install apache2 libapache2-mod-php5 mariadb-server php5-mysql 
    
  3. Set the root password for MariaDB: MariaDB-1
  4. Verify root password: MariaDB-2
  5. Accept the warning: MariaDB-3

After the packages installation is finished we should be ready to go!

Testing your web server

Before testing we need to determine the IP address of the server. Run this command on the terminal of your webserver:

$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
 inet 127.0.0.1/8 scope host lo
 valid_lft forever preferred_lft forever
 inet6 ::1/128 scope host 
 valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
 link/ether 08:00:27:5a:6e:a9 brd ff:ff:ff:ff:ff:ff
 inet 192.168.56.101/24 brd 192.168.56.255 scope global eth0
 valid_lft forever preferred_lft forever
 inet6 fe80::a00:27ff:fe5a:6ea9/64 scope link 
 valid_lft forever preferred_lft forever

The IP of your server is 192.168.56.101

  1. Testing your ssh connection: First lets check if ssh works on your server. Type the following command from the terminal of your PC:
    me@PC:~$ ssh user@192.168.56.101
    The authenticity of host '192.168.56.101 (192.168.56.101)' can't be established.
    ECDSA key fingerprint is e4:e7:ac:6c:68:ea:71:90:29:03:bc:92:8e:23:f7:0e.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.56.101' (ECDSA) to the list of known hosts.
    user@192.168.56.101's password: 
    Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-35-generic x86_64)
    
     * Documentation: https://help.ubuntu.com/
    
     System information as of Mon Sep 15 11:36:04 EEST 2014
    
     System load: 0.09 Processes: 84
     Usage of /: 4.5% of 38.02GB Users logged in: 0
     Memory usage: 13% IP address for eth0: 192.168.56.101
     Swap usage: 0%
    
     Graph this data and manage this system at:
     https://landscape.canonical.com/
    
    Last login: Mon Sep 15 11:36:04 2014
    user@webserver:~$
    The first time you connect to any ssh system you get the warning that The authenticity of host ‘<myhost(myip)>’ can’t be established. This happens only the first time and it is a safe-guard against MITM attacks. Type yes (not y!) here. Then it will ask for your password. You will see nothing as you type it! That’s normal. If you password is correct you will be greeted by the system information in the command prompt.
  2. Testing your Apache webserver: Fire up your browser and type this URL in the address bar: http://192.168.56.101 Test-Apache If you can see the above page in your browser, it means that your Apache webserver is up and running.
  3. Testing PHP: You need to create the following file under the Apache DocumentRoot (/var/www/html): Type the following commands on your server terminal:
    $ sudo -i
    [sudo] password for user:
    # cat > /var/www/html/phpinfo.php << EOF
    > <?php phpinfo(); ?>
    > EOF
    # exit
    $
    The command sudo -i will give you access as the super-privileged root user. Notice how the prompt changes frpm $ to #. The command cat … will create a new file /var/www/html/phpinfo.php with the content <?php phpinfo(): ?>. This is a nice way to test your PHP setup and get some basic information about your LAMP setup. The command exit will take you back to your normal user account. It is not considered a good practice to be logged in as root for too long. Finally direct your browser to http://192.168.56.101/phpinfo.php and expect to see something like this: Test-php-1 If you scroll further down you will see that mysql is enabled too: Test-php-2 For security reasons it may be a good idea to delete the phpinfo.php file afterwards:
    $ sudo rm /var/www/html/phpinfo.php
  4. Install phpMyAdmin (optional):
    $ sudo apt-get -y install phpmyadmin
  5. Let the package management system handle phpMyAdmin configuration: phpMyAdmin-1
  6. Type the MariaDB root password: phpMyAdmin-2
  7. Set the phpMyAdmin database password: phpMyAdmin-3
  8. Verify the password: phpMyAdmin-4
  9. Choose the correct webserver (apache2): phpMyAdmin-5
  10. Visit the phpMyAdmin URL: (http://192.168.56.101/phpmyadmin): phpMyAdmin-6 Use the username root and the MariaDB root password to login.
  11. Now you can manage MariaDB through phpMyAdmin: phpMyAdmin-7

This was the final test that ensures everything works as expected. Now you can start developing your PHP website or install a PHP application like WordPress or ownCloud.