Здравствуйте, уважаемые читатели wmbn.ru! В данной записи мне хотелось бы развернуть тему установки прав доступа на файлы и папки на сайте. Я часто сталкивался с такой проблемой, когда пытался установить на XAMPP в Ubuntu (Linux) любой движок для сайта, включая WordPress. С Denwer таких проблем не было, в особенности проблем с установкой какого-нибудь дополнения, плагина или просто загрузки на сайт файла. Причина в том, что на Windows уже по умолчанию пользователь имеет многие привилегии, а на многих сборках вообще является администратором. Такая иерархия разграничения прав доступа и пользователей может пагубно сыграть на безопасности, в особенности касается того, что на Windows можно запускать произвольный код с любых носителей.

Установка прав доступа к файлам и папкам

Что же касается Linux, а в частности Ubuntu, то прав root, т.е. супер пользователя вы не получите, не настроив доступ к различным ресурсам. Безопасность в Linux на порядок выше, чем Windows, благодаря своим алгоритмам и ядру, которое является совершенным, по сравнению NT. Однако постоянный ввод пароля может угнетать, но все же когда вопрос касается безопасности как сайта, движка, сервера и системы в целом, то такой подход по крайней мере запретит выполнения вредоносных скриптов (программ). Так как многие сервера работают под управлением Unix систем, то выставление таких прав доступа для пользователей необходимо, чтобы предотвратить крах системы.

Что такое права доступа, назначение и появление

Права доступа — совокупность установленных инструкций и правил, которые присвоены конкретному пользователю, каталогу или файлу. Права доступа задают действия, при котором для конкретного пользователя назначаются привилегии на выполнение различных операций, включая редактирование, перемещение, копирование и удаление информации.

Права удобно назначать в случае многопользовательского управления данными, так как проект может быть корпоративным (рассчитанным на несколько человек) — одна группа людей имеет право лишь на добавление файлов, создание каталогов, другая лишь редактирует данные, а третья, которая имеет права администратора (root) может выполнять все действия над файлами и папками. Если же не настроить таких прав, то каждый пользователь будет иметь доступ к различным действиям, что повышает риск взлома информации.

А теперь конкретно к принципу действия — когда пользователь подключается к серверу, в особенности FTP серверу или панели управления хостингом (там тоже можно задать права на управление сайтом), то система автоматически определяет принадлежность учетной записи к одной из трех групп — владелец сайта (root, user), гостевой вход (group) или публичный (public, world). Благодаря такому разграничению можно без труда просматривать сайт, не задумываясь о логинах, паролях и т.д.

Права доступа чаще всего называют Chmod (change mode) — по названию программы в Unix, которая изменяет права доступа к данным. Интересный подход в Linux, все программы выполняют лишь одну функцию, но делают это отлично — это называется Linux Way. Если судить по данным создания самой Unix, то права доступа начали устанавливать в районе 70-80х годах прошлого века, однако условные разграничения появились еще раньше. Хотя сказать, что Chmod это права доступа… будет как минимум не приемлемым — Chmod это изменение режима работы, способа или метода, а права — access rights или permissions.

Основные обозначения команды Chmod для файлов и папок, а так же пользователей и принцип работы

Давайте теперь рассмотрим основные обозначения команды Chmod для папок и файлов, а так же рассмотрим их принцип работы. По стандарту права разграничиваются на управление папками и управление файлами. Но также есть установка привилегий для пользователей, которая на более глобальном уровне задает определенные правила на действия над папками и файлами.

Для пользователей, как я уже упомянул, имеется три разграничения — администраторы (u — user или root, когда пользователь является владельцем файла), гости группы (g — group, человек состоит в группе) и другие пользователи (o — other, world). Еще сюда можно добавить остальных (a — all). Такое разграничение определяет администратор сервера, используя соответственно команды + (добавить права), — (убрать привилегии) и = (установка).

Для файлов и каталогов определения прав Chmod схожи, однако их пояснение несколько отличается. К примеру для файлов можно задать такие права как:

  1. r — read, чтение файлов, можно прочитать файл, но не запустить его;
  2. w — write, запись в файл других данных, т.е. файл доступен для открытия его исходного кода или содержимого, которое можно поменять;
  3. e — execute, выполнение файла, т.е. если файлу присвоен данный параметр, то его можно запустить, в частности если он еще и является бинарным исполняемым файлом, для которого в современных клиентских ОС уже автоматически присваивается данный параметр (образно);

Для каталогов (папок) Chmod задается тоже с помощью аналогичных параметров:

  1. r — read, чтение или просмотр содержимого каталога, т.е. файлов и других папок, которые находятся в каталоге выше;
  2. w — write, возможность изменения содержимого директории, т.е. изменение файлов, папок и прочих данных, которые присуще главной папке, но при этом у вас есть установленные права;
  3. x — execute, позволяет войти в папку. Что интересно, если данного параметра не будет, то в принципе осуществить вход в папку не получится, даже имея пр этом два предыдущих параметра;

Чаще всего Chmod указывают в числовых значениях, к примеру 777, когда разрешается выполнение действий абсолютно всем пользователям (самый распространенный и простой вариант, который как раз чаще всего вызывает проблемы администраторам). Для функции read устанавливают значение 4, для write 2 и для execute 1, а чтобы окончательно установить права доступа, нужно суммировать данные, то есть для установки только чтения и записи файла, нужно соответственно сложить r+w=4+2+0=6, где ноль указывается на значение execute, что его выполнять не требуется.

Трехзначное число, которое указывает права доступа для пользователей, можно поделить на 3 части (766) — первая устанавливается для пользователей администраторов — по цифровой записи можно догадаться, что они имеют полные права, о чем говорит цифра 7, вторая для групп, а третья для всех остальных пользователей, которые могу только читать и записывать файлы, но никак не выполнять их.

Как я уже упомянул про Linux, то чтобы там так просто скопировать или изменить любой файл, папку и другой элемент, находящийся в системной папке, нужно как минимум иметь на это права. Касается это в прямом случае с группами — если учетная запись находится в любой другой группе, которая не относится к root, то она может редактировать только личные данные. Вот в особенности системная папка, которая была установлена с помощью root:

Права доступа администратора

А вот та, которая была загружена пользователем:

Права доступа рядового пользователя

Как видно они отличаются набором правил, но пользователи совершенно разные и в случае с системными файлами у последнего пользователя не будет прав на изменение файла, если администратор для него не выделит соответствующий доступ. Просто задав такие права (касается про локальный сервер XAMPP), загрузить данные на него, изменять файлы и устанавливать плагины, используя данные настройки не получится.

Установка и изменение прав доступа для загрузки и изменения файлов через FTP и PHP кода скрипта

Вот в действительности где нам пригодятся установки прав доступа — в случае, когда нет возможности через стандартный редактор шаблонов WordPress изменить код темы, или установить плагин на блог, ссылаясь на ошибки , которые связаны с правами доступа пользователей. Устранить данную проблему можно несколькими способами — если права доступа меняются на сервере, то для этого подойдут удаленные средства, если же настройка осуществляется на локальном сервере, то стандартными программами и средствами ОС, а так же с помощью скрипта, загруженного в корневой каталог сайта.

Отказ в доступе для редактирования файла

Рассмотрим на примере как с помощью FTP менеджера Filezilla настроить права доступа. Однако такую работу производить буду на локальном сервере, так как только с ним бывали проблемы (касается Linux, но и в Windows могут случаться такие неурядицы). Но с таким же принципом можно поработать с удаленным сервером, правда с осторожностью, так как не правильно выставленные права доступа могут навредить безопасности вашего сайта.

От вас потребуется подключиться к серверу сайта и там, где указаны данные на сервере, выбрать ту папку или файл, на которую будете менять права доступа (ПКМ — Изменить права доступа). В появившемся окне выбираем необходимые параметры для выбранного элемента. С помощью встроенного файлового менеджера, который установлен в Parallels Plesk Panel, можно посмотреть выставленные права в соответствующей колонке Полномочия.

Что касается пользователей Linux, в частности Ubuntu 10.04, то такую проблему можно частично решить с помощью команды sudo, но в терминале я не так силен, поэтому лучше запустить файловый менеджер в режиме администратора и через свойства файлов указать для файла соответствующие параметры:

Единственное, с чем пришлось помучиться — иногда данный вариант не срабатывает для всех файлов одновременно и приходилось ставить права как для папки, так и для файла, указав кому и в какой группе доступно изменение файла. Хотя это не назовешь настолько проблемой, сколько неудобством, по скольку можно без труда изменить файл прямо в корневой папке, но при этом предварительно установив на него права через свойства файла в режиме администратора.

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

И последний способ установки прав доступа — через созданный скрипт, который нужно запустить на сервере. Делается это очень просто — создайте файл с расширением *.php в корневой папке сайта (в большинстве случаев это httpd) и назовите его, к примеру — chmod, чтобы было более понятно назначение файла. Затем откройте его для редактирования и вставьте туда следующий код:

<?php
chmod ("*.php", ****);
chmod ("*", ****);
?>

Строка 2 предполагает установку прав доступа на файл, третья на папку, где одну звездочку нужно заменить на название файла или директории, а 4 последние выставляют права в кодовом формате, где в начале должен стоять 0 (0777 или 0766). При использовании команды Chmod полагается, что доступ устанавливается в восьмеричном формате, то есть 2 в степени 3, которое и задает формат числа. Однако в PHP впереди нужно ставить 0, т.е. 0+rwe.

Так же можно задать другой вариант кода для установки прав доступа, но при этом используя команду chmod:

<?php
chmod o+rw *.*;
?>

В данном случае права устанавливаются в формате 0+права в буквенном варианте. Только недостаток данного способа в том, что права задаются на глобальном уровне для файла, в котором за место звездочек ставятся имя и расширение. Осталось лишь запустить файл, прописав до него путь в строке браузера и заданные параметры в файле будут применены, но опять же, если вы обладаете на это правами уже в самой системе.

На этом запись можно закончить, использовать свои настройки прав доступа нужно только в том случае, если они не выставлены по умолчанию, хотя именно стандартные настройки в большинстве случаях являются наиболее безопасными.

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

    1. writer

      Ага, я у себя на станционарнике староватом решил организовать сервер для интереса, поставил Ubuntu Server, настраивал все, но вот чтобы другому юзеру прочитать файл, с помощью chmod так и не смог выставить права, пришлось через окружение все менять и группы по новому настраивать. Хотя по идее chmod должен был работать…

  1. Серега

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>