Je veux vérifier, à partir de la ligne de commande linux, si un mot de passe en texte clair donné est le même qu'un mot de passe crypté sur un / etc / shadow
(J'en ai besoin pour authentifier les utilisateurs Web. J'utilise un Linux intégré.)
J'ai accès au fichier / etc / shadow lui-même.
linux
command-line
password
embedded
michelemarcon
la source
la source
Réponses:
Vous pouvez facilement extraire le mot de passe crypté avec awk. Vous devez ensuite extraire le préfixe
$algorithm$salt$
(en supposant que ce système n'utilise pas le DES traditionnel, qui est fortement déconseillé car il peut être forcé par la force de nos jours).Pour la vérification du mot de passe, la fonction C sous-jacente l'est
crypt
, mais il n'y a pas de commande shell standard pour y accéder.Sur la ligne de commande, vous pouvez utiliser une ligne unique Perl pour invoquer
crypt
le mot de passe.Étant donné que cela ne peut pas être fait dans des outils shell purs, si Perl est disponible, vous pouvez tout aussi bien faire tout en Perl. (Ou Python, Ruby,… tout ce dont vous disposez qui peut appeler la
crypt
fonction.) Attention, code non testé.Sur un système embarqué sans Perl, j'utiliserais un petit programme C dédié. Attention, tapé directement dans le navigateur, je n'ai même pas essayé de compiler. Ceci est destiné à illustrer les étapes nécessaires, pas comme une implémentation robuste!
Une approche différente consiste à utiliser un programme existant tel que
su
oulogin
. En fait, si vous le pouvez, il serait idéal de faire en sorte que l'application Web exécute tout ce dont elle a besoin viasu -c somecommand username
. La difficulté ici est de fournir le mot de passe àsu
; cela nécessite un terminal. L'outil habituel pour émuler un terminal est attendu , mais c'est une grosse dépendance pour un système embarqué. De plus, bien qu'ilsu
soit dans BusyBox, il est souvent omis car bon nombre de ses utilisations nécessitent que le binaire BusyBox soit défini comme root. Pourtant, si vous pouvez le faire, c'est l'approche la plus robuste du point de vue de la sécurité.la source
su
approche.Jetez un oeil à
man 5 shadow
etman 3 crypt
. À partir de ce dernier, vous pouvez apprendre que les hachages de mot de passe/etc/shadow
ont la forme suivante:où
id
définit le type de cryptage et, en lisant plus loin, peut être l'un desSelon le type de hachage, vous devez utiliser la fonction / l'outil approprié pour générer et vérifier le mot de passe "à la main". Si le système contient un
mkpasswd
programme, vous pouvez l'utiliser comme suggéré ici . (Vous prenez le sel du fichier fantôme, si ce n'était pas évident.) Par exemple, avec desmd5
mots de passe:générera la chaîne qui doit correspondre à l'
/etc/shadow
entrée.la source
mkpasswd
, que je devais installer en utilisantapt-get install whois
. La ligne de commande pour la ligne d'ombre<user>:$6$<salt>$<pwd>:
étaitmkpasswd -msha-512 <password> <salt>
Une question similaire a été posée sur Stack Overflow . cluelessCoder a fourni un script utilisant expect , que vous pouvez ou non avoir sur votre système embarqué.
la source
Gardez à l'esprit que, en supposant que le système est correctement configuré, le programme devra être exécuté en tant que root.
Une meilleure solution que de lire le fichier shadow directement et d'écrire votre propre code autour de crypt serait d'utiliser simplement les liaisons pam.
L' archive squid était fournie avec un simple outil CLI pour vérifier les noms d'utilisateur / mots de passe à l'aide de stdio - si simple à adapter à l'utilisation d'arguments - bien que la version que j'ai piratée précédemment n'était guère une affiche de pin-up pour une programmation structurée. Un rapide google et il semble que les versions les plus récentes ont été nettoyées de manière significative mais il y a encore quelques "goto" là-dedans.
la source
la source
line 61: :: syntax error: operand expected (error token is ":")