------------------------------------------------
Чем отличаются права в 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 приведенный код может не сработать, попробуйте следующий вариант.
------------------------------------------------
Как быстро выставить права для всего сайта?
Нужно в консоли выполнить следующие команды (через SSH - узнавайте у вашего хостера)
Для изменений прав всем файлам
Для изменений прав всем папкам
Выставить верного владельца, обычно совпадает с пользователем apache.
------------------------------------------------
Права для Joomla-сайта
Абсолютно все что было сказано выше относится и к любому Joomla-сайту, любой версии.
Если по каким то причинам не получается дать права всему сайту (а это уже намек на смену хостера),
то обязательно проверьте что следующее доступно для записи
Это минимум для нормальной работы сайта.
Некоторые компоненты для Joomla могут писать в свои папки, например компонент Zoo (и JBZoo) изменяют файлы "*.config"
Но с этим проблем не будет, если все права выставлены верно.
------------------------------------------------
Полезные ссылки
http://ru.wikipedia.org/wiki/Chmod
http://ru.wikipedia.org/wiki/Chown