------------------------------------------------
Чем отличаются права в Windows и Linux
Не буду сильно размышлять по этому поводу. Скажу только основные отличия.
- В Windows пользователь обычно работает от лица администратора, таким образом получает практически неограниченные права для работы с файлами. Так win-пользователь обычно даже о не задумывается о таких вещах как права файлов и папок.
- В Linux более строгое разделение прав. Каждая директория или файл имеют свои индивидуальные права, которые указывают кто и что может делать с ними.
- В Linux'е сайт никогда не работает от лица администратора - это очень не безопасно (мягко говоря), поэтому права играют очень важную роль.
Если у вас хороший шаред-хостинг (а это редкость), то вам можно не беспокоится о правах файловой системы.
Но все же знать, то о чем пойдет речь ниже - обязательно.
------------------------------------------------
Права в файловой системе Linux
В Linux системах права задаются в виде 3х флагов - (Пользователь, Группа пользователя, Остальное).
Каждый флаг - это сумма битов: 1 - Выполнение, 2 - Редактирование, 4 - Чтение.
Верно, когда для папок сайта выставляются права - 755, а для файлов - 644. Более того - обычно это значения по умолчанию в системе. Подробнее можно узнать тут - http://ru.wikipedia.org/wiki/Chmod
------------------------------------------------
Почему права 777 - это плохо?
Права 777 - это любимые права win-пользователей, потому что дают возможность не задумываться о правах и делать что душе угодно. Но эти права дают ЛЮБОМУ пользователю системы право изменять и выполнять ваши файлы. Примеры:
- Если вы пользуетесь шаред-хостингом и выставили себе такие права, то грубо говоря другой клиент этого хостинга, который располагается на той же физической машине что и ваш сайт, сможет вас взломать.
- Если у вас несколько сайтов на одной физической машине, но у всех стоят права 777, то злоумышленник взломав один сайт легко получит доступ ко всем остальным.
- ... и много других не приятных примеров со взломами
------------------------------------------------
Как узнать от какого пользователя должен работать мой сайт?
По мимо 3-х основных флагов (о которых шла речь выше) у файлов и папок есть так же пользователь и группа.
Чтобы ваш сайт работал нормально, apache (или nginx) должны работать от имени того же пользователя что и установки на ваших файлах сайта.
Проверить это просто. Создайте в корне вашего сайта файл с именем perm.php (или любое другое имя для php-файла).
Внутри файла укажите следующий код
<?php echo '<pre>'; echo system('ls -la')."\n"; echo '</pre>'; echo '<pre>'; echo exec('id'); echo '</pre>';
* Внимание! Этот код только для linux-like систем!
Вы увидите примерно следующую картину
total 100 -rw-r--r-- 1 smetdenis smetdenis 3191 Nov 20 00:22 .htaccess drwxr-xr-x 11 smetdenis smetdenis 4096 Feb 14 16:47 administrator drwxr-xr-x 12 smetdenis smetdenis 4096 Mar 5 19:25 cache drwxr-xr-x 2 smetdenis smetdenis 4096 Feb 14 16:13 cli drwxr-xr-x 20 smetdenis smetdenis 4096 Feb 14 16:27 components -r--r--r-- 1 smetdenis smetdenis 2199 Feb 13 12:23 configuration.php -rw-r--r-- 1 smetdenis smetdenis 1150 Jul 12 2011 favicon.ico drwxr-xr-x 11 smetdenis smetdenis 4096 Feb 25 18:38 images drwxr-xr-x 2 smetdenis smetdenis 4096 Feb 14 16:13 includes -rw-r--r-- 1 smetdenis smetdenis 1319 Feb 4 08:23 index.php -rw-r--r-- 1 smetdenis smetdenis 1757 Feb 4 08:24 joomla.xml drwxr-xr-x 5 smetdenis smetdenis 4096 Feb 1 16:41 language drwxr-xr-x 9 smetdenis smetdenis 4096 Feb 14 16:13 libraries drwxr-xr-x 2 smetdenis smetdenis 4096 Feb 14 16:13 logs drwxr-xr-x 20 smetdenis smetdenis 4096 Feb 14 16:27 media drwxr-xr-x 33 smetdenis smetdenis 4096 Feb 14 16:27 modules -rw-r--r-- 1 smetdenis smetdenis 109 Mar 5 19:26 perm.php drwxr-xr-x 15 smetdenis smetdenis 4096 Feb 14 16:13 plugins -rw-r--r-- 1 smetdenis smetdenis 14 Feb 14 16:57 robots.txt drwxr-xr-x 7 smetdenis smetdenis 4096 Feb 14 16:13 templates drwxr-xr-x 2 smetdenis smetdenis 4096 Feb 21 12:49 tmp -rw-r--r-- 1 smetdenis smetdenis 1715 Nov 8 00:23 web.config.txt
В первой колонки мы видим выставленные права. В третей и четвертой - имя и группу пользователя. В последней имя файла или папки.
Обратите внимание, что
"drwxr-xr-x" - правильные права для всех папок
"-rw-r--r--" - правильные права для всех файлов
"-r--r--r--" - файл настроек Joomla имеет права только на чтение. Выставляет сама Joomla для безопасности вашего сайта.
Второй фрагмент кода покажет нам от чьего имени работает apache. Например на моей локальной машине это выглядит так
uid=1000(smetdenis) gid=1000(smetdenis) groups=1000(smetdenis),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),109(lpadmin),127(sambashare)
Где uid - имя пользователя, gid - группа пользователя, groups - группы, к которым еще принадлежит пользователь.
Для нормальной работы вашего сайта важно чтобы имя имя и пользователь для файлов и папок совпадали с apache (в нашем случае это "smetdenis")
Это даст вам правильную работу сайта и основу безопасности
------------------------------------------------
Как узнать, полный путь своего сайта?
Создайте в корне вашего сайта файл php со следующим кодом и выполните его
<?php echo realpath(dirname(__FILE__));
В некоторых версиях php приведенный код может не сработать, попробуйте следующий вариант.
<?php echo $_SERVER['DOCUMENT_ROOT'] . '/<ПАПКА САЙТА>';
------------------------------------------------
Как быстро выставить права для всего сайта?
Нужно в консоли выполнить следующие команды (через SSH - узнавайте у вашего хостера)
Для изменений прав всем файлам
find <ПОЛНЫЙ ПУТЬ ДО ВАШЕГО САЙТА> -type f -exec chmod 644 {} \;
Для изменений прав всем папкам
find <ПОЛНЫЙ ПУТЬ ДО ВАШЕГО САЙТА> -type d -exec chmod 755 {} \;
Выставить верного владельца, обычно совпадает с пользователем apache.
chown -R smetdenis:smetdenis <ПОЛНЫЙ ПУТЬ ДО ВАШЕГО САЙТА>
------------------------------------------------
Права для Joomla-сайта
Абсолютно все что было сказано выше относится и к любому Joomla-сайту, любой версии.
Если по каким то причинам не получается дать права всему сайту (а это уже намек на смену хостера),
то обязательно проверьте что следующее доступно для записи
<site root>/tmp <site root>/logs <site root>/cache <site root>/images <site root>/configuration.php
Это минимум для нормальной работы сайта.
Некоторые компоненты для Joomla могут писать в свои папки, например компонент Zoo (и JBZoo) изменяют файлы "*.config"
Но с этим проблем не будет, если все права выставлены верно.
------------------------------------------------
Полезные ссылки
http://ru.wikipedia.org/wiki/Chmod
http://ru.wikipedia.org/wiki/Chown