【问题标题】:PHP: executing a service start (with sudo)PHP:执行服务启动(使用 sudo)
【发布时间】:2012-01-02 00:40:49
【问题描述】:

我正在做一个系统维护脚本来检查各种服务的状态 (memcached、sphinx 等)

如果php脚本出现故障,我想从它启动服务...

我设法为 memcache 这样做:

$command = 'memcached -d -m 800 -l 127.0.0.1 -p 11211 -u root start';
$dummy = system($command, $retval);

效果很好……

现在我想为 SphinxSearch 服务做同样的事情

我试过了

$command = 'service searchd start';

但没有结果......我读到我需要 sudo 来完成这个,所以我做了

$command = 'sudo service searchd start';

甚至

$command = '/usr/bin/sudo /usr/bin/searchd';

但没有任何效果。

有什么建议吗?

【问题讨论】:

    标签: php system centos sudo


    【解决方案1】:

    尝试使用

    echo 'yourpassword' | sudo -S command
    

    【讨论】:

    • 我的根通行证?我试过 $command = 'echo ***** | sudo -u root -S /usr/bin/searchd';$dummy = system($command, $retval); ...不走运!
    • @DS_web_developer 验证您是否提供了正确的密码,因为它在我的机器上为echo mypassword | sudo -u root mkdir /lib/test 工作正常
    • @DS_web_developer 我猜如果您使用的是 root 用户,如果您更改了密码,则需要提供 root 密码。
    • 我是!我提供了登录控制台(putty)时使用的相同通行证...也尝试了 mkdir 命令...并且没有创建目录:( ... echo mypass | sudo -u root mkdir /lib/测试
    • 我想通了.... poassword 应该用单引号括起来,例如 $command = "echo 'mypass' | sudo -u root .....";
    【解决方案2】:

    用户需要权限才能运行sudo。具体来说,您的 PHP 脚本正在运行的用户需要在 sudoers 文件中。有关该文件的信息,请参阅man sudoers。使用 visudo 编辑 sudoers 文件。在授予您的 php/apache 用户运行 sudo 的权限时要非常小心。这是一个潜在的安全问题,可以让您的 PHP 脚本执行任何操作。

    【讨论】:

    • 这是我添加到 www-data ALL=NOPASSWD: /path/to/myscript.php 但它不起作用:(
    • 我也试过了:...... php ALL=(theuser) NOPASSWD: /path/to/myscript.php ......使用它 $command = 'sudo -u theuser service searchd start'; ...仍然没有成功
    • 您可能需要为每个命令(sudo 和服务)添加路径,因为您的 PHP 脚本的 PATH 环境与您的路径不同。例如/usr/bin/sudo /usr/sbin/service ...
    • 也许您应该只授予 apache 运行 SphinxSearch 服务的权限,而不是尝试使用 sudo。
    猜你喜欢
    • 2015-03-25
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 2016-04-06
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多