Jump to content
php.lv forumi

Izpildīt komandu ar citu lietotāju


AcidRain

Recommended Posts

Nepieciešams izsaukt komandu no cita pietotāja.

Māku to izdarīt no konsolēs, bet problēma ir tajā, ka izmantoju su komandu, kura prasa paroli.

Vai kādam ir risinājums kādā veidā nodot paroli vai varbūt it kāds cits risinājums?

 

Apache man ir ar SUEXEC un attiecīgi php skripts izpildās ar kaut kādu manis nodefinētu lietotāju.

Link to comment
Share on other sites

sudo ir labs variants, vienīgi jānorāda kurš lietotājs drīkstēs palaist attiecīgo komandu.

Bet, ir viens mīnuss, nevar lasīt/rakstīt failus kā root. Ja nu vienīgi taisa vēl papildus scriptu, kas to dara, bet to es negribu!

Link to comment
Share on other sites

gy gy un pēc tam ieliec šeit servera adresi :)

 

iesaku šo domu atmest, jau iesākumā, ja negribi lai kāds pionieris tevi cenšas pačakarēt, uzliec labāk http://www.webmin.com/, un nevajadzēs ne tev apaci laist ar admin tiesībām, ne ko citu domāt.

šis sastāv no dažādiem moduļiem un var likt tieši to ko vajag

 

P.S. mans admins laikam sajuktu prātā, ja viņam kaut ko tādu paprasītu izdarīt

Link to comment
Share on other sites

he he, es ļoti labi zinu kas ir webmin, bet tas nav tas, ko man vajag!

 

Mēģināšau vēlreiz izklāstīt situāciju:

Man ir php skripts, kas tiek izpildīts ar kaut kādu lietotāju, bet ir nepieciešamas cita lietotāja tiesības, lai editotu failus un izsauktu komandas.

 

Mani ļoti apmierinātu iespēja, ja varētu izmantot su komandu no php.

Vakar to mēģināju izdarīt ar proc_open() bet arī nekā, tikko kā tiek izpildīta su komanda, tā viņa jau bļauj "su: Sorry" :(

Link to comment
Share on other sites

Nu var to izdarīt... tik jāpparaksta strīmus (pipes) ar to pāsu proc_open/popen... Tikai vot nezinu, vai su tiešām ļauj iebīdīt kaut ko no ārpuses...

 

Pats esmu rakstījis wraperi iekš C++ priekš gnupg, lai tiktu izmantotas konsoliskās komandas kur tieši tāpat paroli ir jāiebaksta arroku nevis caur parametriem..

 

Netā dabūju CPipeConsole.cpp un tad caur pipe-iem vari simulēt keyboardu :)

 

CPipeConsole *pConsole = new CPipeConsole();
pConsole->Execute(procName);

// Commit password
pConsole->WriteToPipe(_passphrase);
pConsole->WriteToPipe("\n");

Sleep(400);

 

Un re kur manuālī ir PHP piemērs

<?php
function pgp_encrypt($keyring_location, $public_key_id, $plain_text) {
 $encrypted_text='';
 $key_id = EscapeShellArg($public_key_id);
 putenv("PGPPATH=$keyring_location");

 // encrypt the message
 $descriptorspec = array(
  0 => array("pipe", "r"),  // stdin
  1 => array("pipe", "w"),  // stdout
  2 => array("pipe", "w")  // stderr ?? instead of a file
 );
 $process = proc_open("pgpe -r $key_id -af", $descriptorspec, $pipes);
 if (is_resource($process)) {
  fwrite($pipes[0], $plain_text);
  fclose($pipes[0]);
  while($s= fgets($pipes[1], 1024)) {
	 // read from the pipe
	 $encrypted_text .= $s;
  }
  fclose($pipes[1]);
  // optional:
  while($s= fgets($pipes[2], 1024)) {
 $encrypted_text.= "\n<p>Error: $s</p>\n";
  }
  fclose($pipes[2]);
 }
 return $encrypted_text;
}

Edited by Delfins
Link to comment
Share on other sites

×
×
  • Create New...