0

我不知道发生了什么。我可以通过该命令运行任何其他 shell 命令exec(),它工作正常。这显然与某处的权限有关,但我不确定是什么。我已经在许多不同的服务器上尝试过,其中一些工作正常,有些则不行。所有人都在运行 CentOS。安全模式始终处于关闭状态。

这是我试图开始工作的代码:

<?php
error_reporting(E_ALL);

if( ini_get('safe_mode') ){
   echo "safe mode is on";
}else{
   echo "safe mode is not on";
}
echo "\n\n";

echo "Start Server.....\n";

//exec("screen -clean", $err, $err1);
//exec("mkdir /var/test/tewst/");

exec("screen -dms test1 mkdir /var/test/test1/", $err, $err1);

print_r($err);
echo "\n" . $err1;
echo "\nCommands sent...";

?>

所有返回的都是这样的:

safe mode is not on

Start Server.....
Array
(
    [0] => Cannot make directory '/var/run/screen': File exists
)

1
Commands sent...

任何人都可以对此有所了解吗?

4

1 回答 1

0

更新:这是由 SELinux 引起的。

--

原来这是一些奇怪的文件系统/用户权限错误。在 PHP 中运行命令后,它返回以下ls -al /var/run内容:exec()

total 52
drwxrwxrwx. 23 root   root   4096 Oct 12 15:13 .
drwxr-xr-x. 22 root   root   4096 Oct 10 08:50 ..
d??????????  ? ?      ?         ?            ? ConsoleKit
drwxr-xr-x.  2 root   root   4096 Oct 11 18:13 abrt
-rw-r--r--.  1 root   root      5 Oct 11 18:13 abrtd.pid
-??????????  ? ?      ?         ?            ? acpid.pid
s??????????  ? ?      ?         ?            ? acpid.socket
-??????????  ? ?      ?         ?            ? atd.pid
-??????????  ? ?      ?         ?            ? auditd.pid
-??????????  ? ?      ?         ?            ? autofs-running
p??????????  ? ?      ?         ?            ? autofs.fifo-misc
p??????????  ? ?      ?         ?            ? autofs.fifo-net
-??????????  ? ?      ?         ?            ? autofs.pid
drwxr-xr-x.  2 root   root   4096 Feb 22  2013 certmonger
-??????????  ? ?      ?         ?            ? certmonger.pid
d??????????  ? ?      ?         ?            ? console
-??????????  ? ?      ?         ?            ? cron.reboot
-??????????  ? ?      ?         ?            ? crond.pid
d??????????  ? ?      ?         ?            ? cups
-??????????  ? ?      ?         ?            ? cupsd.pid
drwxr-xr-x.  2 root   root   4096 Oct 11 18:13 dbus
drwxr-xr-x.  2 root   root   4096 Feb 21  2013 faillock
d??????????  ? ?      ?         ?            ? hald
-??????????  ? ?      ?         ?            ? haldaemon.pid
drwx--x---.  2 root   apache 4096 Oct 12 15:26 httpd
d??????????  ? ?      ?         ?            ? lvm
s??????????  ? ?      ?         ?            ? mcelog-client
-??????????  ? ?      ?         ?            ? mcelog.pid
d??????????  ? ?      ?         ?            ? mdadm
-??????????  ? ?      ?         ?            ? messagebus.pid
drwxr-xr-x.  2 mysql  mysql  4096 Oct 11 18:13 mysqld
drwxrwxr-x.  2 root   root   4096 Feb 22  2013 netreport
d??????????  ? ?      ?         ?            ? plymouth
d??????????  ? ?      ?         ?            ? pm-utils
d??????????  ? ?      ?         ?            ? portreserve
-??????????  ? ?      ?         ?            ? rpc.statd.pid
-??????????  ? ?      ?         ?            ? rpcbind.lock
-??????????  ? ?      ?         ?            ? rpcbind.pid
s??????????  ? ?      ?         ?            ? rpcbind.sock
d??????????  ? ?      ?         ?            ? saslauthd
d??????????  ? ?      ?         ?            ? screen
d??????????  ? ?      ?         ?            ? sepermit
drwxr-xr-x.  2 root   root   4096 May 10 05:06 setrans
-??????????  ? ?      ?         ?            ? sm-notify.pid
-??????????  ? ?      ?         ?            ? sshd.pid
-??????????  ? ?      ?         ?            ? syslogd.pid
-??????????  ? ?      ?         ?            ? utmp
drwxr-xr-x.  2 root   root   4096 Feb 21  2013 winbindd

我通过删除目录并将/var/run权限设置为 0777 来修复它。这意味着 Web 服务器用户可以创建目录并按预期使用它。

rm /var/run/screen -R -f
chmod 0777 /var/run

我仍然不知道为什么会发生这种情况,也不知道为什么命令中到处都是问号ls。如果有人看到并知道,请发表评论或回答解释原因。这将是一个很大的帮助,因为我知道有更多的错误。

于 2013-10-12T19:41:35.590 回答