The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Создание и запись в файл на сервере., !*! CHIM, 05-Июн-17, 23:09  [смотреть все]
Доброго времени суток. Переношу свой проект на живой сервер и столкнулся с проблемой. У меня есть функция которая записывает данные в файл, а тут она перестала работать и в логи пишет следующее:
2017/06/01 15:08:57 [error] 8736#8736: *2 FastCGI sent in stderr: "PHP message: PHP Warning:  fopen(tx.txt): failed to open stream: Permission denied in /var/www/apteka/config/wr.php on line 3" while reading response header from upstream, client: 192.168.хх.хх, server: localhost, request: "GET /apteka/config/wr.php HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm/php-fpm.sock:", host: "192.168.хх.хх"

Сам код файла я создал просто для пробы, чтоб отсечь всё ненужное:
<?PHP
$file = 'tx.txt';
fopen($file, 'x+');
echo $file;

1. Права на каталог 777,
2. Владелец каталога nginx,
3. Установлена связка CentOS 7.3.1611+nginx 1.12 +php7.1.5 +php-fpm 3.1.0
4. В файле php.ini функция allow_url_fopen = On
В чём может быть проблема?

  • Создание и запись в файл на сервере., !*! Аноним, 01:36 , 06-Июн-17 (1)
    ответ в вопросе:

    под каким пользователем работпет php-fpm?

  • Создание и запись в файл на сервере., !*! PavelR, 08:24 , 06-Июн-17 (3)
    • Создание и запись в файл на сервере., !*! CHIM, 09:29 , 06-Июн-17 (5) –1
      > selinux ?

      getsebool -a | grep -i http

      httpd_anon_write --> off
      httpd_builtin_scripting --> on
      httpd_can_check_spam --> off
      httpd_can_connect_ftp --> off
      httpd_can_connect_ldap --> off
      httpd_can_connect_mythtv --> off
      httpd_can_connect_zabbix --> off
      httpd_can_network_connect --> on
      httpd_can_network_connect_cobbler --> off
      httpd_can_network_connect_db --> off
      httpd_can_network_memcache --> off
      httpd_can_network_relay --> off
      httpd_can_sendmail --> off
      httpd_dbus_avahi --> off
      httpd_dbus_sssd --> off
      httpd_dontaudit_search_dirs --> off
      httpd_enable_cgi --> on
      httpd_enable_ftp_server --> off
      httpd_enable_homedirs --> off
      httpd_execmem --> off
      httpd_graceful_shutdown --> on
      httpd_manage_ipa --> off
      httpd_mod_auth_ntlm_winbind --> off
      httpd_mod_auth_pam --> off
      httpd_read_user_content --> on
      httpd_run_ipa --> off
      httpd_run_preupgrade --> off
      httpd_run_stickshift --> off
      httpd_serve_cobbler_files --> off
      httpd_setrlimit --> off
      httpd_ssi_exec --> off
      httpd_sys_script_anon_write --> off
      httpd_tmp_exec --> off
      httpd_tty_comm --> off
      httpd_unified --> off
      httpd_use_cifs --> off
      httpd_use_fusefs --> off
      httpd_use_gpg --> off
      httpd_use_nfs --> off
      httpd_use_openstack --> off
      httpd_use_sasl --> off
      httpd_verify_dns --> off
      named_tcp_bind_http_port --> off
      prosody_bind_http_port --> off

      Неужели нужно первую строчку разрешать?

      Но Вы похоже правы, дело в SELinux. Логи его говорят вот что:
      type=AVC msg=audit(1496731832.959:389): avc:  denied  { write } for  pid=23482 comm="php-fpm" name="config" dev="dm-0" ino=918003 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:httpd_sys_content_t:s0 tclass=dir
      type=SYSCALL msg=audit(1496731832.959:389): arch=c000003e syscall=2 success=no exit=-13 a0=7ffe44a1a9b0 a1=c2 a2=1b6 a3=1d items=0 ppid=23478 pid=23482 auid=4294967295 uid=995 gid=993 euid=995 suid=995 fsuid=995 egid=993 sgid=993 fsgid=993 tty=(none) ses=4294967295 comm="php-fpm" exe="/usr/sbin/php-fpm" subj=system_u:system_r:httpd_t:s0 key=(null)

      Здесь меня интересует вот что "name="config"" это по сути каталог в котором находится файл который я выполняю(т.е. код в котором говорится о том что нужно произвести запись в файл), в этом же каталоге я пытаюсь создать/изменить файл.

      • Создание и запись в файл на сервере., !*! PavelR, 04:18 , 07-Июн-17 (8)
        > Здесь меня интересует вот что "name="config"" это по сути каталог в котором
        > находится файл который я выполняю(т.е. код в котором говорится о том
        > что нужно произвести запись в файл), в этом же каталоге я
        > пытаюсь создать/изменить файл.

        С точки зрения ИБ неразумно разрешать создавать файлы в том же каталоге, откуда разрешено исполнение скриптов.

  • Создание и запись в файл на сервере., !*! ПавелС, 08:31 , 06-Июн-17 (4)
    >[оверквотинг удален]
    > Warning:  fopen(tx.txt): failed to open stream: Permission denied in /var/www/apteka/config/wr.php
    > on line 3" while reading response header from upstream, client: 192.168.хх.хх,
    > server: localhost, request: "GET /apteka/config/wr.php HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm/php-fpm.sock:",
    > host: "192.168.хх.хх"
    > Сам код файла я создал просто для пробы, чтоб отсечь всё ненужное:
    > <?PHP
    > $file = 'tx.txt';
    > fopen($file, 'x+');
    > echo $file;
    > 1. Права на каталог 777,

    Вы уверены что текущий каталог этот, путь то в fopen не полный - относительный?
    Надо в этом php посмотреть что возвращает string getcwd ( void ).
    > 2. Владелец каталога nginx,
    > 3. Установлена связка CentOS 7.3.1611+nginx 1.12 +php7.1.5 +php-fpm 3.1.0
    > 4. В файле php.ini функция allow_url_fopen = On
    > В чём может быть проблема?

    • Создание и запись в файл на сервере., !*! CHIM, 09:29 , 06-Июн-17 (6) –1
      >[оверквотинг удален]
      >> fopen($file, 'x+');
      >> echo $file;
      >> 1. Права на каталог 777,
      > Вы уверены что текущий каталог этот, путь то в fopen не полный
      > - относительный?
      > Надо в этом php посмотреть что возвращает string getcwd ( void ).
      >> 2. Владелец каталога nginx,
      >> 3. Установлена связка CentOS 7.3.1611+nginx 1.12 +php7.1.5 +php-fpm 3.1.0
      >> 4. В файле php.ini функция allow_url_fopen = On
      >> В чём может быть проблема?

      Проверил, каталог верный.

  • Создание и запись в файл на сервере., !*! CHIM, 11:40 , 06-Июн-17 (7)
    В общем дело было в хитрых настройках SELinux.
    Вот здесь я прочитал про нужные мне параметры: http://www.serverlab.ca/tutorials/linux/web-servers-linux/co.../

    А именно "httpd_sys_rw_content_t" после использования этой настройки всё начало записываться нормально.
    Чё то они перемудрили с этим SELinux...




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру