Franske ITC-2480 Lab 5

From ITCwiki
Jump to navigation Jump to search

Introduction

In this lab you will learn about static network configuration of Debian Linux systems, how to install PHP and MySQL on your server, experiment with websites and databases, and some of the standard log files on your system.

Lab Procedure

Prerequisites

  1. Open an SSH console to your Linux system using the PuTTY software, login with your standard user account
  2. Make a note of the static IP address information for your particular system in the table below, it is based on the system name identification letter in vmWare. These IP addresses will ONLY be valid in the ITC vmWare Linux class subnet. If you are working on a local VirtualBox system you will need to select an available static IP from the correct subnet for your system or skip the static IP addressing section. All vmWare systems will use a gateway address of 172.17.50.1 and a subnet mask of 255.255.255.0 with two nameservers 172.17.139.10 and 172.17.139.110
System ID Static IP
A 172.17.50.11
B 172.17.50.12
C 172.17.50.13
D 172.17.50.14
E 172.17.50.15
F 172.17.50.16
G 172.17.50.17
H 172.17.50.18
I 172.17.50.19
J 172.17.50.20
K 172.17.50.21
L 172.17.50.22
M 172.17.50.23
N 172.17.50.24
O 172.17.50.25
P 172.17.50.26
Q 172.17.50.27
R 172.17.50.28
S 172.17.50.29
T 172.17.50.30
U 172.17.50.31
V 172.17.50.32
W 172.17.50.33
X 172.17.50.34
Y 172.17.50.35
Z 172.17.50.36

Set a static IP

  1. Take a look at this site and this site to understand how network interface names in Debian 9 and later are identified.
  2. Using your text editor of choice, open up the file /etc/network/interfaces
  3. Notice how it is currently set to dhcp for the ens192 interface.
  4. To set a static IP, you will need to change iface ens192 inet dhcp to iface ens192 inet static.
  5. Now, under the iface line you just edited, you will need to enter the address, netmask, and gateway for the static network.
    • Reminder: it is common practice to indent (tab) static network configuration information in the interfaces file.
  6. Your configuration should be similar to this:
allow-hotplug ens192
iface ens192 inet static
	address xxx.xxx.xxx.xxx
	netmask 255.255.255.0
	gateway 172.17.50.1
	dns-nameservers 172.17.139.10 172.17.139.110
  1. Now save the file, and exit your file editor.
  2. Now we are going to apply the static IP change. Try using ip address show to view your active configuration now and you should see that your old address is still active.
    • NOTE: You should only make network configuration changes when you have physical access to a machine. This way, if you mess up your configuration you will be able to fix it from a local console. If you lose working SSH access to your system after making these changes you'll need to connect in through the VMware console interface (which is equivalent to physical access) and find and correct your configuration issues.
  3. Using the ifdown and ifup command, we are going to restart the network interface, this step is required to apply the change.
  4. In a terminal, run sudo ifdown ens192 && sudo ifup ens192. Notice the two && symbols. This tells the Linux shell that it should run the second command right after the first. If we do not define this, then we would be left with a machine that has its networking turned off.
  5. At this point, your machine should now be using a static address. You may receive an error message indicating that an address cannot be assigned which is related to your old DHCP address still being on the interface as well. Use ip address show to verify the new IP address is assigned to the interface.
  6. Used a ping command from your local PC to try pinging both the old DHCP address as well as your new static address of your VM.
  7. Once you have verified the VM is responding on the new static IP address reboot the system to ensure the old DHCP address is removed by restarting your VM with sudo shutdown -r now Note you will lose your SSH connection because the IP your SSH session is connected to is no longer in use by your VM.
  8. Reconnect through SSH to your new IP address and verify it is now applied using the ip address show command.

Install PHP & MySQL/MariaDB

  1. Using apt, install the php7.0 and mariadb-server packages as well as the php7.0-mysql package which provides the link between php and mysql
    • Note: Remember to do an apt update before installing packages to make sure you get the latest versions
    • Note: Maria-DB is a fully compatible replacement for MySQL that isn't controlled by Oracle.
  2. After the dependencies are found, go ahead and accept them to continue the install.
  3. During the mariadb-server install, you will see a blue window (similar to the Debian install screen) that will ask you to create a database root password. This password is what will be used to access the root account in mysql. Just like in linux, the mysql root account has full control of all databases hosted on the system. It does not need to be the same as your system root password but just like your system root password it is important that you keep it secure and don't forget what it is.
  4. After the install is complete, cd to /var/www/html which is the root directory of your webserver and so where all website files are served from.
  5. In order to fully enable the PHP-MySQL module you should restart your Apache webserver. You don't need to restart your entire system to do this. Do some research on the "apache2ctl" or the "service apache2" commands which can be used to do this.
  6. At this point we will test to verify that php is working properly with Apache. Create a new file named phptest.php, and then open it in a text editor.
  7. Enter the following into the file:
    <?php
    phpinfo();
    ?>
  8. Now save the file, and on your local machine go to xxx.xxx.xxx.xxx/phptest.php in a web browser where xxx.xxx.xxx.xxx is your VM's static IP. You should now be on a page that shows your PHP Version, and system information. Use the "View Source" option in your browser to see what the HTML source code is for the page you're viewing is. Is it the same or different than the .php file you created? Why? How is this different than a standard .html file?

Experiment with Website PHP

  1. In a previous lab we learned about editing the /var/www/index.html file to change the default web page displayed by your server. In a future lab you will install some PHP/MySQL based software which powers many Internet sites with forums, blogs, etc. Before we can do that we need to learn a little more about PHP and about databases. Like most software on Linux the Apache webserver configuration files are stored in the /etc directory. Specifically, you can find several of them which work together and are called from each other in /etc/apache2/ take a look in the /etc/apache2/sites-enabled/ directory. See how symlinks are used to point to configuration files which actually reside in the /etc/apache2/sites-available/ directory? This allows us to turn off and on various sites by creating or removing a symlink rather than by deleting the actual configuration file, a handy thing if we just want to temporarily disable a site. In fact Apache provides a utility to automatically add and remove these links called a2ensite and a2dissite. Check the man pages for these commands to see how they work.
  2. As you might have guessed the default site for your system is configured by the file linked to at /etc/apache2/sites-enabled/000-default If you open this file in your favorite text editor you will see a series of what Apache calls "directives" which explain how the webserver should function, what port it should listen on, where the website files will reside (/var/www/html), etc. Going into all of the different Apache directives is outside of the scope of this course but you will find a lot of documentation about them on the Internet.
  3. In addition to configuring Apache directly through it's configuration files you can also configure it through an interface like Webmin which we installed in a previous lab. Bring up the Webmin configuration page for Apache and take a look at the settings for the default site. Note how the things you saw directly in the configuration file match up with what you see in Webmin. One of the things you may be interested in seeing is how the webserver knows to display the index.html file from a directory if it exists and no specific file is requested in the URL. Take a look on the "Directory Indexing" page and see if you can find this information. You'll notice that there is a list of files, not just index.html which the server will display.
    • Note: You may need to refresh your Webmin modules or "scan for new modules" if you haven't done that since installing Apache and Webmin. Webmin scans your system for compatible server software packages (like Apache) when it is installed but needs to re-scan it's modules after you install new server software before you can configure it through Webmin.
  4. In another section of this lab you created a basic phptest.php file and saw how the server executed the PHP code and turned it into an HTML page your browser could display. Because PHP offers an easy way to write web applications it powers much of the Internet. To prepare us for setting up some PHP applications in a future lab it will be helpful to know a little about how PHP scripts work. Read through the W3 Schools PHP Basics Tutorial (PHP Intro through PHP Superglobals) and try creating some PHP scripts on your own Linux server like the examples given in the tutorial pages to see if you can get them to run, try modifying them a little bit and see what the results are. There are many great Internet resources devoted to understanding how to do things with PHP so take some time to see how this language can be easily integrated in websites. You should definitely be familiar with editing PHP files to change variables, echo statements, etc. work which are all skills you'll need when installing PHP based website software.
  5. Try writing some simple PHP scripts on your own using variables and echo statements and make them available through your webserver. Edit your index.html file (or create a new index.php file which will be loaded instead if it exists) so there is a list and links to the various scripts you have created as part of your PHP experimentation.
    • Note: You will need to be familiar with the very basics of editing HTML files in order to create links, etc. If you haven't done this before there are many introductory HTML tutorials available online.

