About nixCraft

Topics

Linux Shell script to add a user with a password to the system

Posted by Vivek Gite [Last updated: March 21, 2007]

Our regular reader Imtiaz asks:

How do I add a user with password? I’d like to take input such as username, password from keyboard and add to the system under Linux.

A. You can easily write a shell script that reads username, password from keyboard and add to /etc/passwd and /etc/shadow file using useradd command (create a new user command).

General syntax is as follows:
useradd -m -p encryptedPassword username

Where,

Task: Create an encrypted password

You need to create encrypted password using perl crypt():
$ perl -e 'print crypt("password", "salt"),"\n"'
Output:

sa3tHJ3/KuYvI 

Above will display the crypted password (sa3tHJ3/KuYvI) on screen. The Perl crypt() function is a one way encryption method meaning, once a password has been encrypted, it cannot be decrypted. The password string is taken from the user and encrypted with the salt and displayed back on screen.

You can store an encrypted password using following syntax:
$ password="1YelloDog@"
$ pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)
$ echo $pass

Output

paU5t8Al/qf6M

Sample shell script to add a user

Based upon above discussion here is a sample shell script (Download link):

#!/bin/bash
# Script to add a user to Linux system
if [ $(id -u) -eq 0 ]; then
	read -p "Enter username : " username
	read -s -p "Enter password : " password
	egrep "^$username" /etc/passwd >/dev/null
	if [ $? -eq 0 ]; then
		echo "$username exists!"
		exit 1
	else
		pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)
		useradd -m -p $pass $username
		[ $? -eq 0 ] && echo "User has been added to system!" || echo "Failed to add a user!"
	fi
else
	echo "Only root may add a user to the system"
	exit 2
fi

Close and save the script:
$ ./adduser.sh
Only root may add a user to the system

Run as root:
# ./adduser
Output:

Enter username : roja
Enter password : HIDDEN
User has been added to system!

Now user roja can login with a password called HIDDEN.

E-mail this to a Friend    Printable Version

Linux Powered Asus EEE Laptop PC From $299

You may also be interested in other helpful articles:

Discussion on This Article:

  1. Amol P Kesare Says:

    I just want to send one script which I have made for changing password of any user from remote machine.
    Here I have created one file called “host” which contents host ips.

    Shell script code

    #!/bin/bash
    read -p "Enter Username: " username
    read -ers -p "Enter New password for user $username: " paswd
    echo
    read -ers -p "Enter Root Password: " rpaswd
    echo
    password=`python file ${paswd}`;
    echo "$username $password $npaswd"
    cat host | while read line
    do
    #####expect####
    status=$(expect -c "
    spawn ssh $line usermod -p $password $username
    expect {
    password: { send \"$rpaswd\n\"; exp_continue }
    }
    exit
    ")
    
    echo ""
    echo "$status" > log.txt
    #####end of expect#######
    done
    

    python code - file [for crypt()]

    import crypt; import sys; print crypt.crypt(sys.argv[1],”salt”);

    Hope this will help somebody. :)
    Cheers!

  2. nixcraft Says:

    Amol,

    Nice script.

    Appreciate your post.

  3. Amol P Kesare Says:

    Hey forgot one thing….there is one more file called “file”, and contents of these files are -

    import crypt; import sys; print crypt.crypt(sys.argv[1],”salt”);

  4. nixcraft Says:

    Yes, i thought so… there is line about python… thanks

  5. Allotment Says:

    I always wondered if there was a bash /CLI command to list the users, is there?
    I see here
    egrep “^$username” /etc/passwd >/dev/null

    so there is not?

  6. nixcraft Says:

    Remove ‘>/dev/null‘ and you should see username if exists in /etc/passwd. To display list just type:

    cut -d: -f1 /etc/passwd

  7. master Says:

    its great but it is more powerful if you include the functionality to add lage number of users at once
    like in my uni more then 15000 stuent it is almoste inpossible to create their acccounts one by one

  8. nixcraft Says:

    master,

    You may take help of this my previous post - How to create multiple users accounts in batch / bulk

    HTH

  9. balakrishnan.R Says:

    How I need edit the script to add the user in particular group and disable them by accessing telnet.

    example:

    useradd -d /home/example1 -s /bin/false -g popusers example1

  10. Amol P Kesare Says:

    ># Allotment Says:
    >March 23rd, 2007 (4 weeks ago) at 1:00 pm
    >I always wondered if there was a bash /CLI command >to list the users, is there?
    >I see here
    >egrep “^$username” /etc/passwd >/dev/null
    >so there is not?

    You can use gawk to list users
    gawk -F: ‘{ if ( $3>500 ) print $1 }’/etc/passwd

  11. Fabio Says:

    Could you kindly help me to integrate in this first script to add a user in /etc/shadow from a comma separeted file?
    I would like to export a list from a company application, create a .csv , and lunch it from a shell script or a php page in a website to import users in 1 step.
    The important is that the password used to access sistem by users is the one I can read in clear characters in the csv file.
    Let me know please, and put my address in copy fabio@conecta.it

  12. bhushan Says:

    egrep “^$username” /etc/passwd

    don’t u people think that this will not match string
    perfectly means if there is user like bhushan and i want to create user bhush…then it will give msg that user already exists…

  13. vivek Says:

    Sure you can use word based matching:

    egrep -w “^$username” /etc/passwd
  14. Slavko Says:

    (echo "username:password")|chpasswd

  15. bhushan Says:

    hi vivek,
    how to add user without using useradd command?
    With all information such as uid(by incrementing existing highest one), gid,…….etc.

  16. Tyler McAdams Says:

    I need a shell script that will create a password for users already on the system. How can I do that?

  17. Artem Nosulchik Says:

    Another way to get encrypted password is command:

    openssl passwd yourpass

  18. Eric Daza Says:

    PASSWORD checking is limited to 8 characters long.

    I tried the Script above (adduser.sh), and the password checking is some how up-to 8 characters only. Meaning as long as you have the first 8 characters correct you can login to the system (I tested using su command)
    The part I changed on the script is to set username and password as a variable:

    username=test
    password=secr3t12345

    ex.
    password=secr3t12345

    it will allow secr3t12333333333 or secr3t12

Leave a Reply

We encourage your comments, and suggestions. But please stay on topic, be polite, and avoid spam. Thank you very much for stopping by our site!

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word

Copyright © 2004-2008 nixCraft. All rights reserved - TOS/Disclaimer - Privacy policy - Sitemap - Powered by Open source software.