如何让php网页访问/root目录下的文件?

如何让php网页访问/root目录下的文件?

我正在使用 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用户读取该文件。你可以采取三种措施:

  1. 将文件移动到/var/www并更改其权限,以便www-data用户可以读取它。

    mv /root/cr.txt /var/www/
    chown www-data:www-data /var/www/cr.txt
    

    这是最好的方法。

  2. 创建指向目录中文件的符号链接/var/www

    ln -s /root/cr.txt /var/www/
    

    在某些情况下,这并不能确保您的文件被读取。

  3. 这很危险,不应该这样做!将用户添加www-dataroot组,或更改文件所有权以便www-data用户可以读取:

    chown :www-data /root/cr.txt
    ## Or
    sudo adduser www-data root
    

    如果您不了解风险,就不应该这样做!

答案2

该文件是否可以由 root 以外的用户读取?尝试为 ALL 添加读取权限。

sudo chmod a+r /root/cr.txt

相关内容