Module 2
Module 2 introduces you to Linux, a command-line environment, the Apache web server, and PHP. You will create and configure your own cloud instance, install Apache and related software, and then form groups to make a simple file sharing site.
DO NOT WAIT UNTIL THE LAST MINUTE TO START ON THIS (or any) MODULE! The most common reason students perform poorly in this class is procrastination. You have been warned.
Reading
The following articles on the online class wiki textbook contain information that will help you complete the assignments.
- Linux
- Bash
- Amazon Web Services
- Web Server Configuration
- PHP
- Text Editing
- Web Application Security, Part 1
Individual Assignments
Learn About Linux
Linux is an open-source operating system based on UNIX. Linux is highly versatile and is used in a wide range of applications.
If you are not a Linux guru, read the Linux guide to get started: Linux
Create an AWS EC2 Instance
Once you understand Linux, you need to set up your Amazon EC2 Instance. Use the AWS article to guide you through the process: Amazon Web Services
Configuring Your Instance
Installing Essential Packages
Recall that software installation in Linux instances is usually handled through apt (Debian) or yum (RHEL). For more information, refer to the Linux guide.
To make sure everything is working properly, install your first package(s) according to the Essential Packages subsection in the Linux guide above.
Add your Own User Account
On your EC2 instance, set up your own personal account.
For information on how to add a user account, see the Linux guide: Linux#User Management
You need to do the following things once you've created your account:
- Add your account to the Sudoers list. Instructions are in the Linux guide.
- Allow your user to log in via SSH. Instructions are in the Web Server Configuration guide: Web Server Configuration
From now on, you should log into your EC2 instance using only your own username and not the default username that Amazon gives you (ec2-user or ubuntu).
Set the Timezone
Set your server to use US Central time. Instructions are in the Linux guide: Linux#Synchronizing Date and Time
Set Up the Apache Web Server
You need to install the Apache web server on your EC2 instance. Instructions are in the Web Server Configuration guide: Web Server Configuration#Apache
In order for your web server to be accessible, you need to open up Port 80 on your EC2 instance. Instructions are in the AWS guide: Amazon Web Services#Enabling Web Access to your EC2 Instance
Enable the UserDir module in Apache. Instructions are in the Web Server Configuration guide: Web Server Configuration#Enabling the UserDir Module
Installing PHP
You need to install PHP on your EC2 server. Instructions are at the top of the PHP guide: PHP
You need to configure PHP to show errors. Instructions are immediately below installation in the PHP guide.
Learning the PHP Language
Before you can continue, you will need to make yourself acquainted with PHP language components. Read the PHP guide for an overview: PHP#PHP Language Components
Calculator
Make a calculator using PHP and an HTML form. The form should have two inputs. The form should submit a GET request either back to the same page or to a different results page. The calculator should support addition, subtraction, multiplication, and division by means of a radio button group on the page. For 2 points of extra credit, add a fifth operation that raises x to the power of y. (Consider edge cases, like decimal numbers and division by zero!)
Group Project
You will work in pairs (that means you and one other person) on this project.
In this module, and all future modules, the group portion builds off of material you learn in the individual portion. You should therefore complete the individual portions prior to working on the group portions. (Trust us: it will make your life easier!)
Important Reminder: frequently commit your work to your repository as a backup!
Simple File Sharing Site
You will be making a simple file sharing site that supports uploading, viewing, and deleting files associated with various categories. Details:
- You should have a file named categories.txt stored in a secure place on your filesystem. It should have at least three categories, with one category per line.
- Users of the file sharing site should be able to choose a category and see a list of all files associated with that category.
- Users should be able to view, upload, and delete files in any category.
- The URI should NOT reveal the internal file structure of your web site.
- Example of what not to do: http://www.example.com/download.php?file=/home/paul/file.txt
- Another bad example: http://www.example.com/~user/file.txt
- Good example: http://www.example.com/view.php?category=music&name=file.txt
- In general, don't reveal any internal information about the site.
- Food for thought: Given that Apache processes (with the exception of the main process) do not run as root, but rather as the user apache, how can you allow both your user account and the php scripts to read and write the necessary files?
- You should customize your file sharing site by implementing an additional feature or two as part of the creative portion.
You will probably find the PHP guide on this wiki to be helpful: PHP#Other PHP Tips
Web Security and Validation
Your project needs to demonstrate that thought was put into web security and best practice. For more information, see this week's Web Application Security guide: Web Application Security, Part 1
In particular:
- Your application needs to be safe from CSRF attacks. That is, you should pass tokens when uploading and deleting files in order to prevent request forgeries.
- Your project must pass the W3C Validator with no errors. For more information, see the HTML and CSS guide: HTML and CSS#Validation
Tips on Editing Files
You should tune your development environment to save you headaches throughout the semester. Instructions: Text Editing
Grading
We will be grading the following aspects of your work.
- Cloud Instance and Web Server:
- You can SSH into your instance using your own custom username.
- Your custom username is able to perform SUDO commands.
- The time zone is correct on your instance.
- The UserDir Apache module is working.
- PHP Calculator:
- The calculator is able to perform all four functions.
- The source code of your calculator is committed to your personal repository.
- Extra credit: the calculator is able to raise a number to a power.
- File Sharing Site:
- At least three different categories can all have unique uploaded files.
- Users can upload and delete files associated with any category. If a file is "deleted", it should actually be removed from the filesystem.
- Existing files can be viewed.
- The directory structure is hidden.
- Safe from CSRF attacks.
- All HTML documents served by the site pass the W3C validator.
- Site is intuitive to use and navigate.
- The source code of your file management site is committed to your group repository.
- Creative Portion (see below)
Creative Portion
This module, and all future modules, will require that you invest some time into creating additional features for your group project. Plan to invest at least 60 minutes of your time into the creative portion.
- The creative portion is an opportunity for you to learn material of your own interest.
- You will not earn credit for a creative-portion feature that simply rehashes something you've already done in a previous module.
If you need ideas for a creative portion, or if you want to know whether or not your creative portion idea is "hard enough", ask a TA.