Executing a shell script from a PHP script

后端 未结 4 805
时光取名叫无心
时光取名叫无心 2020-11-27 05:55

I want to execute a Bash script present on the system from a PHP script. I have two scripts present on the system. One of them is a PHP script called client.php

4条回答
  •  被撕碎了的回忆
    2020-11-27 06:40

    Without really knowing the complexity of the setup, I like the sudo route. First, you must configure sudo to permit your webserver to sudo run the given command as root. Then, you need to have the script that the webserver shell_exec's(testscript) run the command with sudo.

    For A Debian box with Apache and sudo:

    1. Configure sudo:

      • As root, run the following to edit a new/dedicated configuration file for sudo:

        visudo -f /etc/sudoers.d/Webserver
        

        (or whatever you want to call your file in /etc/sudoers.d/)

      • Add the following to the file:

        www-data ALL = (root) NOPASSWD: 
        

        where is the command that you need to be able to run as root with the full path in its name(say /bin/chown for the chown executable). If the executable will be run with the same arguments every time, you can add its arguments right after the executable file's name to further restrict its use.

        For example, say we always want to copy the same file in the /root/ directory, we would write the following:

        www-data ALL = (root) NOPASSWD: /bin/cp /root/test1 /root/test2
        
    2. Modify the script(testscript):

      Edit your script such that sudo appears before the command that requires root privileges(say sudo /bin/chown ... or sudo /bin/cp /root/test1 /root/test2). Make sure that the arguments specified in the sudo configuration file exactly match the arguments used with the executable in this file. So, for our example above, we would have the following in the script:

      sudo /bin/cp /root/test1 /root/test2
      

    If you are still getting permission denied, the script file and it's parent directories' permissions may not allow the webserver to execute the script itself. Thus, you need to move the script to a more appropriate directory and/or change the script and parent directory's permissions to allow execution by www-data(user or group), which is beyond the scope of this tutorial.

    Keep in mind:

    When configuring sudo, the objective is to permit the command in it's most restricted form. For example, instead of permitting the general use of the cp command, you only allow the cp command if the arguments are, say, /root/test1 /root/test2. This means that cp's arguments(and cp's functionality cannot be altered).

提交回复
热议问题