Страницы

03 октября 2013

Изменение прав доступа chmod (change permissions)

Выражение «права доступа» может быть незнакомо для тех, кто работал только с Windows. Какие ещё права, спросите Вы? Работая с Windows, Вы уже давно научились пользоваться антивирусными программами, и уже давно смирились с тем, что последние определяют далеко не все вирусы, частенько компьютер приходилось «чистить», или вообще, перезаписывать Windows. У Вас никогда не возникало вопроса, отчего это всё происходит?
Наверное, не возникало, потому что у всех Ваших знакомых тоже всё время появляются вирусы, то есть у всех всё одинаково и по-другому не бывает. Тут-то мы и подходим к тем самым "правам доступа".

Права бывают на:
- Чтение файлов: любой процесс имеет право прочитать информацию из файла;
- Запись в файлы: любой процесс имеет право записать что-то в файл;
- Исполнение файлов: любой процесс может запустить исполняемый файл;
- Изменение каталога: любой процесс может стереть или записать файл в каталоге

Так вот, в системах Windows многим файлам и папкам, обычно к которым Вы обращались, сразу же даны все эти права, вот почему у Вас никогда не возникало вопроса, о видах права доступа. Теперь становится понятно, почему с такой легкостью любой вирус спокойно записывает себя на Ваш компьютер, а потом запускает сам себя и исполняется - ему это никто не запрещал. В этом и есть самая большая дыра Windows. Есть даже мнение, что не стоит пользоваться антивирусными программами типа Касперский, и скачивать обновления для Windows, уж тем более автоматически, как того они просят, потому что это и есть те самые вирусы, которые Вы сами закачаете на свой компьютер.

То есть, антивирусные программы могут создавать вирус, затем распространять его по всему миру, и объявить, что только у них есть антивирус и только они в состоянии решить проблему с вирусами. То же самое касается конторы, которая сделала Windows.  Проблему с вирусами эта контора, при желании, решила бы за два дня. Вы спросите, а что бывает по-другому, что бывает платформа, в которой вирусы не живут? Конечно, бывает... Это система, которая базируются на платформе Unix. Большинство серверов в мире работают именно под этой системой, а дырявый Windows выброшен из интернета навсегда.

Что же отличает Unix от Windows? А тем, что права доступа в системах Unix раздаёт главный администратор компьютера, который владеет основным паролем, и он, и только он, может поставить, например, право что-то записывать в определенный файл. А так, все остальные файлы и папки можно только читать. После этого становится понятно, что на компьютере, где в основном размещены файлы и папки с пометкой «только для чтения», вирусам делать нечего, они не могут туда себя ни записать, ни исполниться.

Права доступа к файлам и каталогам - основные элементы защиты системы. Сами права доступа разделяются на три категории:

права владельца файла                          - u
права группы                                             - g
права всех остальных пользователей   - o

Права доступа указываются с помощью команды chmod:

r  -     право на чтение
w  -   право на запись
x  -    право на исполнение

Комбинация r, w и x для трех категорий u, g и o и являются правами доступа к файлам. Если нет какой-то категории права, она указывается знаком дефис. Права доступа указываются последовательно: владелец - u, группа - g, все остальные - o.

В следующем примере, владелец файла имеет право на чтение файла, запись в него и исполнение, а все остальные только на чтение: rwxr--r--. То есть:

rwx  - права владельца u;
r--    - права группы g;
r--    - права всех остальных o.

Отличие прав доступа к файлам и каталогам
Права Файл Каталог
r Просмотр содержимого Можно прочитать содержимое каталога, узнать имена файлов, там лежащих
w Изменение содержимого Можно записать-стереть любой файл в каталоге
x Запуск файла на выполнение Позволяет зайти в каталог и обратиться к его файлам, то есть к имени файла

Здесь показаны различные комбинации прав доступа к файлам и каталогам
Права Файл Каталог
- - - Ничего нельзя делать Доступ к каталогу и его подкаталогам запрещен, вообще ничего нельзя
r- - Можно читать содержимое Можно прочитать содержимое каталога, узнать имена файлов, там лежащих
rw- Можно видеть и изменять содержимое Можно изменить файл каталога, удалять или добавлять файлы нельзя
rwx Читать, изменять и выполнять файл Можно читать, удалять, добававлять, изменять файлы, сделать каталог текущим
r-x Можно прочитать, либо выполнить Можно зайти в каталог и прочитать его содержимое, удалять или добавлять файлы нельзя
-wx Нельзя читать файл, но можно исполнить и что-то записать Можно добавить, удалить, изменить файл каталога. Прочитать содержимое каталога невозможно
- -x Выполнить, если файл двоичный Пользователь может выполнить двоичный файл о существовании которого ему известно, зайти или прочитать каталог запрещено

