我正在使用 Linux 12.04,上面安装了 apache 和 php。我想访问 /root/ 文件夹中的文本文件。我对权限感到非常困惑。我使用的 php 脚本
<?php
$file = fopen("/root/cr.txt", "r") or exit("Unable to open file!");
//Output a line of the file until the end is reached
while(!feof($file))
{
echo fgets($file). "<br>";
}
fclose($file);
?>
此脚本可以访问文件 /var/www 文件夹,但无法访问 /root/ip.txt 文件。请帮忙并逐步说明可能的方法。
答案1
我将忘记这样做的安全隐患,并开始做正事:
如果您已经完成ls -l /var/www
并且ls -l /root
您会注意到两者都有不同的权限:
$ ls -l /root/cr.txt
total 2
-rw-r----- 1 root root 0 Jul 9 01:28 cr.txt
$ ls -l /var/www
total 2
-rw-r--r-- 1 www-data www-data 0 Jul 9 01:28 somefile
只有/root
可读root
,而用户/var/www
可读www-data
。现在,如果您检查 Apache 进程,您会注意到它正在使用www-data
用户运行。
$ ps aux | grep apache www-data 5133 0.0 0.2 6512 1208 ?R+ 10:04 0:00 apache
现在,你正在尝试让 apache 运行并让www-data
用户读取该文件。你可以采取三种措施:
将文件移动到
/var/www
并更改其权限,以便www-data
用户可以读取它。mv /root/cr.txt /var/www/ chown www-data:www-data /var/www/cr.txt
这是最好的方法。
创建指向目录中文件的符号链接
/var/www
:ln -s /root/cr.txt /var/www/
在某些情况下,这并不能确保您的文件被读取。
这很危险,不应该这样做!将用户添加
www-data
到root
组,或更改文件所有权以便www-data
用户可以读取:chown :www-data /root/cr.txt ## Or sudo adduser www-data root
如果您不了解风险,就不应该这样做!
答案2
该文件是否可以由 root 以外的用户读取?尝试为 ALL 添加读取权限。
sudo chmod a+r /root/cr.txt