Experiment with Databases

  1. In order to do really powerful things with a website we need a database where we can store dynamic content which can be queried to automatically build site pages from a template. One of the most common databases is an SQL database, and MySQL has long been the most prevalent Linux SQL software. These days MariaDB, which we installed, has been taking some MySQL marketshare because it is a community developed program instead of MySQL which is now owned by Oracle. The MariaDB software and MySQL software are essentially equivalent, especially for small sites/databases, and the same commands are used interchangably including using the mysql command to access them. SQL itself is a standard language for interacting with a specific type of database called a relational database, we'll see why it's called a relational database in a minute. Each database is a collection of data stored in tables. You can think of a table as something like a spreadsheet with rows and columns, except we call the columns fields and the rows records (sometimes we actually call them rows too). The different tables are often related to one another, of course they are usually being used by the same web application, but usually the relationship goes deeper than that as we'll see in a little bit.
  2. To jumpstart our exploration of databases we'll download a pre-built sample database with a few tables and many records already in it and import it into our MySQL database server. Download the employees database file employees_db-full-1.0.6.tar.bz2 (about 26MB) and get it into your home directory. Instead of using the links browser to do this or downloading to your computer and then pushing this large file back across the Internet with an SCP/SFTP client like FileZilla a better choice might be to learn about the wget program which can be used like "wget https://launchpad.net/test-db/employees-db-1/1.0.6/+download/employees_db-full-1.0.6.tar.bz2" to download the file into your current working directory.
  3. Figure out how to use the tar program to unpack this .tar.bz2 file. Note that this file uses bz2 compression which takes longer to compress than gzip but can compress the files more. Once unpacked you should have an "employees_db" folder.
  4. Inside the employees_db folder you should have a number of .sql script files and dump files which can be used to restore the database to your system. Take a look at the employees.sql file, it's just a text file, which describes the format of the database. Also take a look at the load_employees.dump file, also just a text file, which contains all of the records from the employees table of the database. Note there are 300,000 some employee records in this database so you probably don't want to just use cat to view these files as it could take a while to print them out to your screen. Using the less program would be a better choice as it will allow you to exit viewing the file by pressing q at any time.
  5. We can interact with the MySQL/MariaDB server in many different ways. The first way we'll take a look at is through the command line mysql program. Run the "mysql -u root -p" command and enter the MySQL root password (which may be different than they system root password) to login to the mysql program with root permissions. The MySQL program actually stores it's own usernames and passwords as a MySQL database itself, you can create and modify these permissions from the mysql command line but we'll learn more about modifying them through the Webmin interface later.
  6. MySQL has it's own command line language the you can use through the "mysql>" prompt you are now running. For example, if we want to see a list of databases on the system we can run "SHOW databases;" run the command and note the databases that already exist by default.
    • Note: Each MySQL/MariaDB statement ends with a semicolon (;) if you do not put the semicolon at the end of the line the command will not execute when you press enter and you will be able to continue to add more commands to the statement before finishing with a semicolon. If you accidentally press enter without ending with a semicolon you can just enter a semicolon on the next line and press enter.
  7. To import the employee database we can use the "source employees.sql;" command (assuming we were already working in the directory which contains the employees.sql file when we launched mysql. Import the employee database and verify the system now has an employees database.
  8. If we want to see all of the tables in the employees database we must first select the database we want to work on using the "USE employees;" command, run this followed by the "SHOW tables;" command to see a list of tables.
  9. To see a list of all the records in a table we need to run a SELECT query "SELECT * from <tablename>" like "SELECT * from employees" which will list all the records in the employees table of the employees database and display them. Remember that we previously selected to USE the employees database, this will be remembered until we USE a different database. Try displaying the records in a couple of different tables like employees and departments.
  10. There is much more that we can do from the MySQL/MariaDB command line but that would be a whole class or more itself. The MySQL/MariaDB programs are well documented on the Internet and with these basic skills you should be able to figure out most of it. Remember, the vast majority of what you read about MySQL will also work in MariaDB and vice-versa.
  11. Now that you have learned a bit about MySQL databases from the command line let's see how they look in the Webmin web management interface. Log back in to your Webmin interface through a browser on your host system.
  12. Because MySQL was not installed when we first setup Webmin you need to "scan for new modules" first. Once that process has finished refresh the page to see that MySQL has been added to the server section of Webmin.
  13. Take a look at the Webmin MySQL module and see how MySQL users and permissions are configured.
  14. Try browsing through the employees database using the Webmin interface including viewing tables and records inside of the tables.
  15. Go back to your MySQL command line window and run the command "DROP DATABASE employees;" to delete the entire database. Obviously the DROP command is one to be careful with as you can easily wipe out a huge database with one line! Type "exit;" to quit the MySQL program and return to a Linux shell.

View Logfiles

  1. Linux stores most of log files in the /var/log directory so change your working directory to /var/log.
  2. Some log files are viewable by all users on the system but other log files may be restricted and you will need to use sudo to view them.
  3. Linux log files are typically standard text files and can be read with standard text file utilities like cat or less. One additional utility which comes in hand is the tail program which displays the last 10 lines (by default) of a text file and which can be configured to display more or less lines using a command like tail -20 /var/log/syslog which will display the last 20 lines of the main system log file. The manual page for the tail command contains additional information like how to use the -f option to view a log in realtime (exit with Ctrl-C).
  4. Take a look at some of the log files on your system and see what kinds of information they contain specifically you should probably look at syslog, auth.log, kern.log, apache2/access.log, and apache2/error.log
  5. In order to prevent log files from completely filling your drive old log files are eventually rotated on the system and compressed and then finally deleted. Take a look at some of the rotated log files like /var/log/syslog.1 or /var/log/kern.log.1 which will contain slightly older log entries.