【问题标题】:PHP Exec Permission DeniedPHP 执行权限被拒绝
【发布时间】:2012-04-02 15:04:56
【问题描述】:

我正在尝试使用 PHP 编译文件。 PHP 代码是...

if(isset($_POST['submit'])){
    $filename= "source/source.c";
    $fp = fopen($filename, "w");
    fwrite($fp, $_POST['answer']);      
    // Now compile...       
    echo system("gcc $filename 2>&1");


}

我得到的输出为

/usr/bin/ld: cannot open output file a.out: Permission denied collect2: ld returned 1 exit status 1

我不知道代码或权限有什么问题。我在 Ubuntu 11.04 上使用 LAMP Stack。 我已经尝试将文件夹 chown 到 www-data 和 chmoding 到 777 。但我仍然遇到同样的错误。

非常感谢任何关于做什么的指导:)

已经谢谢了,

最好的问候

阿曼·高塔姆

【问题讨论】:

  • 专门检查 a.out 的权限。同样,一旦您执行chmod,请再次使用ls -l 进行验证
  • 你正在通过 gcc 编译用户输入?
  • 我希望这只是一个个人项目,而不是面向公众的系统。如果您打算公开访问,这是一个主要的安全问题。
  • @Pawan:是的,我仔细检查了它:(它属于 www-data 和 777 权限
  • @Joedanm:是的。我有更好的选择来使用 Web 界面进行编译吗? :)

标签: php linux compiler-construction permissions exec


【解决方案1】:

检查输出目录的权限,我看到一个$_POST,看来是apache运行脚本,检查apache是​​否可以写入目录,并覆盖现有的a.out。

【讨论】:

  • 感谢您的回答。但是我该怎么做呢?有一个用户 www-data。但是我怎样才能授予进程权限呢?
  • 两种解决方案:chmod -R o+rw(或 chmod -R 666)在您使用的目录上。你需要给 www-data 用户对目录的完全访问权,如果你不想让其他进程有访问权,你可以使用 ACL,但它更复杂。
  • 在您使用的目录上执行 ls -ld 以查看 www-data 拥有的权限。
【解决方案2】:

如果您已经检查了权限并且它是 777 ,但仍然无法正常工作,您可以检查您的系统中的 app Armor 或 se Linux 是否处于活动状态。禁用应用装甲:

AppArmor 可以被禁用,通过输入卸载内核模块 以下:

sudo /etc/init.d/apparmor 停止

sudo update-rc.d -f apparmor remove

重启

【讨论】:

    猜你喜欢
    • 2016-04-15
    • 2013-04-14
    • 1970-01-01
    • 2014-07-15
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 2012-07-27
    相关资源
    最近更新 更多