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,
- -m : The user’s home directory will be created if it does not exist.
- useradd -p encryptedPassword : The encrypted password, as returned by crypt().
- username : Add this user to system
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.
Featured Articles:
- 20 Linux System Monitoring Tools Every SysAdmin Should Know
- 20 Linux Server Hardening Security Tips
- 10 Greatest Open Source Software Of 2009
- My 10 UNIX Command Line Mistakes
- Top 5 Email Client For Linux, Mac OS X, and Windows Users
- Top 20 OpenSSH Server Best Security Practices
- Top 10 Open Source Web-Based Project Management Software
- Top 5 Linux Video Editor Software
- Email this to a friend
- Download PDF version
- Printable version
- Comment RSS feed
- Last Updated: Mar/21/2007



{ 30 comments… read them below or add one }
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####### donepython code – file [for crypt()]
Hope this will help somebody. :)
Cheers!
Amol,
Nice script.
Appreciate your post.
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”);
Yes, i thought so… there is line about python… thanks
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?
Remove ‘>/dev/null‘ and you should see username if exists in /etc/passwd. To display list just type:
cut -d: -f1 /etc/passwdits 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
master,
You may take help of this my previous post – How to create multiple users accounts in batch / bulk
HTH
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
># 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
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
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…
Sure you can use word based matching:
(echo "username:password")|chpasswdhi vivek,
how to add user without using useradd command?
With all information such as uid(by incrementing existing highest one), gid,…….etc.
I need a shell script that will create a password for users already on the system. How can I do that?
Another way to get encrypted password is command:
openssl passwd yourpass
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
How can you also get this script to add a samba password at the same time it creates a unix password?
Useful article, I was was looking to add users with a one liner so this helped .. since Debian lacks the crypt command, I didn’t even think to use perl ..
Since I maintain the web server we use, exclusively .. I know all of my accounts have home directories, so I simply do my test to see if a user exists in perl .. but the same could be done in a shell script
if (-e “/home/$username”) {
print “The account already exists bonehead!”;
exit;
} else {
// get on with it
}
hi,
i compile this program but when i move to the second part I cant execute it in root . I got a error???
No such file or directory
why is that ???
pls reply me….
how about this one liner script
# useradd -m -p `perl -e ‘print crypt(“your_password”, “salt”),”\n”‘` your_username
hi
how to create new user to assign perssion to particular shell and set userid and groupid make this one line command
HI
I like to add bulk of user using bash scripting taking the user name from a text file from a given location and also want to set a sample passwd for the all user who have been created. and also the script has to mail to the corresponding user regarding the username and passwd . Can anyone help me out
Thanks in advance
Sample shell script to add a user
How do I change this to add the users full name ans login shell
Hi Vivek(nixcraft)
Your mentioned shell script giving me an error message while executing it
“line 19: syntex error: unexpected end of the file”
Please check and where it is get stuck..
Thanks
Charanjit Singh
Hi all,
Can someone let me know, How to write script for password expiry notification in solaries.
Hello Everyone,
My self Ravi and I am trying to make one PHP page, from which i can able to create
new user in linux. where in php code will show three boxes
1.) New User Name:
2.) Password:
3.) Botton: Add now
with this php code i want to add new user in linux through web interface.
Kindly please help me out to do that so.
Regadrs,
Ravi
i need to help me. i want to good 100% user email, password and forget password.
frisrt sign user email then get get password number in then open in base.
if forget password then send email get password
Can anyone help me thank harold
simple: echo PASSWORD | passwd USER –stdin