更改目录不会在apache调用的php脚本中保留

时间:2011-12-02 01:03:38

标签: php apache shell-exec

我正在尝试构建一个脚本,在我的服务器上进行一些更改,我可以通过访问网页来调用它。

但是,我遇到了一些关于apache用户权限的困难,他们尝试在我的php脚本中运行shell命令。根据您的服务器,用户可能是wwwrun或wwwdata。

例如,我想将目录更改为../subdomains/$url/httpdocs/,但如果我运行后续pwd,则表示我没有更改目录。我可以列出其他目录,但文件夹的权限阻止我进行大多数更改。

我不能手动进入服务器并chmod文件夹,因为文件夹应该是在我进入其他更改之前由系统自动生成的。

首先,我尝试编辑/ etc / sudoers,它适用于我的机器上的可执行文件,我实际上知道它的位置。然而,尽管我的所有搜索,我找不到像可执行文件中建立的BaSH的位置,如cd。但是,我觉得这是一个红鲱鱼。将这些功能添加到我的sudoers文件可能不利于安全性。

也许apache suEXEC是要走的路。但是我的服务器管理旅行并不是很先进,而且我没有为我的技能水平的人找到足够的指南来安装和设置它。

我还试图编写一个shell脚本,我可以从第一个php脚本调用,但我正在努力让它完全工作。我将继续使用它,但我觉得我可以并且应该能够使原始文件起作用。

对不起文字墙。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

我用来为我所拥有的约会网站的每个注册用户创建单独的目录,以便在他们上传图像并经过所有必要的处理和安全后,它会将其转储到具有该用户ID的文件中。这样,我不必搜索成千上万的图像,而只需要根据user_id搜索一个小目录。这就是我做到的。也许它会帮助你。

    //path has to already exist with 773 perm
    $path = 'path/to/dir';

    //name of new dir, I use user ids for this
        $dirname = '0123456789';

    //create folder for user if one doesn't exist
    //for this to work; had to edit /etc/sudoer with: sudo visudo -s command
    //added: www-data ALL=(ALL) NOPASSWD: ALL
    $thisdir = getcwd();
    $dir = $thisdir ."/".$path."/".$dirname;

    if(!is_dir($dir)){

            mkdir($dir, 0731);

            //required to change dir perm to 755
            $old = umask(0);
            chmod($dir, 0731);
            umask($old);

    }