Права доступа обозначаются так же цифрами:
4 - читать (r);
2 - записывать (w);
1 - исполнять (x);
0 - ничего нельзя делать.

Сумма этих цифр и показывает права доступа. 7 = 4 + 2 + 1 + 0 (полные права), 5 = 4 + 1 (чтение и выполнение), 6 = 4 + 2 (чтение и запись), и так далее.

Здесь показаны различные комбинации прав доступа в цифрах:

Права                                          Цифровая форма                  Символьная форма
Ничего нельзя делать                                  0                                                 - - -
Запись и исполнение                                   3                                                 -wx
Только чтение                                               4                                                  r- -
Только запись                                               2                                                  -w-
Только выполнение                                      1                                                  - -x
Чтение и запись                                            6                                                  rw-
Чтение и выполнение                                   5                                                  r-x
Чтение, запись и выполнение                     7                                                  rwx

Рассмотрим некоторые из комбинаций прав доступа в цифрах по группам

Права Владелец Группа Остальные
777 читать, записывать, исполнять читать, записывать, исполнять читать, записывать, исполнять
776 читать, записывать, исполнять читать, записывать, исполнять читать, записывать
775 читать, записывать, исполнять читать, записывать, исполнять читать, исполнять
774 читать, записывать, исполнять читать, записывать, исполнять читать
711 читать, записывать, исполнять исполнять исполнять
766 читать, записывать, исполнять читать, записывать читать, записывать
655 читать, записывать читать, исполнять читать, исполнять
644 читать, записывать читать читать
633 читать, записывать записывать, исполнять записывать, исполнять
611 читать, записывать исполнять исполнять
600 читать, записывать все запрещено все запрещено

Теперь перейдем к самому главному - для чего же надо менять права доступа? Вы завели себе хостинг, сделали сайт и потом всё это дело переписали в ту папку, которую Вам под это дело выделили. Вы использовали логин и пароль, который заранее обговорили со своим администратором хоста. После этого, Вы являетесь владельцем всех папок и файлов, находящихся в той зоне, где действуют Ваши логин и пароль на сервере. У Вас, как у собственника, права доступа - rwx или в цифровом представлении - 7. Владельцем Вы станете только тогда, когда система попросит от Вас логин и пароль, и Вы авторизуетесь в ней. Только после этого, у Вас будут те полные права, о которых мы говорили.

Группу, связанную с Вашими папками и файлами определяет суперпользователь, то есть администратор хостинга, например user, в целях безопасности сервера он, обычно ставит права для этой группы r-x или в цифровом представлении - 5. Группа - это те пользователи, которые уже зарегистрированы в системе, и суперпользователь может их связать с Вашим сайтом (обычно, это никто не делает).

Всем остальным пользователям, то есть тем, которые и будут, в итоге, пользоваться Вашим сайтом, то есть всем тем, которые будут заходить на сайт через браузер, суперпользователь сразу ставит права доступа только на чтение - r--, или в цифровом представлении - 4. Отметим, что Вы для системы так же будете являться обычным пользователем интернет, так как Вы при использовании Вашего сайта в пределах Вашего браузера, не сможете авторизироваться как владелец ресурса.

Далее, для простоты, первые два отсека в правах доступа мы обозначим 0, то есть будем смотреть только на последнюю цифру доступа, так как она обозначает доступ обычных пользователей интернет. То есть, будем ставить 005, 007, и так далее.

«Пользователи могут читать файлы» - это значит, запускается Ваш скрипт на сайте, который читает файл, система понимает, что скрипт запустил user и к нему просматривается последняя цифра доступа к данному файлу. Если она 4, 5, 6 или 7 (004, 005, 006, 007), ваш скрипт может прочитать файл и выдать результат в Вашу программу, запущенную юзером, и, в итоге вернуться к нему в виде распечатки. Кроме этого, система просматривает и права доступа к каталогу, где лежит файл. Они должны быть: 1, 5 или 7 (001, 005, 007), чтобы программа могла зайти в каталог и прочитать известный ей файл. То есть, необязательно ставить права доступа к папке, где лежит простой неизменяемый в размерах файл 007, и права доступа к самому этому файлу 005, 006, 007. Хватит поставить на папку 001, а на файл 004. Если права будут ниже этих цифр, процесс, запущенный пользователем ничего не прочитает из вашего файла. Кроме этого, если на папку Вы поставите права (005, 007), все юзеры интернета смогут прочитать содержимое такого каталога, что не совсем правильно.

«Пользователи могут изменять файлы» - означает, что запускается Ваш скрипт на сайте, который читает файл, а потом пытается его изменить (например, добавляет в файл статистики Ip адрес этого пользователя). Система понимает, что скрипт запустил юзер и к нему просматривается последняя цифра доступа к данному файлу. Если она 6 или 7 (006, 007), ваш скрипт может прочитать, а потом и изменить файл, к которому было обращение и выдать результат в Вашу программу, запущенную юзером, и, в итоге вернуться к нему в виде распечатки. То есть, здесь не хватит прав доступа 002 (-w-), только запись, так как перед изменением файла, его обязательно надо сначала прочитать. Кроме этого, система просматривает и права доступа к каталогу, где лежит файл. Они должны быть: 1, 5 или 7 (001, 005, 007), чтобы программа могла зайти в каталог и прочитать известный ей файл. То есть, необязательно ставить права доступа к каталогу, где лежит изменяемый в размере файл 007 и права доступа к самому этому файлу 007, можно поставить на папку 001, а на файл 006. Если права будут ниже этих цифр, процесс, запущенный пользователем ничего не запишет в ваш файл и ничего не прочитает из вашего файла. Кроме этого, если на папку Вы поставите права (005, 007), все юзеры интернета смогут прочитать содержимое такого каталога, что не совсем правильно.

«Пользователи могут изменять каталог» - означает, что запускается Ваш скрипт на сайте, который пытается записать файл в каталог или стереть его оттуда. Система понимает, что скрипт запустил юзер и к нему просматривается последняя цифра доступа к каталогу, она должна быть 3 или 7 (003, 007), только тогда ваш скрипт, запущенный юзером, может записать в данный каталог файл или стереть его оттуда. Если права к такому каталогу будут 006 (чтение и запись), прав не хватит, так как скрипт не сможет зайти в каталог, если будет 005 (чтение и заход в каталог), значит, запись запрещена. То есть, на такие каталоги лучше ставить права 003. Если Вы поставите права 007, все юзеры интернета смогут прочитать содержимое такого каталога, что не совсем правильно.

Итак, обычно на сервере, куда Вы переписали свои файлы, стоят такие права доступа:

- на папки - 755 - владелец может всё, группа и все остальные могут читать папки и заходить в них, записывать файлы, изменять названия файлов, стирать файлы в папках им запрещено (rwxr-xr-x);

- на файлы - 644 - владелец может читать и изменять файлы, исполнять ему их запрещено, все остальные могут только файлы читать, изменять и исполнять им запрещено. (rw-r- -r- -).

Все Ваши файлы и папки унаследуют именно такой порядок доступа. Как видите, на сайте с обычным html текстом, где нет файлов, которые надо менять, таких прав доступа вполне хватит. Но мы с Вами обсуждаем сайт, где есть базы данных, которые постоянно надо менять. Вспомним, что Вы сами будете заходить на свой сайт как анонимный пользователь, то есть не как владелец. Тогда права доступа должны выглядеть так:

- папки, все (в том числе, с базами данных)                     711;
- папки, куда должны записываться, стираться файлы   733;
- простые файлы для чтения (.html, .php)                           744;
- файлы с базами данных (.dat)                                            766.

Если на всех Ваших папках стоят права 711 или 733, то все ваши скрипты будут спокойно заходить во все папки и читать оттуда файлы и преспокойно работать. А пользователи интернет не смогут браузером прочитать содержимое таких папок, если, конечно они не знают название файлов. Если название файла пользователю будет известно, то он сможет в браузере набрать папку/имя файла и получить его распечатку. Создать папки, где информацию нельзя считать вообще, можно с помощью специальных файлов .htaccess, но их использование сильно тормозит сервер, поэтому лучше их использовать на тех папках, где лежат пароли или настройки сайта. На все остальные папки поставьте права доступа 711 - этого вполне хватит. Кроме этого, на те папки, куда будут записываться - стираться файла, ставьте права 733, не надо ставить 777 - нет смысла, так как, если стоят права 733 – значит, пользователь не сможет отдельно от ваших скриптов читать содержимое каталогов.

На все файлы, которые не будут меняться права не выше 744 (файлы .html, .php, и другие). На файлы с базами данных (.dat) ставьте 766. Обратите внимание, что на файлы, мы вообще, не ставим самые большие права 777, так как это совсем не нужно, и даже, очень вредно...

Как определить текущие права доступа? Заведите в папке файл file.txt, и в саму папку запишите такой небольшой скрипт:

