Optimising User Account Management on Linux Using a Bash Script

As a SysOps engineer, you often find yourself managing users and groups on Linux systems. This task can be tedious, especially when dealing with a large number of users. Automation is key to reducing manual workload and minimizing errors. In this artic…


This content originally appeared on DEV Community and was authored by chiemerie anaebo

As a SysOps engineer, you often find yourself managing users and groups on Linux systems. This task can be tedious, especially when dealing with a large number of users. Automation is key to reducing manual workload and minimizing errors. In this article, I'll walk you through a Bash script that automates the process of creating and managing users and groups on a Linux system. This script is particularly useful for onboarding new developers and ensuring consistent user setups.

Why Automate User Management?

Manual user and group management can be time-consuming and prone to errors. Automating this process not only saves time but also ensures consistency and security. By using a script, you can:

  • Quickly create multiple users and groups.
  • Ensure home directories are properly set up with correct permissions.
  • Generate and securely store random passwords.
  • Log all actions for auditing purposes.

Prerequisites

The following are the requirements for creating and executing the script.

  • Fundamental Understanding of Linux Commands
  • Administrative privilege
  • Text editors such as Vim, Nano, and TextEdit

Script Overview

The script reads a text file containing usernames and group names, creates the users and groups as specified, sets up home directories, and logs all actions. Here’s a breakdown of the script:

Log File and Password File Definitions:
These lines specify the locations for the log and password files. The log file will record the script's activity, while the password file will safely store the produced passwords.

LOGFILE="/var/log/user_management.log"
PASSWORD_FILE="/var/secure/user_passwords.txt"

Log Function:
This function logs messages to the log file with a timestamp.

log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOGFILE
}

Password Generation Function:
This function generates a random password using OpenSSL. The password is 12 characters long and encoded in base64.

generate_password() {
    openssl rand -base64 12
}

Input File Check:
This block checks if the input file is provided as a command-line argument. If not, it displays a usage message and exits.

if [ "$#" -ne 1 ]; then
    echo "Usage: $0 <input_file>"
    exit 1
fi

Create Secure Directory:
This block creates the /var/secure directory if it doesn't exist and sets its permissions to be accessible only by the owner.

mkdir -p /var/secure
chmod 700 /var/secure

Read Input File Line by Line:
This block reads the input file line by line. It ignores empty lines and lines starting with #.

while IFS= read -r line || [ -n "$line" ]; do
    [[ -z "$line" || "$line" =~ ^# ]] && continue

Parse Username and Groups:
This block splits each line into a username and groups using ; as the delimiter. It also trims any leading or trailing whitespace from the username.

IFS=';' read -r username groups <<< "$line"
username=$(echo "$username" | xargs)

Check for Empty Username:
If the username is empty, the script skips to the next line.

[ -z "$username" ] && continue

Create Group:
This block checks if a group with the same name as the username exists. If not, it creates the group and logs the action.

if ! getent group "$username" >/dev/null; then
    groupadd "$username"
    log "Created group $username"
fi

Create User:
This block checks if the user exists. If not, it creates the user with a home directory, assigns the user to their personal group, sets the password, stores the password, and logs the action.

if ! id -u "$username" >/dev/null 2>&1; then
    password=$(generate_password)
    useradd -m -g "$username" "$username"
    echo "$username:$password" | chpasswd
    echo "$username:$password" >> $PASSWORD_FILE
    log "Created user $username with password"
else
    log "User $username already exists"
fi

Assign User to Additional Groups:
This block splits the groups string into an array using , as the delimiter, trims whitespace from each group name, creates any additional groups if they don't exist, and assigns the user to these groups.

IFS=',' read -r -a group_array <<< "$groups"
for group in "${group_array[@]}"; do
    group=$(echo "$group" | xargs)
    [ -z "$group" ] && continue

    if ! getent group "$group" >/dev/null; then
        groupadd "$group"
        log "Created group $group"
    fi

    usermod -aG "$group" "$username"
    log "Added $username to group $group"
done

Final Log Message:
This line logs the completion of the user and group creation process.

log "User and group creation process completed."

Conclusion

Automating user and group management on Linux systems can greatly improve efficiency and reduce errors. The script provides a robust solution for onboarding new developers and ensuring consistent user setups.

Interested in honing your technical skills and working on real-world projects? Check out the HNG Internship for opportunities to learn and grow. If you're looking to hire talented interns, explore the HNG Hire page.

By incorporating automation into your workflow, you can streamline repetitive tasks and focus on more strategic initiatives. Happy scripting!


This content originally appeared on DEV Community and was authored by chiemerie anaebo


Print Share Comment Cite Upload Translate Updates
APA

chiemerie anaebo | Sciencx (2024-07-03T21:47:00+00:00) Optimising User Account Management on Linux Using a Bash Script. Retrieved from https://www.scien.cx/2024/07/03/optimising-user-account-management-on-linux-using-a-bash-script/

MLA
" » Optimising User Account Management on Linux Using a Bash Script." chiemerie anaebo | Sciencx - Wednesday July 3, 2024, https://www.scien.cx/2024/07/03/optimising-user-account-management-on-linux-using-a-bash-script/
HARVARD
chiemerie anaebo | Sciencx Wednesday July 3, 2024 » Optimising User Account Management on Linux Using a Bash Script., viewed ,<https://www.scien.cx/2024/07/03/optimising-user-account-management-on-linux-using-a-bash-script/>
VANCOUVER
chiemerie anaebo | Sciencx - » Optimising User Account Management on Linux Using a Bash Script. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/07/03/optimising-user-account-management-on-linux-using-a-bash-script/
CHICAGO
" » Optimising User Account Management on Linux Using a Bash Script." chiemerie anaebo | Sciencx - Accessed . https://www.scien.cx/2024/07/03/optimising-user-account-management-on-linux-using-a-bash-script/
IEEE
" » Optimising User Account Management on Linux Using a Bash Script." chiemerie anaebo | Sciencx [Online]. Available: https://www.scien.cx/2024/07/03/optimising-user-account-management-on-linux-using-a-bash-script/. [Accessed: ]
rf:citation
» Optimising User Account Management on Linux Using a Bash Script | chiemerie anaebo | Sciencx | https://www.scien.cx/2024/07/03/optimising-user-account-management-on-linux-using-a-bash-script/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.