Course Reflection
Before taking CYSE 270, I already had some experience working with Linux and a basic understanding of how it works; however, this course helped build on that experience and deepened my knowledge by giving me more hands-on practice with Linux systems. Throughout the semester I worked with the command line, user and group management, file permissions, storage, Bash scripting, task automation, and networking. I used the labs to both increase my skills in areas that I already had experience with and to learn about areas in which I had less experience. For instance, while I had some experience with John the Ripper, I used it in this class to gain further experience with password security. Additionally, my experience with Bash scripting and the crontab allowed me to learn about the different ways to automate tasks within Linux. My experience with networking and subnetting was also refreshed within the course as well as my experience using the various networking tools available to Linux distributions. CYSE 270 has allowed me to expand my knowledge of Linux and my experience using the various skills that I learned within the course. Furthermore, I have become more comfortable within the Linux environment, and I have a better understanding of how the concepts of Linux relate to the work that is performed in the field of cybersecurity.
Labs
Throughout CYSE 270: Linux Systems for Cybersecurity, I completed a series of hands-on labs that allowed me to develop practical experience working with Linux systems. These labs helped me apply concepts covered in the course while strengthening my technical skills and understanding of how Linux is used within cybersecurity. This section highlights the labs I completed throughout the course. For each lab, I reflect on my experience, the skills and concepts I learned, the challenges I encountered, and the key takeaways I gained from completing the lab.
Lab 1- Create a Virtual Machine
Overview
In this lab, I learned how virtual machines work and how they can be used to run Linux without installing it as the primary operating system on a computer. I chose to use Oracle VirtualBox to configure my virtual machine and install Kali Linux, which became the Linux environment I used throughout the course. During the lab, I learned how to properly set up the VM and became more familiar with navigating the Linux terminal. I also practiced basic commands such as ls, pwd, date, and echo.
One of the challenges I faced was becoming familiar with the initial setup and configuration of the virtual machine. Working through the process helped me better understand how virtualization works and how system resources can be allocated to a VM. Overall, this lab gave me a strong introduction to working with Linux in a virtual environment and provided the foundation I needed for the labs that followed.
Lab 2 – Working with Command Line
Overview
Within Lab 2 I learned how to use absolute and relative paths to navigate to directories, view files within the system, view information regarding the files, and perform tasks on the files within the system. I also learned how to create directories and files within the system, as well as copy, rename, and remove files and directories from the system. One of the challenges of using Linux was navigating the file system without the use of the graphical interfaces that are often available to other terminals. Each of the commands helped to teach me more about the Linux operating system, its structure, and the efficiency of some of the tasks that can be performed on the system through the command line interface. Overall, this lab helped me to gain more experience using the Linux operating system and develop confidence in utilizing the system and its command line interface.
Lab 3 – VI Editor
Overview
Lab 3 introduced me to the VI editor and allowed me to see a completely different way of editing files on Linux. I was introduced to how to navigate through files using the terminal only. I practiced using the terminal to navigate through files by lines, words, and sentences. I also practiced inserting, deleting, and copying and pasting text within files. Additionally, I learned how to replace multiple instances of text within a file and save the file. The most challenging aspect of using VI was learning the different modes within VI. It was challenging to remember if I was in command or insert mode. Additionally, it was challenging to remember all of the commands within VI. I now have a better understanding of the usefulness of VI within Linux. Being able to open and navigate files from the terminal and edit them directly is very useful, especially if there is no graphical interface available. This lab allowed me to venture outside the norm of how I normally edit files. Instead, I am more comfortable editing files directly from the command line.
Lab 4 – User and Group Accounts
Overview
Lab 4 allowed me to play with the various ways to manage user and group accounts on the Linux operating system. I was able to create a new user account with their home directory, set their password, set their default login shell to the Bash shell, and add them to the sudo group to allow them to perform administrative tasks on the machine.
I also learned how to create groups, assign them a GID, and add users to those groups as well as view the information regarding the accounts and groups on the machine. Finally, I learned how user and group ownership plays a key role in managing access to the Linux operating system. This type of account and ownership management gives users a better understanding of the various administrative tasks that can be performed on a Linux machine and why managing user and group accounts is important for the security of the system.
Lab 5 – Password Cracking
Overview
Lab 5 was one of the more cybersecurity-focused labs, as it demonstrated the impact that password complexity can have upon password security. I created six Linux user accounts with passwords of varying complexity. Each account had passwords ranging from dictionary words to four-digit passwords to passwords that utilized capital letters, numbers, and special characters. The password hashes for each of these users were exported, and each was cracked using John the Ripper with the rockyou.txt wordlist. This allowed me to gain experience with password hashes and cracked passwords using John the Ripper. One of the more challenging parts of this lab was understanding how the structure and complexity of each password affected the cracking process. Working with different password types allowed me to compare which passwords were more vulnerable to a wordlist-based attack and which were more difficult to crack. Overall This lab showed me the difference that password complexity can make in cracked passwords. It also allowed me to see the management of Linux accounts and the risks of weak passwords for those accounts.
Lab 6 – File Permissions
Overview
Lab 6 allowed me to learn about file permissions between multiple users of the system. I created several users and groups for the system, assigned groups to specific users, and allowed multiple users to have access to a shared directory. I also worked with the permissions for read, write, and execute files and learned how to use octal numbers to reflect these permissions.
Lastly, I worked with the umask feature of Linux to control the permissions for newly created files. Furthermore, I created files that I shared between users and verified that the ownership and group permissions for those files ensured that other users had the appropriate access to those files.
The most interesting part of this lab was playing with the SGID permissions on a shared directory. I was able to view how a file was accessed both before and after changing the SGID settings on the directory. I also got to play with the sticky bit and see how it can help prevent users from being able to delete files that they do not own within a shared directory.
This lab helped me to understand the Linux access control system. I now understand how the different access permissions, ownership, groups, umask, SGID, and the sticky bit all work together to provide the appropriate level of protection for files within a Linux system with multiple users.
Lab 7 – Storage Management
Overview
Within lab 7, I explored how Linux detects and manages local storage. I used commands like fdisk and parted to view the hard disks that were currently installed on the machine and its partition tables. Additionally, I also added a new virtual hard disk device to the VM that was running Linux, then compared the system before and after adding the new device.On the newly added hard disk, I created a primary partition of 200 MB of data and formatted it with an ext4 partition. I also created a directory named /cyse in the Linux machine and used it as a mount point for the newly created partition. I utilized the df command to view if the partition was properly mounted to the system before creating a file on that partition and unmounting it.
Overall, this lab enabled me to understand the difference between adding a device to a Linux machine versus preparing that device to be utilized by the machine. From detecting the device, partitioning it, formatting it, mounting it, and unmounting it, I have gained an understanding of how the Linux operating system manages local storage devices via the command line.
Lab 8 – Shell Script
Overview
Lab 8 taught me about shell scripting; it showed me how Linux commands that can be combined together allow for automation of various tasks. I used what I learned about the shebang and the chmod command to create and execute my scripts. One script asked for a number from the user and used an if statement to determine whether the number entered was greater than 10. Thus, I used user input within the script.
The other script asked for a file name from the user, determined its type, and executed different commands based upon that determination. Therefore, I gained experience using the script to make decisions based upon conditions rather than executing the same commands within the script.
Overall, using scripts significantly increases the efficiency with which a user can perform tasks within the Linux operating system. Scripts allow for automation of tasks that would otherwise have to be performed manually. Thus, I have gained an understanding of how Bash scripting can be helpful in the fields of Linux system administration and cybersecurity.
Lab 9 – Task Automation
Overview
Overall this lab gave me experience with automating tasks using Linux.
I wrote a Bash script that would backup Alice’s home directory. The script would create a filename with my MIDAS name and the date, move the files to the /var/backups directory, and compress the files to conserve storage space on the system. I used crontab to automate this script to run automatically without me having to execute it each time.
One of the more important concepts to learn in this lab was how to write a Bash script and crontab entries to automatically perform a task. Additionally, I had to consider the Linux permissions for the /var/backups directory since it is owned by the root user. Finally, I also learned about the importance of managing automation tasks with cleanup tasks to avoid filling up the disk with backups of files.
Automating tasks on Linux provides convenience for the user. However, tasks like creating backups of systems and directories can be automated with tools like crontab to ensure that they are always performed. Thus, automation tasks can be used for more than just convenience but also for managing a Linux system.
Lab 10 – Networking Basics
Overview
This lab helped me refresh my networking skills I had learned previously. I used different IP addresses and subnet masks, specifically some /28 and /26 subnets, to find the appropriate address for each of the variables, like the network address, the broadcast address, the first and last usable IP address, and the number of hosts that could exist in that network. Furthermore, I practiced looking at the IP addresses in both decimal and binary. I had learned about subnetting before, but this assignment allowed me to review the concept. It is important to have a firm understanding of IP addresses and subnetting even within the Linux operating system. Furthermore, these concepts also relate to cybersecurity in that understanding the communication between network devices is half the struggle in securing those networks and devices.
Lab 11 – Basic Network Config
Overview
This lab allowed me to gain even more experience with networking from within the Linux machine. I utilized the Linux machine in my virtual machine to perform tasks with tools such as ifconfig, route, netstat, ping, and host to gather information about my system’s network configuration. I also played with the system’s hostname and changed it permanently to gain experience with Linux network settings. The most useful tool in this lab was changing the virtual machine from NAT mode to bridged mode and observing the difference in the information displayed by the networking tools before and after the change. This allowed me to gain an understanding of how the network mode for the virtual machine impacts the machine’s ability to connect to the network. Overall, I became more comfortable with utilizing the Linux machine tools to view the network connection of the system. Knowing how to interpret the information provided by these tools is essential for those interested in the cybersecurity field.