Sudo in exec function

时间:2015-12-22 15:26:10

标签: php linux

我的服务器上有以下文件夹,包含以下文件:

error-2015-12-20.log
error-2015-12-21.log
error-2015-12-22.log

我编写了一个包含.tar.gz的PHP脚本,其名称早于当前日期,将打包文件移动到另一个分区,并删除输入文件。它是通过exec()完成的。

问题是所有这些操作都要求我使用sudo并提供密码。

我该如何处理?

2 个答案:

答案 0 :(得分:0)

您熟悉Linux文件权限吗? 如果要执行脚本,则必须有权这样做(通过在可执行位设置的组/所有者中),如果要读取文件,则还必须有权读取这些文件。 否则,您将被迫以sudo身份执行该文件,因为root可以访问所有文件。

在此处了解详情:https://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions

答案 1 :(得分:0)

如上所述它是一个权限问题,要解决此问题,请指示sudo让您的php脚本在不提示输入密码的情况下运行:

  1. 创建自定义sudoers文件:

    sudo visudo -f /etc/sudoers.d/90_your_user
    
  2. 复制新创建的文件中的以下内容(自定义相关部分):

    Cmnd_Alias PHP_SCRIPT = /path/to/my/script.php param1 param2
    Cmnd_Alias ROOT_PROGS = PHP_SCRIPT
    
    # Programs allowed to run without password prompt of your_user
    your_user HOST=(root) NOPASSWD:ROOT_PROGS
    
  3. 然后,您可以使用sudo /path/to/my/myscript.php执行您的程序而不会出现权限问题,并且没有sudo会提示您输入密码。