Bird
Raised Fist0
Linux CLIscripting~20 mins

/etc/passwd and /etc/shadow in Linux CLI - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Shadow and Passwd Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
1:30remaining
What is the output of this command?
You run the command cut -d: -f1 /etc/passwd | head -3. What is the expected output?
Linux CLI
cut -d: -f1 /etc/passwd | head -3
A
root
sys
adm
B
root
bin
daemon
C
root
daemon
bin
D
daemon
bin
sys
Attempts:
2 left
💡 Hint
The first field in /etc/passwd is the username. The command extracts usernames and shows the first three.
🧠 Conceptual
intermediate
1:30remaining
What is the main difference between /etc/passwd and /etc/shadow?
Choose the correct statement about the difference between /etc/passwd and /etc/shadow files.
A/etc/passwd is readable by all users, /etc/shadow is readable only by root and stores encrypted passwords.
B/etc/passwd stores encrypted passwords, /etc/shadow stores user IDs.
C/etc/shadow stores usernames, /etc/passwd stores passwords in plain text.
D/etc/passwd and /etc/shadow both store passwords in plain text.
Attempts:
2 left
💡 Hint
Think about file permissions and security of password storage.
🔧 Debug
advanced
1:30remaining
Why does this script fail to read /etc/shadow?
A user runs this script to read the first line of /etc/shadow:
#!/bin/bash
head -1 /etc/shadow
But it shows a permission denied error. Why?
A/etc/shadow is only readable by root, normal users cannot read it.
Bhead command does not work on /etc/shadow file.
CThe script is missing execute permission.
DThe script syntax is incorrect.
Attempts:
2 left
💡 Hint
Check file permissions of /etc/shadow.
🚀 Application
advanced
2:00remaining
Extract usernames with locked passwords from /etc/shadow
Which command correctly lists usernames whose password field in /etc/shadow starts with an exclamation mark (!) indicating locked accounts?
Ased -n '/^!/p' /etc/shadow
Bawk -F: '$2 ~ /^!/ {print $1}' /etc/shadow
Ccut -d: -f1 /etc/shadow | grep '!'
Dgrep '^!' /etc/shadow | cut -d: -f1
Attempts:
2 left
💡 Hint
Look for lines where the second field starts with ! and print the first field.
📝 Syntax
expert
1:30remaining
What error does this command produce?
What error will this command produce?
cut -d: -f1 /etc/shadow | head -3
ANo output, command runs silently
BFile not found error
CSyntax error due to wrong delimiter
DPermission denied error because /etc/shadow is restricted
Attempts:
2 left
💡 Hint
Consider file permissions of /etc/shadow for normal users.

Practice

(1/5)
1. What is the primary purpose of the /etc/passwd file in Linux?
easy
A. To store encrypted user passwords securely
B. To configure network settings
C. To store user account information accessible to all users
D. To log system errors

Solution

  1. Step 1: Understand the role of /etc/passwd

    The /etc/passwd file contains user account details like username, user ID, group ID, home directory, and shell. It is readable by all users.
  2. Step 2: Differentiate from /etc/shadow

    The encrypted passwords are stored separately in /etc/shadow for security, not in /etc/passwd.
  3. Final Answer:

    To store user account information accessible to all users -> Option C
  4. Quick Check:

    /etc/passwd = user info file [OK]
Hint: Remember: passwd = public user info, shadow = private passwords [OK]
Common Mistakes:
  • Confusing /etc/passwd with /etc/shadow
  • Thinking passwords are stored in /etc/passwd
  • Assuming /etc/passwd stores system logs
2. Which of the following lines correctly shows the format of a typical /etc/shadow entry?
easy
A. username:x:1000:1000:User Name:/home/user:/bin/bash
B. username:$6$randomsalt$encryptedpassword:18000:0:99999:7:::
C. username:password:1000:1000:User Name:/home/user:/bin/bash
D. username:encryptedpassword:1000:1000:User Name:/home/user:/bin/bash

Solution

  1. Step 1: Identify /etc/shadow format

    The /etc/shadow file stores encrypted passwords and related info. The password field looks like $6$randomsalt$encryptedpassword for SHA-512 encryption.
  2. Step 2: Compare options

    The line username:$6$randomsalt$encryptedpassword:18000:0:99999:7::: matches the shadow file format with encrypted password (indicated by $6$) and password aging fields separated by colons. The other options resemble /etc/passwd format or have incorrect password fields.
  3. Final Answer:

    username:$6$randomsalt$encryptedpassword:18000:0:99999:7::: -> Option B
  4. Quick Check:

    /etc/shadow entries have encrypted passwords with $ signs [OK]
