PHP无法读取位于/var/tmp的文件。

4

我遇到了一个非常奇怪的错误。PHP无法读取一个已经存在的文件...有什么想法吗?我没有安装SELinux。我使用的是Fedora 17和PHP 5.4。

我已经尝试了我知道的所有方法,但问题仍然存在。

[root@sqd var]# ls -lia 
total 92
  8194 drwxrwxrwx. 23 root   root   4096 ago 17 10:30 .
     2 dr-xr-xr-x. 19 root   root   4096 ago 13 16:00 ..
 32139 drwxr-xr-x.  2 root   root   4096 may 22 13:42 account
   288 drwxr-xr-x.  2 root   root   4096 feb  3  2012 adm
    13 drwxr-xr-x. 14 root   root   4096 ago  8 10:26 cache
796005 drwxr-xr-x   2 root   root   4096 feb  6  2012 cvs
   289 drwxr-xr-x.  3 root   root   4096 ago 21 18:07 db
   290 drwxr-xr-x.  3 root   root   4096 may 22 13:42 empty
263682 drwxr-xr-x.  3 root   root   4096 ago  7 11:15 ftp
   291 drwxr-xr-x.  2 root   root   4096 feb  3  2012 games
 35931 drwxrwx--T.  2 root   gdm    4096 jun  8 16:05 gdm
   292 drwxr-xr-x.  2 root   root   4096 feb  3  2012 gopher
    15 drwxr-xr-x. 45 root   root   4096 ago 10 10:42 lib
   296 drwxr-xr-x.  2 root   root   4096 feb  3  2012 local
   308 lrwxrwxrwx.  1 root   root     11 may 22 13:39 lock -> ../run/lock
    12 drwxr-xr-x. 14 root   root   4096 ago 26 03:17 log
   297 lrwxrwxrwx.  1 root   root     10 may 22 13:39 mail -> spool/mail
   298 drwxr-xr-x.  2 root   root   4096 feb  3  2012 nis
931987 drwxrwxrwx   3 nobody nobody 4096 ago 17 10:32 nodejs
   299 drwxr-xr-x.  2 root   root   4096 feb  3  2012 opt
   300 drwxr-xr-x.  2 root   root   4096 feb  3  2012 preserve
   307 lrwxrwxrwx.  1 root   root      6 may 22 13:39 run -> ../run
   301 drwxr-xr-x. 15 root   root   4096 may 22 13:43 spool
   305 drwxrwxrwx.  5 nobody nobody 4096 ago 30 14:13 tmp
262637 drwxr-xr-x.  7 root   root   4096 ago  7 11:20 www
   306 drwxr-xr-x.  2 root   root   4096 feb  3  2012 yp


[root@sqd var]# ls -lia tmp/
total 216
    305 drwxrwxrwx.  5 nobody nobody   4096 ago 30 14:13 .
   8194 drwxrwxrwx. 23 root   root     4096 ago 17 10:30 ..
   3030 -rwxrwxrwx   1 nobody nobody 199397 ago 30 14:13 file_thumb_5363_1_0.jpg

但是

<?php
highlight_file(__FILE__);

var_dump(file_exists('/var/tmp/file_thumb_5363_1_0.jpg')); 

打印出来:

bool(false) 

1
当您从命令行或浏览器(作为不同用户)运行PHP时,是否能够理解它?当您从shell执行file /var/tmp/file_thumb_5363_1_0.jpg命令时,它显示了什么? - Grzegorz
@grzegorz 他以 root 用户身份登录,从他的 ls 命令中可以看到文件权限为 777。这不可能是权限问题。 - msEmmaMays
@RobertMaysJr:我知道他已经作为root登录 - 提示就是这样说的。另外,777来自于-rwrxrwxrwx,并且图片也显示了这一点。我想知道他是否可以执行 file 命令,以及在从命令行运行php时出现问题的地方(则可能不是权限问题),还是从web中运行php时出现了权限问题。 - Grzegorz
1个回答

8

Fedora 16 引入了“私有 tmp” 的概念,即 /tmp/var/tmp。我认为这是一个好方向。

从官方手册中可以看到::

2.3.3. 服务的私有 /tmp
systemd 管理的一些服务已经被修改,以利用其提供的私有 /tmp 目录功能。先前,使用 /tmp 和 /var/tmp 的特权服务容易受到非特权用户的干扰,可能导致特权升级。使用私有 /tmp 目录可以防止这种类型的攻击。

修改后的服务的 systemd unit 文件中添加了以下指令:

[Service]
PrivateTmp=true


这是否适用于基于RHEL的所有系统?我的服务器Linux发行版是Amazon Linux,似乎遇到了同样的问题。 - Abel Callejo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接