Просмотров: 12957 (Статистика ведётся с 06.02.2017)
Дата последнего изменения: 04.02.2016

Права на файлы

Дать универсальный ответ, какие должны быть права на файлы, нельзя, так как каждый хостинг настроен по особенному.

Результат должен быть таким: нужны права на чтение/запись из скрипта на все файлы и папки, начиная от корня сайта, для пользователя, под которым запущен Apache. При этом на разделяемом хостинге другие пользователи на этой же машине не должны иметь права читать/писать в ваши файлы из своих скриптов. Также желательно, чтобы файлы, закачанные по FTP, могли быть перезаписаны из скрипта.

Проблема в том, что у каждого хостинг-провайдера своя политика безопасности и свои настройки: одни ограничивают доступ к чужим файлам даже при 777 (право доступа), другие запускают процесс Apache под своим пользователем для каждого виртуального хоста, и т.д.

Поэтому вопрос необходимо решать с хостинг-провайдером.

Проблемы с неправильными правами и их решение

Unix/Linux - многопользовательская система, это значит, что в системе одновременно могут работать несколько пользователей в своих папках со своими файлами. Соответственно разные пользователи имеют разные права на доступ к файлам и папкам.

Для загрузки файлов по FTP и работы с ними через веб-интерфейс используются разные программы (ftp клиент и веб-сервер) и для операционной системы это разные пользователи.

Для решения проблемы взаимной записи, необходимо установить специальные права на файлы и папки (требуемые права зависят от того, под какими пользователями работают ftp клиент и веб-сервер, к каким группам принадлежат).

Внимание! На каждом хостинге эта настройка специфическая, подробности вы можете узнать у своего хостера.

Наиболее часто встречаемые проблемы, связанные с правами на файлы и папки:

При изменении файлов через FTP не удается сохранить изменения

В этом случае необходимо пользователю веб-сервера разрешить запись в свои файлы для пользователя FTP. Это можно сделать через следующий скрипт:

<?

function chmod_R($path, $perm) 
{
   if (is_dir($path))
   {
      chmod($path."/".$file, $perm);   
      $handle = opendir($path);
      if (!$handle)
      {
         echo "Error: ".$path;
         return;
      }
   

      while (false !== ($file = readdir($handle))) 
      {
         if ($file == "." || $file == ".." || $file == '.htaccess')
            continue;
   
         chmod_R($path."/".$file, $perm);
      }
      closedir($handle);
      return true;
   }
   elseif(is_file($path))
   {
      $file_perm = $perm ^ 0111;
      return chmod($path, $file_perm);
   }
   return;
}

 $path = $_GET["path"];
 if (!trim($path))
 {
 ?>
    <form method=get>
       Путь от корня сайта: <input name=path value='<?=dirname($_SERVER['SCRIPT_NAME'])?>'><br>

       Права: <input name=perm value='0777'><br>       
       <input type=submit value='OK'>
    </form>
 <?
 }
 else

 {
    $path = realpath($_SERVER["DOCUMENT_ROOT"] . "/" . $path);
    
    if (intval($_GET['perm']))
       $perm = octdec(intval($_GET['perm']));
    else
       $perm = 0777;

    if (chmod_R($path, $perm))
       echo "OK: ".$path;
 }
?>

После запуска скрипт спросит путь к папке, в которой надо изменить права относительно корня сайта и сами права на папки. На файлы он автоматически сбросит атрибут "x" - исполнение. Если это не требуется, замените строку

$file_perm = $perm ^ 0111;
на
$file_perm = $perm;

Файлы загружаются через ftp, но при попытке их изменения в продуктах Bitrix Framework появляется ошибка записи

В этом случае необходимо пользователю ftp разрешить запись для пользователя веб-сервера, иными словами, выставить права.

Сделать это можно по протоколу ssh, например, используя бесплатную программу PuTTY.

Рассмотрим последовательность действий для изменения прав доступа:

  • подключитесь к своему сайту

    Примечание: О том, как это сделать, смотрите руководство к программе, с помощью которой вы подключаетесь.
  • перейдите в нужную директорию, используя команду cd:
    cd /path/to/dir
    Примечание: Путь /path/to/dir необходимо уточнить у хостера.
  • затем выполните команду chmod:
    chmod -R xxxx .
    где

    -R - указывает, что необходимо изменить права на все папки и подпапки,
    xxxx - указывает требуемые атрибуты доступа (например, 0771),
    . - указание на текущую директорию.

    Примечание: Подробнее про команду chmod можно посмотреть в Википедии и документации по PHP.
Примечание: Установка прав через клиент ftp с поддержкой рекурсивного изменения прав на папки не является хорошим вариантом. Потому что, например, для изменения прав на 100 файлов потребуется отправить специальную команду как минимум 100 раз (если есть подпапки - то ещё и для них). В дополнение к этому передаётся еще и множество служебной информации. В итоге эта операция может занять довольно продолжительное время даже при хорошем канале Интернет.

Обратите внимание:
  • чтобы избежать проблем с правами при установке продукта - лучше всего воспользоваться скриптом BitrixSetup. Он скачает и распакует дистрибутив с нашего сайта, при этом файлы будут принадлежать веб-серверу и проблем при работе не возникнет;
  • ftp и ssh сервисы в большинстве случаев позволяют авторизоваться под одним и тем же пользователем, значит можно закачать файл через ftp, а изменить права через ssh;
  • пользователь может изменить права только на свои файлы. Это значит, что если вы не можете изменить файл непосредственно в системе, то не стоит пытаться применять веб скрипт. Права необходимо изменять через ftp/ssh. И наоборот;
  • панель управления на хостинге чаще всего с целью безопасности работает под третьим пользователем, поэтому в борьбе с правами она скорее всего не поможет.

Установка прав на создаваемые Bitrix Framework файлы

Права, с которыми создаются файлы и папки, вы можете установить в файле /bitrix/php_interface/dbconn.php:

define("BX_FILE_PERMISSIONS", 0664);
define("BX_DIR_PERMISSIONS", 0755);

40


Курсы разработаны в компании «1С-Битрикс»