password does not work with useradd -p

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 suer first :

sudo useradd -m -s /bin/bash guest_user

Now set the password :

sudo passwd guest_user

Or better use adduser instead :

sudo adduser --gecos '' guest_user

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') username

You 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 passwd1

As 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_user

and then:

    sudo passwd guest_user

Two 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.