PHP Benutzer ändern

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
madaed
Beiträge: 48
Registriert: 08.08.2003 22:17:30

PHP Benutzer ändern

Beitrag von madaed » 08.08.2003 22:27:03

Hoffe, ich bin hier im richtigen Forum...wenn nicht, dann bitte ich um Entschuldigung.

Also: Ich muss aus einem PHP Script den User wechseln.
Apache läuft über den User www-user.
Dieser muss also auf Daten zugreifen, die richtiger Weise nicht für ihn gedacht sind.
Nur dieser einzige Zugriff muss sein.
Also dachte ich mir, ich könnte mich einfach per "su" als anderer User aus dem Script heraus anmelden und den Zugriff machen.

Dummerweise funtkioniert das nicht so ganz.
Denn ich kann mit PHP die Passwortabfrage nicht abfangen.
Habe schon Kombinationen wie

Code: Alles auswählen

echo PASS|su benutzer
oder

Code: Alles auswählen

su benutzer < `echo PASS`
versucht, aber die nimmt su nicht an.

Hat jemand ne Idee, wie ich das sonst lösen könnte?
Ich weiss, dass es nicht sonderlich elegant ist, aber es geht momentan nicht anders.

Ich benutze ein Debian 3.0 stable mit Kernel 2.4.2
Schonmal danke für die Hilfe.

romulus
Beiträge: 328
Registriert: 14.12.2002 13:29:43
Kontaktdaten:

Beitrag von romulus » 08.08.2003 22:44:26

schau dir mal 'sudo' an :)
Ciao
Romulus

madaed
Beiträge: 48
Registriert: 08.08.2003 22:17:30

Beitrag von madaed » 08.08.2003 22:52:24

Sudo hab ich auch schon durchgetestet.
Leider habe ich da wieder das selbe Problem.
Denn sudo fordert ja genauso das Passwort mittels Passworteingabe.
Da komme ich aber wiedermal über PHP nicht dran.
Und meine Versuche von oben funktionieren auch mit sudo nicht.

Also entweder ich mach da grundlegend was falsch, oder es geht einfach nicht....oder ich weiss einfach nicht wies geht... :)

Versucht einfach mal per Einzeiler den Benutzer zu wechseln. Ohne danach irgendein Passwort eingeben zu müssen oder sonstwas....ich kriegs nicht hin.

romulus
Beiträge: 328
Registriert: 14.12.2002 13:29:43
Kontaktdaten:

Beitrag von romulus » 08.08.2003 23:03:20

aus der sudoers manpage:

Code: Alles auswählen

authenticate
If set, users must authenticate themselves via a password (or other means of authentication) before they may run commands.  This default may be overridden via the PASSWD and NOPASSWD tags.  This flag is on by default.
Ich hab das selbst noch nicht gemacht, aber es ist durchaus möglich sudo so einzustellen, dass der User kein Passwort eingeben muss. Schau dir die Manpage mal genau an :)
Ciao
Romulus

madaed
Beiträge: 48
Registriert: 08.08.2003 22:17:30

Beitrag von madaed » 08.08.2003 23:16:48

Ich glaub ich habs.
Die Option heisst -S für sudo.

Code: Alles auswählen

-S  The -S (stdin) option causes sudo to read the password
           from standard input instead of the terminal device.
Funktioniert zwar noch nicht wirklich, aber das liegt wohl nicht am befehl selbst.
Aber egal. Vielleicht hat noch jemand eine sauberere Methode. Bin nach wie vor für alles offen. Trotzdem, danke schonmal romulus!

romulus
Beiträge: 328
Registriert: 14.12.2002 13:29:43
Kontaktdaten:

Beitrag von romulus » 08.08.2003 23:20:21

deine Lösung halte ich nicht für besonders sicher oder elegant, weil dann das Passwort im Klartext in dem Script steht, dass du ausführen willst :!:

Wie gesagt, schau dir die Manpage von sudoers an und dort ganz speziell die Optionen authenticate PASSWD und NOPASSWD.
Das ist zwar auch nicht 100%ig sicher, aber sudo ist wenigstens von tausenden Augen überwacht worden beim Entwickeln.
Ciao
Romulus

madaed
Beiträge: 48
Registriert: 08.08.2003 22:17:30

Beitrag von madaed » 08.08.2003 23:27:30

In meiner manpage steht nix von NOPASSWD.
Und zu "authentication" gibts nur folgendes:

Code: Alles auswählen

-a  The -a (authentication type) option causes sudo to use
           the specified authentication type when validating the
           user, as allowed by /etc/login.conf.  The system
           administrator may specify a list of sudo-specific
           authentication methods by adding an "auth-sudo" entry
           in /etc/login.conf.  This option is only available on
           systems that support BSD authentication where sudo has
           been configured with the --with-bsdauth option.
Version ist version 1.6.6.

Deine Lösung ist mit Sicherheit wesentlich besser, wobei ich auch niemals ein Passwort im Klartext in den Sourcecode schreiben würde.
Da include ich ne Datei, die ausserhalb des WWW Bereiches liegt. Aber Du hast recht - ist trotzdem nicht optimal.

romulus
Beiträge: 328
Registriert: 14.12.2002 13:29:43
Kontaktdaten:

Beitrag von romulus » 08.08.2003 23:41:15

die Konfigurationsdatei für sudo nennt sich /etc/sudoers und dementsprechend solltest du dir auch diese Manpage anschauen:

Code: Alles auswählen

man sudoers
Dort steht dazu folgendes:

Code: Alles auswählen

NOPASSWD and PASSWD

       By default, sudo requires that a user authenticate him or herself before running a command.  This behavior can be modi­
       fied via the NOPASSWD tag.  Like a Runas_Spec, the NOPASSWD tag sets a default for the commands that follow it in the
       Cmnd_Spec_List.  Conversely, the PASSWD tag can be used to reverse things.  For example:

        ray    rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm

       would allow the user ray to run /bin/kill, /bin/ls, and /usr/bin/lprm as root on the machine rushmore as root without
       authenticating himself.  If we only want ray to be able to run /bin/kill without a password the entry would be ....
Ciao
Romulus

madaed
Beiträge: 48
Registriert: 08.08.2003 22:17:30

Beitrag von madaed » 08.08.2003 23:46:14

Mensch, Romulus, Du bist echt super!!!
Vielen, vielen Dank!!! :D :)

Antworten