24sp ver.

Note: this is for the Spring 2024 iteration of CSE 391. Looking for a different quarter? Please visit https://courses.cs.washington.edu/courses/cse391/.

HW8 - Users, Groups, Permissions (2 points)

Due Tuesday 05/21 at 3:00 pm. No late submissions accepted.

Submission: Gradescope

Specification: Spec


This assignment focus on the Unix multi-user system and permissions. Advance warning: it can be tricky to “see” files that start with a dot in file dialog boxes when you are trying to, for example, upload them to Gradescope. Check out How to view “Hidden” (a.k.a. dot) files for more info.

wget https://courses.cs.washington.edu/courses/cse391/24sp/homework/hw8/hw8.tar.gz
# You can't unzip this yet, that is part of the first question

Setup

Some problems in this HW require super user permissions, which you won’t have on attu/vergil/cancun/etc. Additionally, these problems require you to change permissions on files which can be easy to mess up when you are first learning. We’d like to avoid overburdening the servers’ support staff w/requests to manually fix permissions that have been messed up.

For these reasons, we recommend using the CSE VM to complete this assignment. See the “Working at Home” tab for setup instructions.

Alternatively, if you are unable to install the VM (or don’t want to), we recommend you write your solutions in the appropriate .sh file and submit them directly to Gradescope in order to run them. This will give a slightly slower feedback loop, but will ensure you don’t mess up any permissions with an incorrect solution.

Task 1: : Bash shell commands

For each item below, determine a single bash shell statement that will perform the operation(s) requested. Each solution must be a one-line shell statement, but you may use operators such as >, >>, <, |, &&, and ;. For all commands, do not create any files except those indicated.

To test your commands, you should have downloaded and unpacked hw8.tar.gz into the current directory using the command that will be the answer to question #1. You can assume you are in the hw8 directory when doing these problems.

In response to each question, you will provide the command that will perform the task described, not the output that the command produces. Write your commands in on the indicated lines in the task1.sh file in the hw8 folder.

Problem 1

🔍 Self-Discovery

The tar command compresses/decompresses files in the Unix TAR (“tape archive”) file format. TAR merges many files into a single archive; however, unlike ZIP, TAR does not compress the contents. Therefore most .tar files are then subsequently also compressed with a separate compression algorithm called GNU ZIP (“gzip”), which yields a .tar.gz file. (This format was used over ZIP because of patent issues.)

For this exercise, show a single command that will decompress the file hw8.tar.gz into the current directory in “verbose” mode, so that it echoes each file that is coming out of the archive.

Info

You don’t need |, &&, ;, et.c to solve this problem.

Info

If you don’t know how to use a particular command, where should you go to learn more about it?

Problem 2

Set the file README.md so that its owner and others can execute the file. (All other permissions should remain unchanged.)

Problem 3

Set all .java files in the current directory and all its subdirectories (and sub-sub-directories, etc. recursively) to have read permission for all users.

Problem 4

a. Set all files with extensions .html in the current directory and all its subdirectories to be readable, writeable and executable by their owner and only readable (not writeable or executable) by groups and others. Do this using the standard letter code arguments for granting and removing permissions. Note: Some of the files have spaces in their name which will confuse the relevant commands you’ll need. Read the man pages for options on handling file names with spaces.

b. Write this same command using the octal number code arguments to grant/remove the permissions

Problem 5

Set all files in the current directory and all its subdirectories (and sub-sub-directories, etc. recursively) to be owned by the group wheel. (If you can’t get this to work see the tips here.)

Problem 6

🔍 Self-Discovery

The umask command is used to specify what permissions are given by default to newly created files. Check the slides from lecture to see a more detailed discussion of how to use umask. Its format might be the opposite of what you expect — it actually specifies what permissions will be taken away.

Use umask to set the default permissions for new files to be read (but not write or execute) permission to you (the owner), but no permissions to anyone else.

Problem 7

🔍 Self-Discovery

Give a command that would print out the contents of the file /etc/ssh/sshd_config as the root super-user. Notice that you do not have the permissions simply print the contents of this file normally, as you will get a Permission denied error. Running the command to print the file as the root super-user will allow you to see the contents of the file without needing to change the file’s permissions.

Note

Depending on where you are trying to do this, the actual command may not work. Specifically, on attu/vergil/cancun etc you do not have permissions to do this, but you should on your VM. Give the command that you would use, even if it doesn’t work in your environment.

If you are unable (or do not want) to install the VM, you can submit your solution to Gradescope to check your answer.

Task 2: .bashrc

As we have discussed in class, .bashrc is a script that runs every time you start a new Bash shell (e.g. by typing bash at the bash prompt. .bashrc is also run when opening a new terminal window on the CSE VM). For this part of this assignment, you should modify the .bashrc file in your home directory on your Linux environment so that it sets the following aliases. If you have an account on attu or another shared server, you probably already have a .bashrc file there that you can modify. If your system does not have such a file, you can just create a file named .bashrc and add your aliases there.

Submit your modified .bashrc file with the following aliases.

  1. Add an alias so that typing attu connects you to attu.cs.washington.edu via SSH. (This alias isn’t very useful if you’re testing on attu itself, but set it up anyway.)
    • If the server you are using is vergil or cancun etc, set up an alias so that typing attu (not vergil/cancun etc!) connects you to there instead (e.g. to vergil.u.washington.edu).
  2. Add an alias so that when trying to overwrite a file during a move operation, the user is prompted for confirmation first. (Hint: Set the operation to run in “interactive mode”.)
  3. Add an alias to create the same behavior as in question 2, but for the copy operation.

Task 3: .bash_profile

As we have discussed, .bash_profile is a script that runs every time you log in to a Bash shell. This will happen every time you log on to attu. (On the VM things are bit more complex due to how they have configured things. A terminal window is also not considered a “login shell”. You can run your .bash_profile by starting a shell by typing bash –l (“el”) in a terminal window.)

In general if you want to make personalizations to your environment that produce output (e.g. print something to the screen) you should put them in your .bash_profile rather than in your .bashrc. If you have an account on attu or another shared server, you probably already have a .bash_profile file in your home directory that you can modify. If your system does not have such a file, you can just create a file named .bash_profile in your home directory and add your changes there.

For the item below, submit your modified .bash_profile file.

  1. Display a personalized message when logging on to the system. (e.g. “Welcome Matt! Have a great day!”) You can do this by just listing the command you would execute at the bottom of your .bash_profile. Feel free to get creative with this! Anything will be fine here as long as it prints some output to the screen that would not have happened otherwise. (but please keep messages positive and respectful!)