I'm trying to run notepad on the server (localhost for now).
exec() and system() functions are working fine when for example write ping 127.0.0.1.
But this does not work (working fine if I write the command directly in the command prompt):
$command = "C:\WINDOWS\system32\notepad.exe";
$result = system($command);
print_r($result);
Using Windows XP with xampp. Probably I don't have permissions because the command is executed from some other account but I don't know how to check this.
Any advices?
Edit:
As bwoebi said, I have opened processes but they are opened from a different user (SYSTEM) and I can't see when the application is opened. So, I have to paraphrase my question: how to change the user which is used when executing commands from a PHP script?
First you need to escape the backslashes in your command string if you're not using single quotes :
$command = "C:\\WINDOWS\\system32\\notepad.exe";
Also note that if Apache is running as a Windows service, it does not have desktop interaction permission, so it can't open a GUI, try running the script directly with PHP on the command line.
EDIT
The user used to run command is the user that is running PHP. To change the user running PHP, you'll have to change the user running Apache, if you want this user to have desktop interaction permission, you'll have to run Apache yourself and not as a service.
let the process a bit sleep after executing the shell command and search in the TaskManager for a Notepad... Then you'll see that this are two different users (and you don't see the other users Notepad)
Note pad is a GUI program so requires the windows TTY to be active.
Ping is command line so can be ran by the system directly and piped results into the program calling it.
With out getting into too much detail of how os's work basically it can't be done on a windows machine (its possible on unix machines but more difficult.)
Related
I have a php script that uses a shell_exec to call a shell script, I am using a ajax call to the php script,
In mac os, it does run without any issues, but when I try to run it in my ubuntu vm, it does not do the shell_exec command when called from the ajax, but if I run from the unix console using
php script.php
it does run the shell_exec normally.
Anyone has had this issue before?
The php code is this
<?php
$output = shell_exec('sudo sh /var/www/html/SIRSProject/WebApp/php/teste.sh');
echo $output;
?>
Most probably this is because when called via the web server the command will run as another user compared to when you call it directly on the command line.
Which web server are you using? If you're running apache for example you can see/change the user PHP is run as by the webs server in the User directive; under Ubuntu this www-data.
Another reason may be that sudo ask for a password which can not be provided by PHP. Note here: when running on the terminal sudo may cache the authorization for that terminal session. So maybe also test manually executing the PHP script in a new terminal session.
In both cases you may need to update your /etc/sudoers to allow for non-interactive execution of sudo.
But be aware: THIS IS DANGEROUS!
Calling an external command with sudo from a web server can easily become a huge security risk by allowing to execute commands with root privileges from the web. Only proceed with this if you really know what you are doing - especially never trust the user input!
I have an IIS server with Php and have been trying to execute scripts using exec() and system() with no luck. When i go to the machine and run it by double clicking it, or by opening command and running the batch file, 4 windows pop open with ffmpeg streams going and dump to folder.
With exec("cmd.exe 'c:\inetpub\wwwroot\estf\batch\srRecord.bat'");
I am getting some of the batch file process working (creates new folder and dumps to file, but i can't see the cmd gui anywhere. And my stop.bat won't taskkill the ffmpeg process.
Is there a way to bring up the cmd GUI on the external device, also a way to run the exec() command and pass on so that other devices or batch files can kill these tasks (i am thinking that because the php is still running it, nothing else has rights to stop it.
Regards,
Mitchell
I've got this problem with very poor performance with PHP executing bash script with remote ssh and doing a grep on a log. In web browser I receive output after 40 seconds. Executing bash script(ssh + grep on remote machine) directly over my local machine is taking 8 seconds. I know I cannot bypass this so I came up with idea of :
Creating PHP script which will save to a text file on a local machine all "variables" I need. Let's call it "parameters.txt". Then other bash script "reader.sh" will read this "parameters.txt" file, do all of the magic of remote ssh and grep, then save output to "output.txt". Background script will run every 2 seconds the reader.sh
Is it a good idea?
If you really need to use PHP over SSH, you could use something like http://phpseclib.sourceforge.net/. They have a nice ssh implementation which I used for sometime for deploy applications and configure Linux servers (puppet replaced it). Your code will be cleaner and easy to maintain.
Another option is, if you are reading logs from Linux ( messages, apache, syslog, etc...) you have options with Rsyslog (http://www.rsyslog.com/) to centralize it on a server and work on it locally. This would be cheaper for your computers and easier to deploy.
Here is how you do it fast. I recently published a project that allows PHP to obtain and interact with a real Bash shell, even through SSH. Get it here: https://github.com/merlinthemagic/MTS
After downloading you would simply use the following code:
$shell = \MTS\Factories::getDevices()->getRemoteHost('ip_address')->getShellBySsh('username', 'secretPassword');
//execute the grep command
$return1 = $shell->exeCmd("cat /full/path/to/logfile | grep \"someExpression\"");
echo $return1; //contains all the return that matched the grep expression
I am compiling and executing a C program that uses a PHP System Command on Windows XP Server.
If the C program contains a System command like System("shutdown -a") or any system command, then it turns my system down.
I want these kinds of commands to be denied. How do I show "permission denied" as an output when a program tries to run a system command?
Here is my code.
PHP script contains-
system(gcc code.c -o out); system(out.exe);
IF C program contains-
int main() { system("shutdown -r"); }
Is there a way to block those commands from being run?
Windows runas command
You might be able to use windows runas command to run a command as a specific user. And in that user's profile, set a list of white listed commands. https://superuser.com/questions/42537/is-there-any-sudo-command-for-windows
Roll your own command white list
Create a list of commands in PHP or C that are allowed to be run through the C program, and if the command isn't on the approved list, it is denied. Or of you like to live dangerously, create a black list, and define a bunch of things you don't want run.
Ok, so the simple answer is "Don't run as root" (then the user can only access files he/she has created, so not so much chance of doing damage)
The more sophisticated answer is to farm out the running of the code onto a virtual machine within the server. A virtual machine can be cloned from a template (or whatever the VM software calls such a thing) in fairly short time. Within a VM, the code running there has no access to the "REAL" machine that it runs on, so if the user wants to destroy his/her virtual machine, that is his/her problem - just have to request a "new virtual machine" before they can continue working.
At preset we have need to launch apps on a linux box remotely
To do this we have php script that is run at boot via the rc.local file. This php script watches a command file. This has commands written to it.
The php script has trouble running some apps. For instance it can boot X11, but it can't run an app that is meant for X11.
But, if we run the php script from a terminal, them the system works just just fine
Here is the contents of the rc.local file (this fails).
sudo -u jacob /usr/bin/php /home/listener/ListenerThread.php > /var/www/html/out.txt &
The user jacob as sudo root access with no need for passwords
Please help
Most likely if it's an X11 issue the children aren't having DISPLAY set in their environment, but without error messages we can't help you.
One solution I would suggest is to start X11 at boot and put the line that launches your script into your .xinitrc. This way your script will be able to run GUI programs correctly.
If you don't like that solution, then try running your gui apps from within the script like this: env "DISPLAY=:0.0" your_gui_app