openssl passwd -1

Hallo,

mit obigem Befehl kann man einen Passwort-Hash erzeugen, den man mit vipw
weiter verarbeiten kann:

http://www.openssl.org/docs/apps/passwd.html

[root [at] BSDHelmut ~]# openssl passwd -1 passwort
$1$UUNaJuFy$DZW.wI4a94wvAEK7NGY2P1
[root [at] BSDHelmut ~]#

Hintergrund: Ein Webserver ist nicht via Shell erreichbar, somit kann kein
Benutzer (es läuft auch ein imap) sein Passwort ändern. Da ich das Passwort
der einzelnen Bneutzer gar nicht wissen möchte, dachte ich mir, man könnte
vielleicht ein Webinterface einrichten, bei dem der Benutzer einen neues
Passwort wählen kann und mir der Hash via EMail zugeschickt wird.

Geht das mit PHP? Es liesse ich sicherlich auch via cgi lösen, aber da es
für PHP ein openssl Modul gibt...

Danke und Gruß, Helmut

--
No Swen today, my love has gone away
My mailbox stands for lorn, a symbol of the dawn
Helmut Schneider [ Di, 04 Dezember 2007 11:54 ] [ ID #1885614 ]

Re: openssl passwd -1

Helmut Schneider schrieb:

> mit obigem Befehl kann man einen Passwort-Hash erzeugen, den man mit
> vipw weiter verarbeiten kann:
>
> http://www.openssl.org/docs/apps/passwd.html
>
> [root [at] BSDHelmut ~]# openssl passwd -1 passwort
> $1$UUNaJuFy$DZW.wI4a94wvAEK7NGY2P1
>
> [...]
>
> Geht das mit PHP? Es liesse ich sicherlich auch via cgi lösen, aber da
> es für PHP ein openssl Modul gibt...

Wenn die exec() und Konsorten zur Verfügung stehen, gibt's doch kein
Problem den Systembefehl auszuführen.

Gruß
David
David Fuhr [ Di, 04 Dezember 2007 14:34 ] [ ID #1885618 ]

Re: openssl passwd -1

Helmut Schneider schrieb:
> Hallo,
>
> mit obigem Befehl kann man einen Passwort-Hash erzeugen, den man mit
> vipw weiter verarbeiten kann:
>
> http://www.openssl.org/docs/apps/passwd.html
>
> [root [at] BSDHelmut ~]# openssl passwd -1 passwort
> $1$UUNaJuFy$DZW.wI4a94wvAEK7NGY2P1
> [root [at] BSDHelmut ~]#
>
> Hintergrund: Ein Webserver ist nicht via Shell erreichbar, somit kann
> kein Benutzer (es läuft auch ein imap) sein Passwort ändern. Da ich das
> Passwort der einzelnen Bneutzer gar nicht wissen möchte, dachte ich mir,
> man könnte vielleicht ein Webinterface einrichten, bei dem der Benutzer
> einen neues Passwort wählen kann und mir der Hash via EMail zugeschickt
> wird.
>
> Geht das mit PHP? Es liesse ich sicherlich auch via cgi lösen, aber da
> es für PHP ein openssl Modul gibt...

Es geht, ist aber nicht unproblematisch, denn php läuft im Kontext des
www users und der hat normalerweise keine Rechte openssl auszuführen bzw
die passwd Datenbank zu ändern.

Du kannst z.B. per sudo das Ausführen von openssl erlauben und auch die
Schreibrechte von shadow anpassen, so dass der www user das darf, aber
dann ist bei einer sicherheitslücke in deinem script oder nem anderen
Part des Webservers Tür und Tor offen:-)



>
> Danke und Gruß, Helmut
>
Stefan Braumeister [ Di, 04 Dezember 2007 15:01 ] [ ID #1885619 ]

Re: openssl passwd -1

David Fuhr <david.fuhr [at] web.de> wrote:
> Helmut Schneider schrieb:
>> mit obigem Befehl kann man einen Passwort-Hash erzeugen, den man mit
>> vipw weiter verarbeiten kann:
>> http://www.openssl.org/docs/apps/passwd.html
>> [root [at] BSDHelmut ~]# openssl passwd -1 passwort
>> $1$UUNaJuFy$DZW.wI4a94wvAEK7NGY2P1
>> [...]
>> Geht das mit PHP? Es liesse ich sicherlich auch via cgi lösen, aber da
>> es für PHP ein openssl Modul gibt...
> Wenn die exec() und Konsorten zur Verfügung stehen, gibt's doch kein
> Problem den Systembefehl auszuführen.

Ich hatte a etwas PHP-natives gedacht, da der Webserver in einem (BSD-)Jail
läuft und ich mir sparen wollte, openssl in das Jail zu verfrachten. Für
"openssl passwd -l $1" brauch ich kein PHP... :)

--
No Swen today, my love has gone away
My mailbox stands for lorn, a symbol of the dawn
Helmut Schneider [ Di, 04 Dezember 2007 17:57 ] [ ID #1885621 ]

Re: openssl passwd -1

Stefan Braumeister <sbraumi [at] gmx.net> wrote:
> Helmut Schneider schrieb:
>> Hallo,
>> mit obigem Befehl kann man einen Passwort-Hash erzeugen, den man mit
>> vipw weiter verarbeiten kann:
>> http://www.openssl.org/docs/apps/passwd.html
>> [root [at] BSDHelmut ~]# openssl passwd -1 passwort
>> $1$UUNaJuFy$DZW.wI4a94wvAEK7NGY2P1
>> [root [at] BSDHelmut ~]#
>> Hintergrund: Ein Webserver ist nicht via Shell erreichbar, somit kann
>> kein Benutzer (es läuft auch ein imap) sein Passwort ändern. Da ich das
>> Passwort der einzelnen Bneutzer gar nicht wissen möchte, dachte ich mir,
>> man könnte vielleicht ein Webinterface einrichten, bei dem der Benutzer
>> einen neues Passwort wählen kann und mir der Hash via EMail zugeschickt
>> wird.
>> Geht das mit PHP? Es liesse ich sicherlich auch via cgi lösen, aber da
>> es für PHP ein openssl Modul gibt...
> Es geht, ist aber nicht unproblematisch, denn php läuft im Kontext des
> www users und der hat normalerweise keine Rechte openssl auszuführen bzw
> die passwd Datenbank zu ändern.

PHP soll nicht das Passwort setzten, sondern nur den Hash ausgeben. Mehr
nicht.

> Du kannst z.B. per sudo das Ausführen von openssl erlauben und auch die
> Schreibrechte von shadow anpassen, so dass der www user das darf, aber

Gott bewahre, Nein!! :)

--
No Swen today, my love has gone away
My mailbox stands for lorn, a symbol of the dawn
Helmut Schneider [ Di, 04 Dezember 2007 20:24 ] [ ID #1885630 ]

Re: openssl passwd -1

Helmut Schneider schrieb:
> Stefan Braumeister <sbraumi [at] gmx.net> wrote:
>> Helmut Schneider schrieb:
>>> Hallo,
>>> mit obigem Befehl kann man einen Passwort-Hash erzeugen, den man mit
>>> vipw weiter verarbeiten kann:
>>> http://www.openssl.org/docs/apps/passwd.html
>>> [root [at] BSDHelmut ~]# openssl passwd -1 passwort
>>> $1$UUNaJuFy$DZW.wI4a94wvAEK7NGY2P1
>>> [root [at] BSDHelmut ~]#
>>> Hintergrund: Ein Webserver ist nicht via Shell erreichbar, somit kann
>>> kein Benutzer (es läuft auch ein imap) sein Passwort ändern. Da ich das
>>> Passwort der einzelnen Bneutzer gar nicht wissen möchte, dachte ich mir,
>>> man könnte vielleicht ein Webinterface einrichten, bei dem der Benutzer
>>> einen neues Passwort wählen kann und mir der Hash via EMail zugeschickt
>>> wird.
>>> Geht das mit PHP? Es liesse ich sicherlich auch via cgi lösen, aber da
>>> es für PHP ein openssl Modul gibt...
>> Es geht, ist aber nicht unproblematisch, denn php läuft im Kontext des
>> www users und der hat normalerweise keine Rechte openssl auszuführen bzw
>> die passwd Datenbank zu ändern.
>
> PHP soll nicht das Passwort setzten, sondern nur den Hash ausgeben. Mehr
> nicht.

Stimmt hab ich nicht richtig gelesen. Dann reicht ein Eintrag in sudoers:

apache ALL=(ALL) NOPASSWD: /usr/bin/openssl

und ein

exec('sudo openssl passwd -1 passwort');

>
>> Du kannst z.B. per sudo das Ausführen von openssl erlauben und auch die
>> Schreibrechte von shadow anpassen, so dass der www user das darf, aber
>
> Gott bewahre, Nein!! :)
>
Stefan Braumeister [ Di, 04 Dezember 2007 21:32 ] [ ID #1885634 ]

Re: openssl passwd -1

Stefan Braumeister <sbraumi [at] gmx.net> wrote:
> Helmut Schneider schrieb:
>> Stefan Braumeister <sbraumi [at] gmx.net> wrote:
>>> Helmut Schneider schrieb:
>>>> Hallo,
>>>> mit obigem Befehl kann man einen Passwort-Hash erzeugen, den man mit
>>>> vipw weiter verarbeiten kann:
>>>> http://www.openssl.org/docs/apps/passwd.html
>>>> [root [at] BSDHelmut ~]# openssl passwd -1 passwort
>>>> $1$UUNaJuFy$DZW.wI4a94wvAEK7NGY2P1
>>>> [root [at] BSDHelmut ~]#
>>>> Hintergrund: Ein Webserver ist nicht via Shell erreichbar, somit kann
>>>> kein Benutzer (es läuft auch ein imap) sein Passwort ändern. Da ich das
>>>> Passwort der einzelnen Bneutzer gar nicht wissen möchte, dachte
>>>> ich mir, man könnte vielleicht ein Webinterface einrichten, bei
>>>> dem der Benutzer einen neues Passwort wählen kann und mir der Hash
>>>> via EMail zugeschickt wird.
>>>> Geht das mit PHP? Es liesse ich sicherlich auch via cgi lösen, aber da
>>>> es für PHP ein openssl Modul gibt...
>>> Es geht, ist aber nicht unproblematisch, denn php läuft im Kontext des
>>> www users und der hat normalerweise keine Rechte openssl auszuführen bzw
>>> die passwd Datenbank zu ändern.
>> PHP soll nicht das Passwort setzten, sondern nur den Hash ausgeben. Mehr
>> nicht.
> Stimmt hab ich nicht richtig gelesen. Dann reicht ein Eintrag in sudoers:
> apache ALL=(ALL) NOPASSWD: /usr/bin/openssl
> und ein
> exec('sudo openssl passwd -1 passwort');

Das heisst dann aber, dass PHP das nativ (http://de.php.net/openssl) nicht
kann (es gibt keine Funktion a la openssl_generate_bsd_password_hash() ),
sondern "nur" openssl aufruft? :)

--
No Swen today, my love has gone away
My mailbox stands for lorn, a symbol of the dawn
Helmut Schneider [ Di, 04 Dezember 2007 21:52 ] [ ID #1885635 ]

Re: openssl passwd -1

Helmut Schneider schrieb:
> Stefan Braumeister <sbraumi [at] gmx.net> wrote:
>> Helmut Schneider schrieb:
>>> Stefan Braumeister <sbraumi [at] gmx.net> wrote:
>>>> Helmut Schneider schrieb:
>>>>> Hallo,
>>>>> mit obigem Befehl kann man einen Passwort-Hash erzeugen, den man mit
>>>>> vipw weiter verarbeiten kann:
>>>>> http://www.openssl.org/docs/apps/passwd.html
>>>>> [root [at] BSDHelmut ~]# openssl passwd -1 passwort
>>>>> $1$UUNaJuFy$DZW.wI4a94wvAEK7NGY2P1
>>>>> [root [at] BSDHelmut ~]#
>>>>> Hintergrund: Ein Webserver ist nicht via Shell erreichbar, somit kann
>>>>> kein Benutzer (es läuft auch ein imap) sein Passwort ändern. Da ich
>>>>> das
>>>>> Passwort der einzelnen Bneutzer gar nicht wissen möchte, dachte
>>>>> ich mir, man könnte vielleicht ein Webinterface einrichten, bei
>>>>> dem der Benutzer einen neues Passwort wählen kann und mir der Hash
>>>>> via EMail zugeschickt wird.
>>>>> Geht das mit PHP? Es liesse ich sicherlich auch via cgi lösen, aber da
>>>>> es für PHP ein openssl Modul gibt...
>>>> Es geht, ist aber nicht unproblematisch, denn php läuft im Kontext des
>>>> www users und der hat normalerweise keine Rechte openssl auszuführen
>>>> bzw
>>>> die passwd Datenbank zu ändern.
>>> PHP soll nicht das Passwort setzten, sondern nur den Hash ausgeben. Mehr
>>> nicht.
>> Stimmt hab ich nicht richtig gelesen. Dann reicht ein Eintrag in sudoers:
>> apache ALL=(ALL) NOPASSWD: /usr/bin/openssl
>> und ein
>> exec('sudo openssl passwd -1 passwort');
>
> Das heisst dann aber, dass PHP das nativ (http://de.php.net/openssl)
> nicht kann (es gibt keine Funktion a la
> openssl_generate_bsd_password_hash() ), sondern "nur" openssl aufruft? :)

Ne eine direkte Funktion gibts dafür nicht, aber crypt reicht dafür schon:

function shadow($password)
{
$hash = '';
for($i=0;$i<8;$i++)
{
$j = mt_rand(0,53);
if($j<26)$hash .= chr(rand(65,90));
else if($j<52)$hash .= chr(rand(97,122));
else if($j<53)$hash .= '.';
else $hash .= '/';
}
return crypt($password,'$1$'.$hash.'$');
}

Gruß Stefan
>
Stefan Braumeister [ Di, 04 Dezember 2007 23:42 ] [ ID #1885640 ]

Re: openssl passwd -1

Stefan Braumeister <sbraumi [at] gmx.net> wrote:
> Helmut Schneider schrieb:
>> Stefan Braumeister <sbraumi [at] gmx.net> wrote:
>>> Helmut Schneider schrieb:
>>>> Stefan Braumeister <sbraumi [at] gmx.net> wrote:
>>>>> Helmut Schneider schrieb:
>>>>>> Hallo,
>>>>>> mit obigem Befehl kann man einen Passwort-Hash erzeugen, den man mit
>>>>>> vipw weiter verarbeiten kann:
>>>>>> http://www.openssl.org/docs/apps/passwd.html
>>>>>> [root [at] BSDHelmut ~]# openssl passwd -1 passwort
>>>>>> $1$UUNaJuFy$DZW.wI4a94wvAEK7NGY2P1
>>>>>> [root [at] BSDHelmut ~]#
>>>>>> Hintergrund: Ein Webserver ist nicht via Shell erreichbar, somit kann
>>>>>> kein Benutzer (es läuft auch ein imap) sein Passwort ändern. Da ich
>>>>>> das
>>>>>> Passwort der einzelnen Bneutzer gar nicht wissen möchte, dachte
>>>>>> ich mir, man könnte vielleicht ein Webinterface einrichten, bei
>>>>>> dem der Benutzer einen neues Passwort wählen kann und mir der Hash
>>>>>> via EMail zugeschickt wird.
>>>>>> Geht das mit PHP? Es liesse ich sicherlich auch via cgi lösen,
>>>>>> aber da es für PHP ein openssl Modul gibt...
>>>>> Es geht, ist aber nicht unproblematisch, denn php läuft im Kontext des
>>>>> www users und der hat normalerweise keine Rechte openssl auszuführen
>>>>> bzw
>>>>> die passwd Datenbank zu ändern.
>>>> PHP soll nicht das Passwort setzten, sondern nur den Hash
>>>> ausgeben. Mehr nicht.
>>> Stimmt hab ich nicht richtig gelesen. Dann reicht ein Eintrag in
>>> sudoers: apache ALL=(ALL) NOPASSWD: /usr/bin/openssl
>>> und ein
>>> exec('sudo openssl passwd -1 passwort');
>> Das heisst dann aber, dass PHP das nativ (http://de.php.net/openssl)
>> nicht kann (es gibt keine Funktion a la
>> openssl_generate_bsd_password_hash() ), sondern "nur" openssl aufruft? :)
> Ne eine direkte Funktion gibts dafür nicht, aber crypt reicht dafür schon:
> function shadow($password)
> {
> $hash = '';
> for($i=0;$i<8;$i++)
> {
> $j = mt_rand(0,53);
> if($j<26)$hash .= chr(rand(65,90));
> else if($j<52)$hash .= chr(rand(97,122));
> else if($j<53)$hash .= '.';
> else $hash .= '/';
> }
> return crypt($password,'$1$'.$hash.'$');
> }

Genau *sowas* hatte ich gesucht!

Merci, Helmut

--
No Swen today, my love has gone away
My mailbox stands for lorn, a symbol of the dawn
Helmut Schneider [ Mi, 05 Dezember 2007 11:18 ] [ ID #1886590 ]

Re: openssl passwd -1

Helmut Schneider schrieb:

> [Quetschquoting]

Deine Postings wären besser lesbar, wenn Du Leerzeilen mitquoten und das
Quoting auf das Notwendige reduzieren würdest.

Gruß. Claus
Claus Reibenstein [ Mi, 05 Dezember 2007 12:01 ] [ ID #1887366 ]

Re: openssl passwd -1

Hallo!

Stefan Braumeister <sbraumi [at] gmx.net> writes:
>> PHP soll nicht das Passwort setzten, sondern nur den Hash ausgeben. Mehr
>> nicht.
>
> Stimmt hab ich nicht richtig gelesen. Dann reicht ein Eintrag in sudoers:
>
> apache ALL=(ALL) NOPASSWD: /usr/bin/openssl
>
> und ein
>
> exec('sudo openssl passwd -1 passwort');

Warum sollte man denn openssl unbedingt als root ausführen wollen und
nicht unter dem Apache-Benutzer?

Dafür hat man so evtl. ein Problem: openssl kann dann beliebige Dateien
überschreiben (z.B. openssl req -new -out /bla).

Grüße,
Ansgar
Ansgar Burchardt [ Mi, 05 Dezember 2007 14:36 ] [ ID #1887377 ]
PHP » de.comp.lang.php.misc » openssl passwd -1

Vorheriges Thema: Download mehrerer Dateien als Zip / Multipart?
Nächstes Thema: Wie überprüfe ich die $_POST Variable auf ihre Existenz