{"id":480,"date":"2026-04-28T13:50:32","date_gmt":"2026-04-28T13:50:32","guid":{"rendered":"https:\/\/sites.wp.odu.edu\/nrstephens\/?page_id=480"},"modified":"2026-04-29T23:04:17","modified_gmt":"2026-04-29T23:04:17","slug":"cyse-270-coursework","status":"publish","type":"page","link":"https:\/\/sites.wp.odu.edu\/nrstephens\/cyse-270-coursework\/","title":{"rendered":"CYSE 270 Coursework"},"content":{"rendered":"\n<h2 class=\"wp-block-heading has-text-align-center\">Course Overview:<\/h2>\n\n\n\n<p><strong>Spring 2026, Old Dominion University<\/strong><\/p>\n\n\n\n<p class=\"has-text-align-center\">Linux Systems for Cybersecurity (CYSE270) teaches students the fundamentals of the Linux operating system and how that foundational knowledge directly applies to real-world cybersecurity environments. This course emphasizes hands-on learning through labs completed in our own virtual machines, giving students practical experience in a controlled, professional setting. Skills covered throughout the course range from navigating the Linux file system and managing files and permissions to BASH shell scripting and essential command-line operations. On this page, you will find reflections from each of the labs I completed and an overall takeaway about what I learned in the class. Additionally, I just want to note that I experimented with multiple Linux distributions on my own terms, ranging from Kali Linux to Ubuntu Server and Desktop to Velvet OS and more, which you can see on my <a href=\"https:\/\/github.com\/nstephens1106-alt?tab=repositories\" data-type=\"link\" data-id=\"https:\/\/github.com\/nstephens1106-alt?tab=repositories\">GitHub<\/a>!<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\">Lab One: Installing a Linux VM<\/h2>\n\n\n\n<p><em>This lab reinforced previous knowledge I had of the process of installing and configuring a Linux virtual machine, which served as the foundation for all subsequent labs in the course. After setting up the VM, I practiced fundamental Linux commands including echo, date, ls, and pwd to begin navigating and interacting with the Linux terminal environment.<\/em><\/p>\n\n\n\n<p><em>Prior to taking this course, during my first semester at Old Dominion University, I had already been attempting to set up Kali Linux virtual machines independently. Despite having a capable machine, my VMs consistently underperformed, which was a frustrating obstacle early in my cybersecurity journey. However, after working through the course lecture slides, I was able to diagnose and resolve my configuration issues by properly adjusting the VM&#8217;s allocated memory, hardware settings, and graphical acceleration options. Since completing this lab, I have become highly proficient at creating and configuring virtual machines, and my curiosity has pushed me well beyond the scope of the assignment. I have been independently experimenting with creating virtual networks between multiple VMs and have even configured a separate physical laptop to communicate within those virtual network environments.<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\">Lab Two: Working with the Command Line<\/h2>\n\n\n\n<p><em>This lab deepened my understanding of basic navigation and file viewing techniques used in Linux environments, expanding on the foundational command-line skills I developed in the previous assignment. By exploring the Linux file system structure through directories such as \/etc and \/etc\/skel, I gained a much clearer picture of how Linux organizes system files and configurations. I also practiced essential file operations including copying, moving, and removing files, as well as using ls -l to examine file permissions and metadata in detail. Additionally, exploring user and group structures through files like \/etc\/group gave me my first real insight into how Linux manages user access and system security at the file level.<\/em><\/p>\n\n\n\n<p><em>The primary challenge I faced during this assignment was actually not technical in nature, but rather formatting related. The assignment required me to document each command and its output through clearly labeled screenshots compiled into a Word document. Pasting screenshots into Word and precisely positioning my cursor to label each one cleanly proved to be surprisingly tedious and frustrating. It wasn&#8217;t until later in the semester that I discovered a much more efficient approach \u2014 inserting a 1&#215;2 table for each screenshot, placing the label and number in the top cell and the actual screenshot in the bottom cell, resulting in a clean and professional document layout. Looking back, this challenge taught me just as much about professional documentation practices as it did about Linux itself<\/em>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\">Lab Three: Working with the VI Editor<\/h2>\n\n\n\n<p><em>This lab introduced me to the VI text editor in Linux, which is widely recognized as one of the most powerful and widely used text editors in professional environments. Prior to this assignment, I had some familiarity with VI from watching YouTube videos of experienced users working in Vim, its modern successor. However, observing others navigate the VI environment efficiently and using it myself proved to be very different experiences. I approached this assignment anticipating a challenge. <\/em><\/p>\n\n\n\n<p><em>However, rather than finding this lab particularly challenging, I genuinely enjoyed working with the VI editor. I went as far as installing a VS Code extension that replicates the VI keybinding environment within Visual Studio Code, allowing me to continue practicing VI-style navigation while working on my coding projects.<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\">Lab Four: Group and User Management<\/h2>\n\n\n\n<p><em>This lab introduced me to one of the most fundamental and security-critical aspects of Linux administration \u2014 managing user accounts and groups. I practiced creating and configuring new user accounts using useradd with various options, setting and verifying passwords using passwd and grep on the \/etc\/shadow file, modifying user login shells with usermod, managing group memberships using groupadd, groupmod, and groupdel, and switching between user accounts using the su command. The lab was split into two tasks, covering both user account management and group account management, giving me a comprehensive introduction to how Linux controls access at the user and group level.<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\">Lab Five: Password Cracking<\/h2>\n\n\n\n<p><em>This lab introduced me to the offensive side of Linux security by using John the Ripper, a widely used password cracking tool, to attempt to crack hashed passwords. I created six user accounts with varying password strengths, exported their hashed passwords, and ran John the Ripper against them using the rockyou.txt wordlist. After running the tool for approximately twenty minutes, none of the passwords were cracked, which demonstrated the effectiveness of choosing strong, non-dictionary passwords. I also completed the extra credit portion of the assignment, successfully cracking two MD5 hashes after troubleshooting several syntax errors along the way.<\/em><\/p>\n\n\n\n<p><em>The primary challenge I faced was the extra credit portion, where I initially exited the VI editor without saving the hash file and subsequently forgot to update the target file for John. After carefully working through the correct syntax for MD5 hash cracking, I was able to successfully crack both hashes, identifying the passwords as &#8220;password&#8221; and &#8220;root.&#8221;<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\">Lab Six: File Permissions<\/h2>\n\n\n\n<p><em>This lab provided an in-depth exploration of Linux file permissions, one of the most essential concepts in securing a Linux environment. I practiced creating users and groups with specific roles, setting and managing file and directory permissions using chmod with both symbolic and octal notation, configuring umask values to control default file creation permissions, applying special permission bits including SGID and the sticky bit, and observing how permission settings directly affect what users can and cannot access within a shared directory environment.<\/em><\/p>\n\n\n\n<p><em>A particularly interesting challenge arose during the extra credit sticky bit section, where I discovered that Olivia, a non-privileged user, was initially able to delete Sophia&#8217;s files from the shared directory. After applying the sticky bit with chmod +t, that access was correctly restricted, demonstrating in real time how a single permission setting can have significant security implications.<\/em><\/p>\n\n\n\n<p><em>This lab was one of the most comprehensive and rewarding of the course, as file permissions are a foundational concept that directly underpins access control in every Linux-based cybersecurity environment. The hands-on experience of seeing permissions enforced and bypassed in a controlled setting gave me a much deeper understanding of how Linux protects its resources.<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\">Lab Seven: Storage Management<\/h2>\n\n\n\n<p><em>This lab introduced me to Linux storage management, one of the more technically complex topics covered in the course. I practiced inspecting existing storage devices and partition tables using commands like sudo ls \/dev\/sd*, sudo fdisk -l, and sudo parted -l, then expanded into creating and configuring a brand new virtual hard disk directly within VirtualBox. After attaching the new 200MB virtual disk, I created a primary partition on it using fdisk, formatted it with an ext4 filesystem using mkfs, mounted it to a custom directory, created and verified files within the mounted partition, and then cleanly unmounted it. The lab was structured in three parts \u2014 checking the existing file system, creating a new virtual disk, and creating partitions and filesystems<\/em>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\">Lab Eight: Shell Scripting<\/h2>\n\n\n\n<p><em>This lab marked my first real dive into writing functional BASH shell scripts from scratch, and it was one of the most engaging and creatively rewarding assignments of the course. In Task A, I wrote a script that accepted a number as user input and used an if-else conditional statement to compare it against the value of 10, outputting the appropriate message based on the result. In Task B, I wrote a more complex script that accepted a filename as input and used conditional logic to determine whether the input matched a directory, an existing regular file, or neither \u2014 creating a new file in the latter case. For the extra credit portions, I expanded Task B&#8217;s script to pipe my name into newly created files using output redirection, and wrote an entirely separate script that accepted a username and directory name as inputs, validated the directory, and displayed its contents or returned an error message accordingly.<\/em><\/p>\n\n\n\n<p><em>The primary challenge I faced during this assignment was adjusting to BASH&#8217;s syntax, which felt unintuitive coming from a Python background. In Python, conditional logic and variable handling follow a clean and readable structure that I had grown comfortable with, so encountering BASH&#8217;s quirks \u2014 such as the spacing requirements inside brackets, the way variables are referenced with $, and the fi keyword to close if statements \u2014 took some getting used to. There were several moments where my scripts failed to run simply because of a missing space or an incorrectly formatted condition, which was frustrating when the logic itself was correct.<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\">Lab Nine: Task Automation<\/h2>\n\n\n\n<p><em>This lab built directly on the scripting skills I developed in the previous assignment, this time applying them to real-world automation through BASH scripting and crontab scheduling. I wrote a backup script called backup.sh that automatically created timestamped tar archives of a user&#8217;s home directory and moved them to the \/var\/backups\/ directory, combining variables, the date command, tar, mv, and gzip into a single functional script. I then automated the script&#8217;s execution using a crontab job configured to run every minute, allowing me to observe the automated backup process in real time and watch the backup files accumulate in the \/var\/backups\/ directory. For the extra credit portion, I wrote an additional cleanup script that counted the number of backup files belonging to my MIDAS name and automatically deleted the oldest files once the count exceeded a threshold of three, incorporating conditional logic, grep, and wc -l into an effective automation workflow.<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\">Lab Ten: Networking Basics<\/h2>\n\n\n\n<p><em>This lab introduced me to the fundamentals of computer networking within a Linux environment, covering core concepts such as IP addressing, subnetting, and basic network configuration commands.<\/em> <em>Subnetting was the primary conceptual challenge of this assignment. Breaking down IP addresses into network and host portions, calculating subnet masks, and determining valid host ranges required a level of mathematical thinking that felt unfamiliar at first. Converting between binary and decimal representations of IP addresses to understand how subnetting actually works under the hood was tedious initially.<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\">Lab Eleven: Basic Network Configuration <\/h2>\n\n\n\n<p><em>In Lab 11, I explored basic network configuration within my Linux virtual machine environment. I practiced using essential networking commands such as <code>ifconfig<\/code>, <code>route<\/code>, <code>netstat<\/code>, and <code>ping<\/code> to inspect and interact with my system&#8217;s network interfaces, routing table, active connections, and external connectivity. The lab also walked me through switching my VM&#8217;s network adapter from NAT mode to Bridged mode and observing how that change affected my IP address, routing information, and DNS configuration in real time.<\/em><\/p>\n\n\n\n<p><em>The concept of switching to Bridged mode was not new to me by the time this lab came around, as I had already encountered it firsthand while building out my home lab. When I set up a Wazuh SIEM on an Ubuntu Server running on my Windows 10 desktop, I needed a separate physical laptop to communicate with the virtual machines on that host. After some troubleshooting, I discovered that switching the network adapter to Bridged mode was what made that cross-device communication possible. However, the trade-off was that the change caused each VM&#8217;s IP address to update, which meant I had to go back into every enrolled endpoint and manually update the IP address it was using to communicate with the SIEM \u2014 a tedious but valuable lesson in how adapter mode changes ripple across a network environment.<\/em><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\">Final Reflection<\/h2>\n\n\n\n<p><em>When I enrolled in Linux Systems for Cybersecurity, I had some prior exposure to Linux through self-directed learning and my own home lab experiments, but my knowledge was largely fragmented and self-taught. This course gave me a structured, comprehensive foundation that filled in the gaps and formalized skills I had only partially developed on my own. Over the course of the semester, I progressed from basic command-line navigation and file system exploration all the way through user and group management, file permissions, storage management, shell scripting, task automation, and network configuration \u2014 a curriculum that mirrors the actual skill set expected of entry-level cybersecurity professionals in the field today.<\/em><\/p>\n\n\n\n<p><em>One of the most significant ways my skills improved throughout the semester was in my confidence working directly in the Linux terminal. Early in the course, every command felt deliberate and uncertain. By the end, navigating the file system, managing users and permissions, writing BASH scripts, and configuring network adapters had become second nature. The hands-on lab format was instrumental in this growth. There is a fundamental difference between reading about Linux and actually doing it inside a virtual machine, troubleshooting real errors, and seeing real output \u2014 and this course consistently prioritized that practical experience.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Course Overview: Spring 2026, Old Dominion University Linux Systems for Cybersecurity (CYSE270) teaches students the fundamentals of the Linux operating system and how that foundational knowledge directly applies to real-world cybersecurity environments. This course emphasizes hands-on learning through labs completed in our own virtual machines, giving students practical experience in a controlled, professional setting. Skills &hellip; <a href=\"https:\/\/sites.wp.odu.edu\/nrstephens\/cyse-270-coursework\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">CYSE 270 Coursework<\/span><\/a><\/p>\n","protected":false},"author":30730,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"_links":{"self":[{"href":"https:\/\/sites.wp.odu.edu\/nrstephens\/wp-json\/wp\/v2\/pages\/480"}],"collection":[{"href":"https:\/\/sites.wp.odu.edu\/nrstephens\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sites.wp.odu.edu\/nrstephens\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sites.wp.odu.edu\/nrstephens\/wp-json\/wp\/v2\/users\/30730"}],"replies":[{"embeddable":true,"href":"https:\/\/sites.wp.odu.edu\/nrstephens\/wp-json\/wp\/v2\/comments?post=480"}],"version-history":[{"count":5,"href":"https:\/\/sites.wp.odu.edu\/nrstephens\/wp-json\/wp\/v2\/pages\/480\/revisions"}],"predecessor-version":[{"id":499,"href":"https:\/\/sites.wp.odu.edu\/nrstephens\/wp-json\/wp\/v2\/pages\/480\/revisions\/499"}],"wp:attachment":[{"href":"https:\/\/sites.wp.odu.edu\/nrstephens\/wp-json\/wp\/v2\/media?parent=480"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}