我想通过 php exec 命令打开存储在 MAC OS X 10.8 服务器上的文本文件。为此,我首先创建了一个名为 dummy.txt 的虚拟文本文件,其中包含一些文本。然后我创建了一个名为 script.sh 的脚本文件,包括以下内容:
open -a /Applications/TextEdit.app /Library/WebServer/Documents/Secured/upload/dummy.txt
然后创建了一个测试 php 文件,包括以下内容:
exec('/Library/WebServer/Documents/Secured/upload/script.sh');
Mac 上的 Apache 用户“_www”被授予 _www 的所有文件的所有权,并且 dummy.txt 和 test.php 的权限为 644,而 script.sh 文件的权限为 755。
以标准用户身份登录,从终端运行 script.sh 会显示 TextEdit 程序会打开 dummy.txt 文件。
以root身份登录,再次尝试标准用户,如下所示:
su - myuser -c "/Library/WebServer/Documents/Secured/upload/script.sh"
将正常显示编辑器。然而;
su - _www -c "/Library/WebServer/Documents/Secured/upload/script.sh"
无法运行文本编辑器。
当我通过客户端机器浏览器访问 test.php 时,它也没有显示文本编辑器。
但是,通过客户端计算机访问会在 apache 错误日志中显示以下错误:
LSOpenURLsWithRole() failed with error -10810 for the file /Library/WebServer/Documents/Secured/upload/dummy.txt
将 _www 添加到具有所有权限的 sudoers 文件(如下所示)中并没有解决我的问题。
_www ALL=(ALL) NOPASSWD: ALL
我什至尝试在 sudoers 中添加以下行:
Defaults:_www !requiretty
并在 passwd 文件中将 _www 用户的 shell 从 false 设置为 sh。
他们都没有工作。我还应该补充一点,在这一点上,安全不是我关心的问题。我只想成功运行它。然后我会处理安全隐患。
有什么建议么 ?提前致谢