php – 添加到sudoers.d的脚本不是以root身份执行的
在xubuntu框中,我有以下脚本让
PHP创建我的用户拥有的目录:
<?php if(!isset($_REQUEST['path'])) die('No path specified'); $path = $_REQUEST['path']; $res1 = shell_exec("sudo mkdir -p $path"); $res2 = shell_exec("sudo chown -R majid:majid $path"); var_dump($res1,$res2); ?> 该脚本位于/var/www/path/to/mkdir.php中 我还将此文件添加到/etc/sudoers.d/grantmkdir,其中包含以下内容: www-data ALL=(ALL:ALL) NOPASSWD: /var/www/path/to/mkdir.php 我已将文件chmoded到0440.从浏览器访问mkdir.php,var转储的输出为NULL NULL,并且不创建任何目录.我究竟做错了什么? 解决方法
你的设置有点混乱.
当您从浏览器访问此脚本时,apache会使用www-data用户启动它. Sudo没有被执行.你不能让apache通过sudo调用你的脚本. 例如这样: 创建两个脚本.第一个将由apache调用,第二个将由第一个通过sudo调用. first.php: <?php if(!isset($_REQUEST['path'])) die('No path specified'); $path = $_REQUEST['path']; // By the way here you should verify the path! Otherwise malicious users can make your system execute whatever they want... shell_exec("sudo /var/www/path/to/second.php " . $path); ?> second.php #!/usr/bin/php <?php shell_exec("sudo mkdir -p " . $argv[1]); shell_exec("sudo chown -R majid:majid " . $argv[1]); ?> 并使second.php可以通过sudo执行: /etc/sudoers.d/second www-data ALL=(ALL:ALL) NOPASSWD: /var/www/path/to/second.php 这样apache将启动first.php,它将使用sudo启动second.php. 您可以测试sudo设置是否正常工作,登录到您的服务器,切换到www-data(su www-data).并手动运行脚本. 一些附注: >检查错误日志可能很有用. (tail / var / log / apache / error_log或stg类似)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |