Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [bash] niet-interactief een wachtwoord instellen via useradd  (gelezen 862 keer)

[bash] niet-interactief een wachtwoord instellen via useradd
« Gepost op: 2013/11/24, 16:34:12 »
ik ben samen met foxoffire33 bezig een shell script te maken wat het instellen van het e.e.a. moet automatiseren, het meeste werkt prima, op een ding na:
useradd(8) kan een wachtwoord meekrijgen via een parameter, maar die moet dan vooraf gedecodeerd zijn, hoe kunnen we, inline, deze encoderen?

het (nog platte-tekst) wachtwoord staat in de variabel $password, deze is eerder in het script gegenereerd, op dit moment word het wachtwoord via echo weergeven hier komt later nog een nettere oplossing voor.
useradd -p $password -d $homepath $username maakt de gebruiker wel aan, maar het wachtwoord komt dan als tekst in /etc/shadow omdat useradd het wachtwoord niet gecodeerd.
gezien login(1) wel verwacht dat het wachtwoord gecodeerd is komt je er dus nooit in, want hij zal het wachtwoord altijd als fout zien.

op google komt ik alleen heel veel tegen om het via perl te doen, maar ik weet dat het gewoon mogelijk is via een shell script zonder perl te gebruiken, we kennen beide perl niet en het is niet echt handig om echt afhankelijk te zijn van een stuk script wat je dus totaal niet kent.
passwd wil niet omdat die interactief werkt tenzij je --stdin gebruikt, maar Debian (en mogelijk Ubuntu?) kent die parameter dus niet (altans volgens onze shell, die meld dat --stdin ongeldig is).
ik kon ook voorbeelden vinden via openssl en dan als passwd encoderen, wat als het goed is de zelfde codering oplevert als passwd doet, hiervoor word dan het commando openssl passwd -1 $passwd gegeven.
openssl passwd -1 "testen"levert een correct wachtwoord op, mits uitgevoerd in de bash zelf, in het script echter resulteert het in de melding dat passwd de parameter -1 niet kent.
let wel: dat passwd hem niet kent, niet dat openssl hem niet kent, ofwel het systeem doet niks met openssl en voert vervolgens passwd uit.

probleem is eigenlijk op Debian 7, maar naar mijn weten werkt useradd gelijk in ubuntu en debian dus mogelijk dat iemand het weet.


ADSL? nee, neem ADHD, dat is pas snel!

Re: [bash] niet-interactief een wachtwoord instellen via useradd
« Reactie #1 Gepost op: 2013/11/24, 17:35:22 »
ok, wachtwoord is al opgelost, als iemand het nog nodig heeft:
encpasswd=$(openssl passwd -1 $password);
nu nog een probleem, er moet ook een naam gegenereerd worden, deze moet o.a. voor enkele mappen gebruikt worden, probleem wat hier ontstaat is dat openssl rand -base64 10 wel een naam genereert, maar deze uit letterlijk alle tekens kan bestaan, dus ook leestekens als +=-/|, wat niet geldig is voor map namen, is er een manier om te zorgen dat hij enkel cijfers gebruikt?


ADSL? nee, neem ADHD, dat is pas snel!

Offline Johan van Dijk

  • Administrator
    • johanvandijk
Re: [bash] niet-interactief een wachtwoord instellen via useradd
« Reactie #2 Gepost op: 2013/11/25, 03:28:23 »
In Debian en Ubuntu moet je het commando adduser gebruiken ipv useradd. Dit staat ook in de man page van useradd.

Je kan dan de --disabled-login optie gebruiken om geen wachtwoord in te stellen en het account te locken totdat een wachtwoord is ingesteld.
Dat laatste kan je dan middels chpasswd doen:
echo "username:wachtwoord" | chpasswd

Om 10 willekeurige getallen te genereren:
cat /dev/urandom | tr -dc '[:digit:]' | head -c 10