<?php
// имя файла в папке file.txt
$file = 'file.txt';
// путь к текущей папке
$path = str_replace ( '\\', '/', getcwd () );
// права доступа к текущей папке
$fileperms = substr ( decoct ( fileperms ( $path ) ), 2, 6 );
if ( strlen ( $fileperms ) == '3' ){ $fileperms = '0' . $fileperms; }
print "Права доступа к каталогу <b>".$path."</b>: " . $fileperms . "<br>\n";
// права доступа файла
$fileperms = substr ( decoct ( fileperms ( $path."/".$file ) ), 2, 6 );
if ( strlen ( $fileperms ) == '3' ){ $fileperms = '0' . $fileperms; }
print "Права доступа к файлу <b>".$file."</b>: " . $fileperms . "<br>\n";
?>

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

Теперь вопрос, а как же изменить права доступа?
Суперпользователь root меняет их на сервере с помощью команды chmod, из командной строки:

$ chmod 777 filename

После этого, на файл filename распространяются самые большие права доступа, но Вы не имеете доступа к серверу. Просить системного администратора изменить Вам права доступа на собственные файлы не принято, а средствами Php, увы, права изменить нельзя, потому что система определит Вас, как владельца ресурса, только после авторизации, то есть после проверки пароля в базе данных Linux. Обычными средствами, через php сделать это трудно, поэтому Вы будете заходить на сайт браузером как обычный юзер:

<?php
chmod ( $filename, '0777' );
?>

То есть, этот скрипт не работает, потому что юзеру, которым Вы будете считаться, запрещено менять права функцией chmod.

Что же делать? Кроме того, что Вы можете зайти на сайт как анонимный пользователь через браузер, еще предусмотрен один путь - через FTP. Ftp - это еще один своего рода сервер, который работает независимо от сервера Apache. Если Вы как-то записали ваш сайт на сервер, то Вы точно пользовались каким-то файловым менеджером. В этом смысле, лучше, чем Far, на наш взгляд, файлового менеджера не найти. Зайдите им по ftp на ваш сайт (в этом случае запрашивается ваши логин и пароль, то есть Вы будете авторизованы в системе и станете Владельцем). Найдите в Far раздел «атрибуты файлов» Ctrl+A, встаньте на файл или папку и нажмите Ctrl+A. Вы увидите уже не пугающую вас картинку:

[x][x][-]     [x][-][-]    [x][-][-]    для файлов, по умолчанию  644
[x][x][x]    [x][-][x]    [x][-][x]    для папок, по умолчанию    755

Это и есть те самые три группы: первые три отсека - Владелец, вторые три отсека - Группа, третьи три отсека - Все остальные. В этих группах по порядку идут: доступ на чтение, на запись, на исполнение, где крест обозначает, что эта опция для данной группы задействована. То есть, меняйте права доступа по ftp через файловый менеджер, другого пути у Вас может не быть.

Права доступа  через ftp и менеджер Far должны будут выглядеть так:
Папки, где должны записываться файлы   733   [x][x][x]    [-][x][x]    [-][x][x]
Папки, абсолютно все остальные               711    [x][x][x]    [-][-][x]    [-][-][x]
Простые файлы                                             744    [x][x][x]    [x][-][-]    [x][-][-]
Файлы, с базами данных                             766   [x][x][x]    [x][x][-]    [x][x][-]

Что получилось при таком подходе. Все папки читать запрещено. 733 - права для папок, куда будут писаться новые, и стираться старые файлы. 711 - права для всех остальных папок. 744 - права к обычным файлам, 766 - права к файлам с базами данных.

Мы с Вами рассмотрели, какие на самом деле должны быть права доступа, и как они должны работать. Если, всё же Ваши скрипты не работают, то есть сам сервер сконфигурирован как-то по-хитрому, то повышайте права доступа. Чтобы вообще не задумываться об этом, можете на всё установить самые большие права 777.

Поскольку я использую панель управления хостингом – Cpanel – существует несложный процесс смены прав доступа к папкам и файлам в этой системе. В контекстном меню, которое появляется при щелчке правой кнопкой мыши на любом каталоге или файле, выберите «изменить разрешения». В появившемся окне можно выбрать соответствующие права доступа:



P.S.
Обратите внимание, что мы на .php файлы совсем не ставим права выше 766. Почему? Ведь, .php файлы - исполняемые скрипты, почему же на них не ставить права на исполнение? Мы ставим на них права 744. Ставить права доступа к ним выше этих цифр не надо, так как сервер понимает, что это простые ТЕКСТОВЫЕ файлы, которые надо просто ПРОЧИТАТЬ, а на сервере есть Php интерпретатор, который, в итоге, и исполняет данный текстовый файл. Вот на тот файл - исполняемый файл php.exe (Php модуля для Apache) - и ставятся права 777 (это очень грубое в первом приближении объяснение). Но, это дело уже администраторов сервера, а не как, не наше с Вами, это выходит за рамки данной статьи.

Комментариев нет:

Отправить комментарий