I am running ubuntu 14.04 LTS. I ran the following command to create a user
$sudo useradd -m -p password1 guest_userand then tried to switch to the user with
$su guest_userBut i could not login with password1
Am i missing something? Am i suppose to login with password1 or something else as -p option says in the man page for useradd
-p, --password PASSWORD The encrypted password, as returned by crypt(3). The default is to disable the password. Note: This option is not recommended because the password (or encrypted password) will be visible by users listing the processes. You should make sure the password respects the system's password policy.The above confuses me because when i type the command
useradd -m -p password1
the password password1 is visible on the command line. How to make it invisible in the above command?
5 Answers
From man useradd :
-p, --password PASSWORD The encrypted password, as returned by crypt(3). The default is to disable the password.As you can see the PASSWORD with -p option is the encrypted password returned by the crypt(3) library function.
If you use -p password1, the system will consider this plain text password1 as the encrypted shadow password entry in /etc/shadow.
The solution is to use the encrypted password here with -p which is unsafe, you should set the password interactively.
For example create the user first :
sudo useradd -m -s /bin/bash guest_userNow set the password :
sudo passwd guest_userOr better use adduser instead :
sudo adduser --gecos '' guest_user 5 You can use perl to print the encrypted password and use it with -p option in useradd command.
$ sudo useradd -m -p $(perl -e 'print crypt($ARGV[0], "password")' 'YOUR_PASSWORD') usernameYou also can use it with other options like -s for Shell or -d for home directory.
Try adding an argument after each option you want to use. For example:
useradd -m guest_user -p passwd1As the useradd man page suggests, adding your password in this way is not considered secure because it is transmitted in plain text. For an alternative, try:
sudo useradd -m guest_userand then:
sudo passwd guest_userTwo caveats:
the line that begins with: NAME_REGEX= in: /etc/adduser.conf may prohibit the use of the underscore "_" character for usernames;
there may be password complexity requirements set in: /etc/pam.d/common-password which require a more complex password.
An alternative to doing what you want is:
$ sudo su
# useradd -m USER && echo "USER:PASSWORD" | chpasswd You can use the following function:
myAddUser() { # check for this in '/etc/passwd' and '/etc/shadow' # $1 is the username # $2 is the password sudo useradd -s /bin/bash -m -p $(perl -e 'print crypt($ARGV[0], "password")' "$2") "$1" }Like this:
myAddUser mostafa 1557 "This is the only user"You can also source the function and use it as you wish!
This is a modification of Chhaileng answer.