使文件可以被其他用户读取

我正在尝试为所有子域创build一个会话(跨子域的一个会话)

子域名第一

auth.site.com/session_test.php session_set_cookie_params(0, '/', '.site.com'); session_start(); echo session_id().'<br />'; $_SESSION['stop']='stopsss this'; print_r($_SESSION); 

子域名二

 anscript.site.com/session_test.php session_set_cookie_params(0, '/', '.site.com'); session_start(); echo session_id().'<br />'; print_r($_SESSION); 

现在,当我访问auth.site.com/session_test.php

我得到这个结果

 06pqdthgi49oq7jnlvuvsr95q1 Array ( [stop] => stopsss this ) 

而当我访问anscript.site.com/session_test.php

我得到这个结果

 06pqdthgi49oq7jnlvuvsr95q1 Array () 

会话ID是一样的!

但会话是空的

经过两天的失败后,终于我发现了这个问题

问题是在文件promissions

该文件不能被另一个用户读取

会话文件在我的服务器上

 -rw------- 1 auth auth 25 Jul 11 11:07 sess_06pqdthgi49oq7jnlvuvsr95q1 

当我在服务器上做这个命令

 chmod 777 sess_06pqdthgi49oq7jnlvuvsr95q1 

我得到的问题修复! 该文件变得可读(anscript.site.com)

那么,如何解决这个问题呢? 如何设置会话文件的默认promissions?

这是会议目录的承诺

 Access: (0777/drwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root) 

您的PHP会话文件必须可由PHP / Web服务器读取,而不一定是所有用户(这是一个安全风险)。

要解决这个问题,请检查你的PHP(或mod_php的Apache)运行的用户,并为所有会话文件(和包含它们的目录,通常是/ var / lib / php / session)或类似的东西)。

 chown -R user.group /var/lib/php/session 

我发现你的解决scheme有两个问题。

将权限设置为777使得它们可执行并且可读。 如果你的魔杖让其他的try 644而不是777可读的文件。服务器启动时使用的umask是控制这个的一个因素。 如果您使用077的umask启动服务器,您将看到您所看到的行为。 存储会话的代码可以做同样的事情。

取决于您如何configuration您的Web服务器,不同的Web服务器可能以不同的用户身份运行。 看起来安全站点可能运行auth:auth而不是其他服务器运行的id。 尝试创build会话作为不同的用户。 如果您对所有用户拥有相同的所有权,那么看起来您正在使用以setuid权限运行的程序来创build会话,而不是始终如一地使用该程序来读取会话数据。

当您使用HTTP访问其他站点时,身份validation站点是否需要HTTPS? 如果是这样,会话安全设置可能会阻止访问。

考虑ACL的。 男子chaclVAR = $(md5sum filename | cut -c1-20); attr -s“File.checksum.md5”-V“$ VAR”文件名