[PHP] popen en linux

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DeSjaak
  • Registratie: December 2000
  • Laatst online: 22-07-2024
Ik wil graag van uit PHP een commando aanroepen onder een andere gebruiker. Ik maak hier gebruik van sudo, deze prompt echter om een wachtwoord. En dat kan je niet doorgeven met exec() of system(). Tot zover ben ik tot de volgende code gekomen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
<?php

$handle = popen("sudo -u root command_die_alleen_root_mag_uitvoeren","w"); 

sleep(1); 
fputs($handle,"wachtwoord");  // antwoord op de prompt voor het wachtwoord

$read = fread($handle, 2096); // uitlezen van de handler
echo $read;

pclose($handle); // back to php 
?>


Dit werkt echter niet, ik krijg geen enkele output. Kan iemand me hiermee helpen?

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

zorgen dat je geen password hoeft in te voeren met sudo en dat commando :?
/etc/sudoers editen dus (met visudo uiteraard)

Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
Of ssh gebruiken om passwoordloos commandos uit te voeren. Er is een file in .ssh/ (van root) die bepaald welke keys een bepaald commando mogen uitvoeren.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 13:32

Creepy

Tactical Espionage Splatterer

I.p.v. popen gebruiken een fork i.c.m. lpexec of andere variant gebruiken. Na je fork kan je met dup2 de stdin en stdout opleiden van het proces dat je met lpexec gaat aanroepen naar twee verschillende streams. Dan heb je 1 stream om naar te schrijven, en een andere om de uitvoer van het proces uit te lezen.

Met popen krijg je maar 1 stream terug. Als je "w" gebruikt krijg je een schrijfbare stream terug welke is gekoppeld aan de stdin, als je de "r" gebruikt krijg je een leesbare stream terug die gekoppeld is aan de stdout.

Edit: oops.. eeh.. geen idee of php ook dup2 en fork ondersteunt. * Creepy gokt van niet, maar dat kan je zelf wel uitzoeken ;)

[ Voor 13% gewijzigd door Creepy op 11-06-2004 11:17 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • DeSjaak
  • Registratie: December 2000
  • Laatst online: 22-07-2024
zorgen dat je geen password hoeft in te voeren met sudo en dat commando
/etc/sudoers editen dus (met visudo uiteraard)
Ik heb de regel "apache ALL = (ALL) ALL opgenomen in dit bestand maar dan vraagt linux nog steeds om het wachtwoord van apache.
Of ssh gebruiken om passwoordloos commandos uit te voeren. Er is een file in .ssh/ (van root) die bepaald welke keys een bepaald commando mogen uitvoeren.
Heb ik ook naar gekeken en is eigenlijk wat ik nodig heb omdat ik niet alleen onder de root scripts wil uitvoeren maar ook op een andere machine.
Maar eigenlijk heb je dan het zelfde probleem, want nog steeds wil ik als ik ben ingelogd onder ssh commando's kunnen uitvoeren, hiervoor moet ik dan dus kunnen schrijven naar de input van linux.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

DeSjaak schreef op 11 juni 2004 @ 11:25:
[...]


Ik heb de regel "apache ALL = (ALL) ALL opgenomen in dit bestand maar dan vraagt linux nog steeds om het wachtwoord van apache.
ehm, je moet als je geen password wil invoeren natuurlijk het keyword "NOPASSWD" meegeven zoals in de manpages staat ;)
daarnaast is wat je nu doet alles behalve veilig :X
laat dus niet alles zonder password als root uitvoeren, zeker niet door je webserver account ;)

Acties:
  • 0 Henk 'm!

  • DeSjaak
  • Registratie: December 2000
  • Laatst online: 22-07-2024
daarnaast is wat je nu doet alles behalve veilig
Ja dat leek me eigenlijk ook wel

Dus dat ssh met authentication keys is denk ik wel een beter idee.
Maar dan heb ik nog steeds het probleem dat ik in een ssh-sessie commando's wil uitvoeren.
Edit: oops.. eeh.. geen idee of php ook dup2 en fork ondersteunt. * Creepy gokt van niet, maar dat kan je zelf wel uitzoeken
Fork heb ik gevonden op http://nl.php.net/manual/en/function.pcntl-fork.php. dup2 kon ik binnen php niet vinden.
Maar hoe kan ik deze functies zo gebruiken dat ik commando's kan geven op de input en resultaten kan halen uit de output.

Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
DeSjaak schreef op 11 juni 2004 @ 11:25:
[...]

Heb ik ook naar gekeken en is eigenlijk wat ik nodig heb omdat ik niet alleen onder de root scripts wil uitvoeren maar ook op een andere machine.
Maar eigenlijk heb je dan het zelfde probleem, want nog steeds wil ik als ik ben ingelogd onder ssh commando's kunnen uitvoeren, hiervoor moet ik dan dus kunnen schrijven naar de input van linux.
En wat is je probleem dan? Je hoeft toch niets interactief te doen?

Acties:
  • 0 Henk 'm!

  • DeSjaak
  • Registratie: December 2000
  • Laatst online: 22-07-2024
Het probleem is dat ik wel een command kan geven:

exec("ssh 192.168.1.1")

maar dan wil ik vervolgens in die sessie een script aan roepen.
Dit kan niet omdat als "ssh 192.168.1.1" is uitgevoerd hij ophoudt. Dus hoe kan ik in die ssh sessie commando's uitvoeren.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

DeSjaak schreef op 11 juni 2004 @ 13:47:
Het probleem is dat ik wel een command kan geven:

exec("ssh 192.168.1.1")

maar dan wil ik vervolgens in die sessie een script aan roepen.
Dit kan niet omdat als "ssh 192.168.1.1" is uitgevoerd hij ophoudt. Dus hoe kan ik in die ssh sessie commando's uitvoeren.
wat denk je ervan omdat eens zelf op te zoeken? :X

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
michael@cervix:~$ ssh --help
Usage: ssh [options] host [command]
Options:
  -l user     Log in using this user name.
  -n          Redirect input from /dev/null.
  -F config   Config file (default: ~/.ssh/config).
  -A          Enable authentication agent forwarding.
  -a          Disable authentication agent forwarding (default).
  -X          Enable X11 connection forwarding.
  -Y          Enable trusted X11 connection forwarding.
  -x          Disable X11 connection forwarding (default).
  -i file     Identity for public key authentication (default: ~/.ssh/identity)
  -t          Tty; allocate a tty even if command is given.
  -T          Do not allocate a tty.
  -v          Verbose; display verbose debugging messages.
              Multiple -v increases verbosity.
  -V          Display version number only.
  -q          Quiet; don't display any warning messages.
  -f          Fork into background after authentication.
  -e char     Set escape character; ``none'' = disable (default: ~).
  -c cipher   Select encryption algorithm
  -m macs     Specify MAC algorithms for protocol version 2.
  -p port     Connect to this port.  Server must be on the same port.
  -L listen-port:host:port   Forward local port to remote address
  -R listen-port:host:port   Forward remote port to local address
              These cause ssh to listen for connections on a port, and
              forward them to the other side by connecting to host:port.
  -D port     Enable dynamic application-level port forwarding.
  -C          Enable compression.
  -N          Do not execute a shell or command.
  -g          Allow remote hosts to connect to forwarded ports.
  -1          Force protocol version 1.
  -2          Force protocol version 2.
  -4          Use IPv4 only.
  -6          Use IPv6 only.
  -o 'option' Process the option as if it was read from a configuration file.
  -s          Invoke command (mandatory) as SSH2 subsystem.
  -b addr     Local IP address.
Pagina: 1