使文件可供其他用户读取

使文件可供其他用户读取

我试图为我的所有子域名创建一个会话(跨子域名的一个会话)

子域名第一

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 相同!

但会话是空的

经过两天的失败尝试,我终于发现了问题所在

问题出在文件权限上

其他用户无法读取该文件

我的服务器上的会话文件

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

当我在服务器上执行此命令时

chmod 777 sess_06pqdthgi49oq7jnlvuvsr95q1

我的问题解决了!文件变得可读(anscript.site.com)

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

这是会话目录的权限

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

答案1

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

要修复此问题,请检查您的 PHP(或带有 mod_php 的 apache)以哪个用户身份运行,然后将所有会话文件(以及包含这些文件的目录,通常是 /var/lib/php/session 或类似目录)的文件所有权设置为该用户。

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

答案2

我发现你的解决方案存在两个问题。

将权限设置为 777 可使它们可执行和可读。如果您希望使文件可由其他人读取,请尝试使用 644 而不是 777。umask服务器启动时使用的 是控制这一点的因素之一。如果您使用 umask 077 启动服务器,您将获得所看到的行为。存储会话的代码可能会执行相同的操作。

根据您配置 Web 服务器的方式,不同的 Web 服务器可能以不同的用户身份运行。安全站点可能以 auth:auth 运行,而不是以其他服务器运行的 ID 运行。尝试以不同的用户身份创建会话。如果您为所有用户获得相同的所有权,则似乎您正在使用具有setuid特权的程序来创建会话,而不是始终使用该程序来读取会话数据。

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

答案3

考虑 ACL。男人魅力VAR=$(md5sum 文件名 | cut -c1-20); attr -s "File.checksum.md5" -V "$VAR" 文件名

相关内容