Hint: Look for $ signs and many colon-separated fields in shadow entries [OK]
Common Mistakes:
  • Confusing /etc/passwd format with /etc/shadow
  • Expecting plain text passwords in /etc/shadow
  • Missing fields after encrypted password
3. Given the following command:
grep '^root:' /etc/passwd | cut -d':' -f1,3,7

What will be the output format?
medium
A. root:/bin/bash
B. root:x:0:0:root:/root:/bin/bash
C. root:0:0
D. root:0:/bin/bash

Solution

  1. Step 1: Understand the command parts

    grep '^root:' /etc/passwd finds the line starting with 'root:'. cut -d':' -f1,3,7 extracts fields 1 (username), 3 (UID), and 7 (shell) separated by colons.
  2. Step 2: Identify root line fields

    Typical root line: root:x:0:0:root:/root:/bin/bash. Fields: 1=root, 2=x, 3=0, 4=0, 5=root, 6=/root, 7=/bin/bash.
  3. Step 3: Extract fields 1,3,7

    Fields 1=root, 3=0, 7=/bin/bash. Joined by colons: root:0:/bin/bash.
  4. Final Answer:

    root:0:/bin/bash -> Option D
  5. Quick Check:

    Fields 1,3,7 from /etc/passwd line = root:0:/bin/bash [OK]
Hint: Count fields carefully; cut -f1,3,7 picks username, UID, shell [OK]
Common Mistakes:
  • Mixing up field numbers in cut command
  • Expecting full /etc/passwd line output
  • Confusing shadow file format with passwd
4. You run this command to check password expiry info:
sudo chage -l username

But it shows an error: chage: user 'username' does not exist. What is the most likely cause?
medium
A. The username is missing in /etc/passwd
B. The /etc/shadow file is empty
C. The chage command is not installed
D. The user has no password set

Solution

  1. Step 1: Understand chage user check

    The chage command checks user password expiry info by looking up the username in /etc/passwd.
  2. Step 2: Analyze error cause

    Error 'user does not exist' means the username is not found in /etc/passwd. If the user was missing there, chage cannot proceed.
  3. Final Answer:

    The username is missing in /etc/passwd -> Option A
  4. Quick Check:

    User must exist in /etc/passwd for chage to work [OK]
Hint: Check /etc/passwd for username before using chage [OK]
Common Mistakes:
  • Assuming /etc/shadow emptiness causes this error
  • Thinking chage command missing causes user error
  • Believing no password set triggers 'user does not exist'
5. You want to write a script that lists all users who have a valid login shell (not /usr/sbin/nologin or /bin/false) by reading /etc/passwd. Which command snippet correctly filters these users?
hard
A. awk -F':' '$7 != "/usr/sbin/nologin" && $7 != "/bin/false" {print $1}' /etc/passwd
B. grep -v '/usr/sbin/nologin' /etc/shadow | cut -d':' -f1
C. cat /etc/passwd | grep '/bin/bash' | awk '{print $1}'
D. sed '/nologin/d' /etc/passwd | cut -d':' -f7

Solution

  1. Step 1: Identify shell field in /etc/passwd

    The 7th field in /etc/passwd is the user's login shell. We want to exclude /usr/sbin/nologin and /bin/false.
  2. Step 2: Analyze each option

    awk -F':' '$7 != "/usr/sbin/nologin" && $7 != "/bin/false" {print $1}' /etc/passwd uses awk with field separator ':' and filters out unwanted shells, printing usernames (field 1). grep -v '/usr/sbin/nologin' /etc/shadow | cut -d':' -f1 wrongly reads /etc/shadow and uses grep -v incorrectly. cat /etc/passwd | grep '/bin/bash' | awk '{print $1}' filters only /bin/bash but misses other valid shells. sed '/nologin/d' /etc/passwd | cut -d':' -f7 deletes lines with 'nologin' but then prints shell field, not usernames.
  3. Final Answer:

    awk -F':' '$7 != "/usr/sbin/nologin" && $7 != "/bin/false" {print $1}' /etc/passwd -> Option A
  4. Quick Check:

    Use awk on /etc/passwd to filter shell field and print usernames [OK]
Hint: Use awk with FS=':' and check field 7 for valid shells [OK]
Common Mistakes:
  • Using /etc/shadow instead of /etc/passwd for shell info
  • Printing wrong fields (shell instead of username)
  • Using grep without proper field filtering
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard