'How to run a shell as root from php (apache)

I am using ubuntu server 20.04 LTS, where I have multiple shell files, using php from apache I need to run multiple shell files from a browser but need to run as root.

I have tried the command shell_exec and added sudoers (www-data) and none works, which I can put in the code to enter as root and be able to execute the shell script.

<?php
$code = shell_exec('echo "passwd" | sudo -u root -S sh /home/user/name.sh');
echo "<pre>$code</pre>";
?>


Solution 1:[1]

Because your are executing this script as www-data and www-data doesn't have the required privilege to execute any sudo commands.

You can try the following steps.

  1. Modify www-data in /etc/sudoers to be able to execute a script as the superuser. This is a sensitive file and you have to use visudo as the editor to make the changes.

$ sudo visudo -f /etc/sudoers

www-data ALL=(ALL) NOPASSWD: /home/user/name.sh

This will allow www-data to execute the script as the superuser without a password.

  1. In your PHP code change the command in your shell_exec() as follows:

    $code = shell_exec(sudo sh /home/user/name.sh');

Make sure your name.sh is set up with proper file modes to protect yourself.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1