【问题标题】:How to use Wine from Apache/Php? - '/var/www' is not owned by you如何使用来自 Apache/Php 的 Wine? - '/var/www' 不属于你
【发布时间】:2010-11-25 12:44:47
【问题描述】:

我需要从我的 Debian 服务器上的 php 脚本运行 Windows 命令行工具。 为此,我正在尝试 Wine。 通过终端调用 wine 和工具工作正常:“$ wine tool.exe”

但是当从我的 php 脚本运行相同的...

exec("wine tool.exe");

...我在 Apache 错误日志中得到以下信息: wine: '/var/www' 不属于你,拒绝在那里创建配置目录

我猜这是一个简单的基本 linux 用户权限问题...... 我应该将 Wine 的用户权限更改为 www-data 吗?怎么样?

【问题讨论】:

    标签: php apache wine


    【解决方案1】:

    您应该为运行 Wine 创建一个单独的主目录。创建一个属于 www-data 的目录,设置 HOME 变量,su www-data,然后运行一次 winecfg;然后运行 ​​tool.exe(作为该用户)。在 exec 调用中,确保设置了 HOME(尝试exec("HOME=/tmp/wine wine tool.exe")

    【讨论】:

    • 谢谢马丁、马修和迈克!快速原型:通过创建 /var/www/.wine/ 目录,并将其权限设置为 www-data,它就可以工作了!我会试试你的解决方案,马丁,把它移出 /var/www/
    • 这对我来说非常有效,只需要将 HOME 改成 apache 就可以了!
    【解决方案2】:

    您将要使用chown 来修改wine 和tool.exe 的所有权。

    请注意,这可能会引发一些安全问题。

    【讨论】:

      【解决方案3】:

      由于我正在运行 FreeBSD,我收到错误 wine: '/root' is notowned by you。创建一个名为 '/var/www' 的文件夹不会有太大帮助:(

      据我所知,Apache 以 www 或线程运行,而主进程以 root 身份启动。如果您没有任何管理员权限,您可以随时尝试让管理员在 sudoers 文件中添加一行。

      我在我的 sudoers 文件中添加了以下行,它让 Apache(www 用户)使用 sudo 作为我的用户(myuser)运行 wine,而不是作为 www 或 root。

      www localhost = (myuser) NOPASSWD: /usr/home/myuser/bin/wine

      在我的 PHP 脚本中,我有这样的内容:

      exec("HOME=/usr/home/myuser sudo -u myuser /usr/home/myuser/bin/wine /usr/home/myuser/test.exe"

      到目前为止似乎有效。

      【讨论】:

        【解决方案4】:

        我使用的是 CentOS 5.5 Linux(与 RHEL 相同),刚刚从我家复制了 .wine 目录并递归更改了所有者:

        # sudo cp -R ~/.wine /var/www
        # sudo chown -R apache.apache /var/www/.wine
        

        顺便说一句,对于一些更棘手的 Windows 程序,我必须安装 Xvfb(rpm 包名称:xorg-x11-server-Xvfb)并从 /etc/inittab 的内部运行它:1,然后将 DISPLAY 设置为 localhost:1在从我的网络脚本启动 Wine 之前。

        【讨论】:

        • 您的解决方案对我有用(针对 Ubuntu 进行了修改)。我很好奇这是否会打开任何值得担心的安全漏洞?
        【解决方案5】:

        似乎无害,只要wine可以在没有配置目录的情况下运行。

        尝试看看 wine 是否可以在命令行上使用指定的配置目录运行。如果没有,您可以做两件事:将现有的(例如从您的用户)wine config 目录复制到 /var/www 或忽略此警告并将 STDERR 输出重定向到其他地方:

        exec ("wine tool.exe 2>/dev/null");
        

        【讨论】:

          【解决方案6】:

          或者......你可以跳过整个 sudo 事情。启动 wine 在你的主目录中生成一个配置文件,然后让管理员对你的 wine 配置文件执行 chown www:users .wine。

          Apache 现在应该拥有使用您的配置文件运行 wine 所需的权限。

          www 用户在 linux 上好像有别的名字...

          exec("HOME=/usr/home/myuser /usr/home/myuser/bin/wine /usr/home/myuser/test.exe"

          【讨论】:

            【解决方案7】:

            已解决 所以最后,使用“单声道”命令并通过 PHP 脚本运行。 这是我的命令:

            shell_exec('mono Release/X12Parser.exe Release/EDI_FILES/first_edi.edi Release/XML_FILES/firstXML.xml');
            

            要安装单声道,请点击此链接。 Install mono

            谢谢

            Raja Chakraborty

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-02-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-12-07
              • 2011-12-09
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多