[spoiler]
Вот уж чего мне точно не следует делать, это переписывать описания прав Unix. Приведу очень короткий ликбез и вариант решения проблемы.
А почему вообще возникает проблема?
Разберёмся по порядку. Unix/Linux - многопользовательская система, это значит, что в системе одновременно могут работать несколько пользователей в своих папках со своими файлами. По умолчанию права ставятся так, что один пользователь может читать, но не может изменять файлы другого. Но это вроде бы и понятно, ведь мне не надо чтобы мои файлы менял сосед Вася, который тоже имеет аккаунт на этом сервере. Однако, возникает другой вопрос: почему я не могу изменить, мои же файлы, которые я сам закачал на сервер?
Дело всё в том, что для загрузки файлов и работы с ними через веб интерфейс (иначе говоря, через Битрикс) используются разные программы (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, пытаюсь изменить через панель управления Битрикса, получаю ошибку записи. Как быть? Надо пользователю ftp разрешить запись для пользователя веб севера, иными словами, выставить права. Например, на моём хостинге права нужны 0771. Можно установить права через клиент ftp с поддержкой рекурсивного изменения прав на папки, но это плохой вариант в случае когда речь идёт о большом числе файлов и папок.
Почему? Потому что, скажем, для изменения прав на 100 файлов потребуется отправить спец. команду как минимум 100 раз (если есть подпапки - то ещё и для них). Плюс к этому передаётся куча служебной информации. В итоге эта операция может занять довольно продолжительное время даже при хорошем канале Интернет.
На помощь приходит протокол ssh, который позволяет выполнить команду непосредственно на удалённом сервере. Берём , подключаемся к своему сайту, переходим в нужную директорию используя команду cd
cd /path/to/dir (/path/to/dir уточняем у хостера), затем собственно chmod:
chmod -R 0771 .
Здесь параметр -R указывает, что необходимо изменить права на все папки и подпапки,
0771 указывает требуемые атрибуты доступа,
. есть указание на текущую директорию.
Обратите внимание
- чтобы избежать проблем с правами при установке продукта - лучше всего воспользоваться скриптом . Он скачает и распакует дистрибутив с нашего сайта, при этом файлы будут принадлежать веб серверу и проблем при работе через Битрикс не возникнет;
- ftp и ssh сервисы в большинстве случаев позволяют авторизоваться под одним и тем же пользователем, значит можно закачать файл через ftp, а изменить права через ssh;
- пользователь может изменить права только на свои файлы. Это значит, что если вы не можете из панели управления Битрикса изменить файл - не стоит пытаться применять веб скрипт, меняйте права через ftp/ssh. И наоборот;
- панель управления на хостинге чаще всего с целью безопасности работает под третьим пользователем, поэтому в борьбе с правами она скорее всего не поможет.
Если материал не помог - пишите в комментариях, дополню, что надо

видимо накипело ...
Да, много вопросов и непонимания.
Т.к. общение со службой поддержки затянулось, а телефона у нее вообще нет, и время демо-версии неумолимо идет, то попробую задать вопрос здесь...
Демо-версия (Старт) установлена не на хостинге, а на моем компьютере. ОС - Windows 7.
При попытке что-либо поменять (например, добавить страницу в меню) появляется ошибка "Не удается открыть файл". Проверка доступа в Битриксе выдает ошибку "Не удается открыть/изменить файлы..." и идет перечисление всех файлов, относящихся к сайту. Что сделать, чтобы доступ появился и наконецто можно было начинать изучать Битрикс?
Заранее благодарен все, кто попробует помочь.
Теперь все заработало вроде.
Жаль, что техподдержка Битрикса адекватно не смогла ответить конкретикой на конкретно поставленный и четко сформулированный вопрос. Появился повод задуматься, все ли будет гладко после приобретения коммерческой версии...
Да, накипело. Вторую неделю шпыняют две техподдержки друг к другу. Никто ни при делах.
По скрипту не ясно как его запускать. Это файл создать нужно или как? Что-то я не наблюдаю командной строки нигде...
Если при тестировании загрузки файлов и проверке прав есть ошибки, проблема хостинга, иначе - битрикса.
Только вот не понимаю как воспользоваться данным скриптом, по какому пути его залить.
Просто не хочется наделать глупостей и хотелось бы что точно знать как воспользоваться.
Буду весьма благодарен кто поможет мне. а то долго мучаюсь уже,да и время поджимает.
вот мои контакты
skype - murad886
e-mail - murad_2008.88@mail.ru
у меня битрикс 4.2
все права стоят верно.
перезалили разрабы сайт и убили тем самым лицензию
при попытке реактивировать ругается и никак вообще не хочет дружить.
Я так понимаю, что изменить в файле .htaccess можно, но это надо весь сайт перебрать.
Подскажите,пожалуйста, что лучше сделать: поменять хостинг?[*]чтобы избежать проблем с правами при установке продукта - лучше всего воспользоваться скриптом . Он скачает и распакует дистрибутив с нашего сайта, при этом файлы будут принадлежать веб серверу и проблем при работе через Битрикс не возникнет; Я так и сделала при установке, а техподдержка пишет обратное, что скрипты теперь исполняются от имени пользователя площадки. Что делать?
Надеюсь на совет. Наталья