Я использую Linux 12.04, на нем установлены apache и php. Я хочу получить доступ к текстовому файлу в / root / folder. Я действительно запутался с разрешениями. Скрипт php im использует
<?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);
?>
[ 112] Этот скрипт может получить доступ к файлу / var / www, но не может получить доступ к файлу /root/ip.txt. Пожалуйста, помогите и объясните возможный шаг за шагом.
Доступен ли файл для чтения другим пользователям, кроме root? Попробуйте добавить доступ для чтения для ВСЕХ.
sudo chmod a+r /root/cr.txt
Я забуду о последствиях этого для безопасности и перейду к делу:
Если вы сделали 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
Этого не следует делать, если вы не понимаете рисков!