php创建目录权限被拒绝:尝试shell_exec脚本时

php创建目录权限被拒绝:尝试shell_exec脚本时,php,apache,shell,ubuntu,permissions,Php,Apache,Shell,Ubuntu,Permissions,当我尝试shell\u exec('/home/user/scripts//script')时,我得到以下错误: terminate called after throwing an instance of 'boost::filesystem3::filesystem_error' what(): boost::filesystem::create_directory: Permission denied: "/.script" Aborted (core dumped) shell_

当我尝试
shell\u exec('/home/user/scripts//script')
时,我得到以下错误:

terminate called after throwing an instance of 'boost::filesystem3::filesystem_error'
  what():  boost::filesystem::create_directory: Permission denied: "/.script"
Aborted (core dumped)
shell_exec('whoami')
在我的面向web的php脚本上返回
www-data

目录和文件的权限完全相同:

-rwxrwxr-x 1 user123   group456     8246 Jun 25 06:10 script
drwxrwxr-x 7 user123   group456     4096 Jul 10 14:54 . 
事实上,我可以
shell\u exec('touch/home/user/scripts/test')
,它将毫无问题地创建文件

$ ls -l /home/user/scripts/test
-rw-r--r-- 1 www-data www-data          0 Jul 10 14:54 test123
以下是为每个用户设置我的组的方式:

$ groups user123
user123 : group456
$ groups www-data
www-data : group456

为什么会出现此错误?

如果您试图在
/home/user/scripts//script
执行脚本,则应以
shell\u exec('sh/home/user/scripts/script')的身份运行该脚本。

当您添加
/
时,其路径上有不同的解释

当您传递
/script
-您指的是当前目录中的文件名
script


另外,您的c程序实际上也出现了错误,它告诉我们您的系统正在停止apache以获得根权限。您可以
audit2allow
让apache获得所需的特权。

您运行的脚本有一个输入错误:它试图使文件夹
/。脚本
位于根文件夹中,而不是
/script
(相对路径)。

这很有趣,我没有意识到
sh
//code>有不同的含义。您能否详细说明一下这两个命令的区别,因为现在几乎不可能搜索像
/
这样的术语。无论如何,我仍然收到一些错误:
ELF:notfound
语法错误:“(意外的
无法使用
shell\u exec('sh/home/user/scripts/script')创建0?A@
/filename表示您引用当前目录中的文件名。我怎么可能在
/home/user2/somedir/altscript.php
中编写php脚本,其中包含行
shell\u exec(“/home/user/scripts//script”)
它能工作吗?其他用户有相同的ini设置吗?如果没有,则指向正在发布的
safe\u mode\u exec\u dir
设置safe mode是关闭的,据我所知--
safe\u mode=off
来自
/etc/php5/apache2/php.ini
我不明白,这是一个打字错误吗?我可以使用
\35;!/usr/bin从命令行运行这个确切的页面/php
而且工作正常,我通过在命令行中键入
/scriptname
来运行大多数脚本,为什么它在apache上失败,但在命令行上没有失败?脚本错误消息说它无法创建
/.script
,这是一个名为
的文件夹。script
位于根文件夹
//code>中。1)您试图从PHP运行的脚本有输入错误,2)您复制/粘贴错误的错误消息,或3)boost输出错误的错误消息。您可以在运行命令之前尝试
chdir('/home/user/scripts
)`以确保它使用的是正确的PWD。没有打字错误,我没有复制/粘贴任何错误,我尝试了您的建议:
chdir
不起作用,我遇到了与我原来帖子中相同的错误。更具体地说,在我的php页面的开头使用以下
chdir
命令:
chdir('/home/user/scripts')我尝试以下命令:
shell\u exec('./script')
--在我的操作中产生错误消息<代码>shell_exec('script')
--导致新的错误消息<代码>sh:1:脚本:未找到
shell\u exec('sh script')
——会导致一些奇怪的
ELF:not found
和语法错误消息。这是一个可执行脚本还是shell脚本,如果您从命令行运行
/home/user/scripts//script
,您将获得
ELF:not found
,如果您从命令行运行
/home/user/scripts//script
会发生什么?它会得到预期的结果。事实上,我从这个线程中了解到,我还可以使用
/home/user/scripts/script
执行命令,并且它可以工作。应该注意的是,我运行的脚本不是一个PHP脚本,而是一个简短的C程序,我使用同一台机器上面向web的服务器上的PHP来调用这个脚本。我使用PHP脚本在命令行中将此C脚本作为root用户调用时没有遇到问题。当您从PHP运行它时,
shell_exec('/home/user/scripts/script')
以及
system('/home/user/scripts/script')
与我在原始帖子中粘贴的错误完全相同。如果我在我的
shell\u exec
函数中使用相同的命令并将其粘贴到命令行上,我会得到预期的结果。我认为您的问题是您的系统正在阻止apache获得根权限。你们有SELinux吗?