DEV Community

Dimeji Ojewunmi
Dimeji Ojewunmi

Posted on

Linux Bash Script User Creation

Hi Enthusiast DevOps Engineer,

Today we'll be having a deep insight on the need to write an automated users bash script in an organization, and also having all the metrics and password auto generated stored in a LOG_FILE.

The main reason for the creation of the users bash scrip is to mitigate repetitive user/group creation task manually, which might be daunting in most cases, and also to have an autonomous control of employees who have assess to the organization Linux workflow environment.

Before i proceed, the user bash script creation is in curtesy of (HNG Internship) program, which has just kicked off for the year 2024 "11th cohort", helping various beginners and intermediate tech enthusiast in having a real world project experience. To learn more about HNG internship program, kindly visit

, .

Now lets delve to the business of the day, seat back, make use of your seat belt, while we journey through this together.

Firstly, we'll create a text file called users filled with the content below, which is dependent on our bash script file to execute its functions.

light; sudo,dev,www-data
 idimma; sudo
 mayowa; dev,www-data
 dmex; devops,sysops
 iosegbo; sysops
Enter fullscreen mode Exit fullscreen mode

Secondly we'll be creating a file called create_users.sh which will run as our bash script file with the code below

#!/bin/bash

# Autogenerate Password and Metrics will be sent here
LOG_FILE="/var/log/user_management.log"
PASSWORD_FILE="/var/secure/user_passwords.txt"


# This will create a /var/secure file, and also assign a <write, read & execution> permission to the created file.
mkdir -p /var/secure
chmod 700 /var/secure

# Create or clear the log and password files
> $LOG_FILE
> $PASSWORD_FILE
chmod 600 $PASSWORD_FILE

# Function to generate random password
generate_password() {
    echo $(openssl rand -base64 12)
}


# Read the input file, which is the <users> file we created to be dependent on our bash script code function execution
INPUT_FILE=$1
# Process each line in the file
while IFS= read -r line; do
  # Ignore characters before the semicolon
  after_semicolon="${line#*;}"

  # Split the line into items separated by commas
  IFS=',' read -ra items <<< "$after_semicolon"

  # Ensure a group exists for each item
  for item in "${items[@]}"; do
    item=$(echo "$item" | xargs)  # Trim whitespace
    if [ ! -z "$item" ]; then
      if ! getent group "$item" > /dev/null; then
        echo "Creating group: $item"
        sudo groupadd "$item"
      else
        echo "Group already exists: $item"
      fi
    fi
  done
done < "$INPUT_FILE"


# Process each line in the input file
while IFS=';' read -r user groups; do
    # Trim whitespace
    user=$(echo "$user" | xargs)
    groups=$(echo "$groups" | xargs)


    # Create user with home directory and primary group
    if ! id "$user" &>/dev/null; then
        useradd -m "$user"
        echo "User $user was created successfully." >> $LOG_FILE
    else
        echo "User $user already exists." >> $LOG_FILE
    fi

    # Set user's groups
    if [ -n "$groups" ]; then
        usermod -aG $groups "$user"
        echo "User $user added to group: $groups." >> $LOG_FILE
    fi

    # Auto Generate and set password
    password=$(generate_password)
    echo "$user:$password" | chpasswd
    echo "$user,$password" >> $PASSWORD_FILE
    echo "Password for user $user set." >> $LOG_FILE


done < "$INPUT_FILE"

Enter fullscreen mode Exit fullscreen mode

Thirdly, we'll have to assign an execution permission to the created bash script file chmod 700 create_users.sh

Lastly, the command to execute our bash script file is

sudo ./create_users.sh users

The command above will execute the above bash script function which is written as a code, enabling all the users to be assigned to the specified group and also enabling each users to have an assigned encrypted password which will be redirected or logged to a LOG_FILE encoded in the script.

Here are the list of commands to execute on our Linux VM to check the following output of our bash script block of code

sudo cat /var/log/user_management.log (This cmd checks for the activities which has taken place in the course of the bash script execution i.e "MERTICS").

sudo cat /var/secure/user_passwords.txt (This cmd checks for the auto generated password assigned to each users).

To confirm validity of your user creation, simply execute the following command below

su dmex

Then copy the encrypted password generated for dmex under sudo cat /var/secure/user_passwords.txt

Thank you for taking your time in reading through to the completion of the blog post, do have a wonderful time.

Top comments (0)