Права на файлы
Дать универсальный ответ, какими должны быть права на файлы, нельзя, так как каждый хостинг настроен по-своему.
Результат должен быть таким: для пользователя, под которым запущен 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);
Назад в раздел