So my question is straight forward given a linux username and a password how can I test if it is a valid account?
You can validate that a given password is correct for a given username using the shadow file.
On most modern distributions, the hashed passwords are stored in the shadow file /etc/shadow (which is only readable by root). As root, pull the line from the shadow file for the given user like so:
cat /etc/shadow | grep username
You will see something like this:
username:$1$TrOIigLp$PUHL00kS5UY3CMVaiC0/g0:15020:0:99999:7:::
After the username there is $1. This indicates that it is an MD5 hash. After that there is another $, then (in this case) TrOIigLp followed by another $. TrOIigLp is the salt. After that is the hashed password, which was hashed using the salt - in this case PUHL00kS5UY3CMVaiC0/g0.
Now, you can use openssl to hash the given password using the same salt, like so:
openssl passwd -1 -salt TrOIigLp
Enter the given password when prompted, the openssl command should compute the MD5 hash using the salt provided, and it should be exactly the same as the above from the shadow file. The -1 in the above command is for MD5 hashing.
cat /etc/shadow | grep username
or even grep username /etc/shadow
? –
Palladin cat
, not echo
. I've edited the answer. –
Rew getent shadow $user
is even shorter … –
Glidden -1
in openssl passwd -1 -salt TrOIigLp
stands for MD5 hashing, if I have, instead, SHA-512 hashing is it possible to check the hashing with openssl
? Have I to use another command instead? –
Mousetail username:$6$
–
Variolous $6$
indicates a sha512 hash. See this answer for how to generate/check the hash. –
Unchaste openssl -1
for $1
and openssl -6
for $6
–
Mier root:::0:99999:7:::
. How do we interpret this? –
Joke -6
is not a valid option. –
Cardoza getent shadow username
command. If you really want to grep
the "shadow" file for "username", it should be at least as grep '^username:'
so that it searches the string in the right pace. Otherwise, with short usernames, you may get lots of garbage. –
Alien If you are concerned about security (which you should be), the accepted answer represents a security risk by leaving the plaintext password in the ~/.bash_history
file. With this in mind, it would be better to try logging in, or perhaps removing this entry from the ~/.bash_history
.
~/.bash_history
. However, attempting to login does seem the better way, since you may not have sudo
access in order to read /etc/shadow
. –
Adriannaadrianne © 2022 - 2024 — McMap. All rights reserved.