Допомагаємо вебмайстру

533
  • Базові поняття прав доступу до файлів і папок
  • Привілеї для груп користувачів
  • Чим відрізняються права файлів і папок
  • Chmod, виражені в цифрах (777, 400, 666, 755, 444)
  • Як призначити Chmod допомогою PHP
  • Сьогодні я хотів би поговорити про права доступу до файлів і папок (читайте що таке файл). Це поняття прийшло в світ вебмастеринга з linux (Unix) подібних систем, на яких працює більшість хостингів.

    Та й сама назва Chmod є найменуванням програми в linux, яка дозволяє призначити права доступу різних об’єктів. А раз ваш сайт встановлений на сервері під управлінням linux (Unix) тій чи іншій варіації, то і робота з об’єктами вашого вебсайту буде підпорядкована правилами, встановленими операційними системами linux (Unix).

    Допомагаємо вебмайстру

    У Windows фактично для всіх файлів встановлюються максимальні повноваження, що, власне, і призводить до засилля вірусів на сайтах і наших комп’ютерах, а так само, у свою чергу, не дає вмерти з голоду власникам антивірусних компаній. В linux (Unix) системах справа йде інакше – все складніше, але одночасно і безпечніше. Якщо все налаштувати правильно і зі знанням справи, то можна істотно підвищити безпеку свого вебсайту.

    Базові поняття прав доступу до файлів і папок

    Якщо ж все пустити цю справу на самоплив і не морочитися з установкою потрібних привілеїв, то ймовірність злому вашого ресурсу або зараження його шкідливим кодом буде дуже велика. Добре, якщо ви здійснювали резервне копіювання (бекап) всіх ваших даних, а якщо ні?!

    Тому краще відразу ж, не відкладаючи в довгий ящик, провести настройку і зміна Чмод для всіх важливих об’єктів вашого движка, виходячи з принципу мінімалізму. Тобто давати об’єктів мінімально необхідні для коректної роботи вебсайту права.

    Давайте спочатку розберемося в суті питання, щоб розуміти, що саме і яким чином ми налаштовуємо. Отже, приступимо. Права доступу розділяються по відношенню до файлів і директорій. Позначаються вони однаково, а означають трохи різне.

    У свою чергу, по відношенню до файлів можливо:

    • r — право на читання даних.
    • w — на зміну вмісту (запис – тільки зміна вмісту, але не вилучення).
    • x — на виконання файлу.

    Зупинимося трохи докладніше на можливості виконання файлу. Справа в тому, що в linux будь файлик може бути виконаний. Є він виконавчим — визначається не його розширення (поняття розширення відсутній у файловій системі Unix), а за правами доступу Chmod. Якщо у якогось файлика встановлено право на виконання «X», то це означає, що його можна запустити на виконання.

    По відношенню до директорій можливо:

  • r — право на читання директорії (можна прочитати вміст директорії, тобто отримати список об’єктів, що знаходяться в ній)
  • w — на зміну вмісту директорії (можна створювати і видаляти об’єкти в ній, причому, якщо ви маєте право на запис, видаляти ви зможете навіть ті файли, які вам не належать)
  • x — на вхід в директорію (воно завжди перевіряється в першу чергу, і навіть якщо ви маєте усі потрібні привілеї на об’єкт, який закопаний глибоко в ланцюжку каталогів, але не маєте атрибут «X» для доступу хоча б до однієї директорії на шляху до цього файлику, то до нього ви так і не пробьетесь )
  • У системах Лінукс все це роздає головний адміністратор комп’ютера, доступ до якого він отримує шляхом введення пароля. І якщо більшість об’єктів будуть мати права тільки для читання, то вірусів на комп’ютері буде робити практично нічого, тому що вони не зможуть себе туди ні записати, ні потім здійснитися. Саме цього результату нам потрібно добитися, виставляючи потрібні Chmod на об’єкти нашого сайту.

    Привілеї для груп користувачів

    Самі привілеї поділяються на три категорії в залежності від того, хто звертається до об’єкту:

    • «user» — u (безпосередньо власник файлика)
    • «group» — g (член тієї ж групи, до якої належить власник)
    • «world» — o (всі інші)

    Сервер визначає, до якої групи користувачів вас віднести в момент підключення вас до сервера. Коли ви, наприклад, підключаєтеся до сервера по протоколу FTP, то ви входите під своїм ім’ям користувача і паролем), і тоді сервер відносить вас до групи «user» («u)».

    Інші користувачі, які теж підключаються до сервера по FTP, будуть віднесені до групи «group» («g»), а відвідувач, який приходить до вас на сайт, використовуючи свій браузер, потрапляє в групу «world» («o»).

    Варіації трьох можливих значень «r», «w» і «x» для трьох категорій «u», «g» та «o» та визначають права доступу до файлів. Якщо не задана якась категорія, то вона замінюється знаком дефісом «-». Привілеї зазначаються послідовно в заданому порядку:

  • спочатку права для власника — «u»
  • потім для групи «g»
  • і в кінці — для всіх інших — «o»
  • Після того, як сервер віднесе відвідувача до певної групи, він надає йому права на дії з об’єктами, після чого відвідувач зможе прочитати, записати або виконати файл (залежно від того, що дозволено робити з цим об’єктом його групі).

    Щоб подивитися вміст каталогу, він повинен мати атрибут читання «r» (для тієї групи, до якої сервер відніс відвідувача). Щоб створити файлик або папку в уже існуючій необхідно, щоб цей існуючий каталог мав атрибут на запис «w».

    Для наочності давайте розберемо приклад, де власник файлу («user» — «u») має всі права на читання, запис у нього і виконання, а всі інші користувачі тільки привілей на читання. Запис таких Chmod буде виглядати так: «rwx r— r—».

    Розглянемо її в деталях: «rwx» (ця запис задає права на об’єкт для власника — «u»), «r—» (ця запис задає права на той же об’єкт, але у випадку, якщо відвідувач віднесений сервером до групи — «g»), «r—» (ця запис задає привілеї на об’єкт для всіх інших користувачів — «o»).

    Чим відрізняються права файлів і папок

    Виходить, що існує три групи користувачів і три можливі дії з об’єктами. Ще не заплуталися? Розкладемо все сказане вище по поличках у вигляді табличок. Спочатку наочно подивимося, чим вони відрізняються:

    «Права»

    « Файл»

    «Папка»

    r

    Перегляд вмісту

    Можна прочитати вміст каталогу

    w

    Зміна вмісту

    Можна змінювати вміст каталогу
    писати і видаляти об’єкти

    x

    Запуск на виконання файлика

    Дозволяє зайти в каталог і звернутися до його файликам

    А так само табличка, що показує різноманітні комбінації Chmod для різних типів об’єктів:

    «Права»

    «Файл»

    «Папка»

    Нічого не можна робити

    Доступ до каталогу і його підкаталогів заборонений

    r—

    Можна читати вміст

    Можна прочитати вміст каталогу

    rw-

    Можна бачити та редагувати вміст

    Можна додати, видалити, змінити файл каталогу

    rwx

    Читати, змінювати і виконувати файлик

    Можна читати, видаляти, змінювати файлики, зробити поточним каталог, тобто «увійти» в цей каталог.

    r-x

    Можна прочитати, або виконати

    Можна зайти в каталог і прочитати його вміст, видаляти або додавати файли не можна.

    —x

    Виконати, якщо файлик двійковий

    Користувач може виконати двійковий файл про існування якого йому відомо, зайти або прочитати каталог заборонено

    Chmod, виражені в цифрах (777, 400, 666, 755, 444)

    Ви бачите, що тут для опису прав доступу застосовуються запису з використанням латинських літер і дефісів, але ви, напевно, вже стикалися з тим, що зазвичай Chmod задають в цифровому вигляді, наприклад, всім відома комбінації: 777, роздільна все і всім.

    Дійсно, привілеї так само і позначають цифрами:

  • r (читати) замінюють на 4
  • w (запис) замінюють на 2
  • x (виконання) замінюють на 1
  • 0 означає – нічого не робити (те, що в буквеній запису позначається дефісом)
  • Давайте знову повернемося до прикладу запису, наведеним мною трохи раніше: rwx r— r—. Якщо замінити у ній букви і риски на цифри, згідно з наведеним правилом і при цьому скласти цифри в кожній трійці, то отримаємо цифровий вигляд цього запису: 744.

    Тобто виходить, що сума цих цифр і показує Чмод по відношенню до файлів або папці. Наприклад:

    • 7 (rwx) = 4 + 2 +1 (повні права)
    • 5 (r-x)= 4 + 0 + 1 (читання і виконання)
    • 6 (rw) = 4 + 2 + 0 (читання і запис)
    • 4 (r—) =4 + 0 + 0 (тільки читання)
    • і т. д.

    У цій таблиці наведені всі можливі комбінації привілеїв записані в цифровому вигляді:

    «Права»

    «Цифрова форма»

    «Символьна форма»

    Нічого не можна робити

    0

    Тільки читання

    4

    r—

    Тільки запис

    2

    -w-

    Тільки виконання

    1

    —x

    Читання і запис

    6

    rw-

    Читання і виконання

    5

    r-x

    Читання, запис, виконання

    7

    Rwx

    А тепер давайте розглянемо різні комбінації запису в цифрах, стосовно до груп користувачів:

    «Права»

    «Власник»

    «Група»

    «Інші»

    777

    читати
    записувати
    виконувати

    читати
    записувати
    виконувати

    Читати
    записувати
    виконувати

    776

    читати
    записувати
    виконувати

    читати
    записувати
    виконувати

    Читати
    записувати

    775

    читати
    записувати
    виконувати

    читати
    записувати
    виконувати

    Читати

    виконувати

    774

    читати
    записувати
    виконувати

    читати
    записувати
    виконувати

    Читати

    766

    читати
    записувати
    виконувати

    читати
    записувати

    Читати
    записувати

    655

    читати
    записувати

    читати

    виконувати

    Читати

    виконувати

    644

    читати
    записувати

    читати

    Читати

    Ви самі (крім того випадку, коли отримуєте доступ до сайту по FTP) і всі інші відвідувачі вашого ресурсу, належите до групи «word» (всі інші), тому для роботи з вебсайтом нам потрібно в першу чергу дивитися на останній (третій) цифру запису.

    Для того, щоб при роботі користувача з сайтом «запускався файл скрипта, досить буде, щоб на нього були встановлені права, починаючи від «4» (r— – тільки читання) (5,6,7 теж підійдуть, але це буде зайве в плані безпеки).

    Для каталогу ж, в якому лежить файлик цього скрипта, потрібно виставити мінімум «5» (r-x — можна зайти в каталог і прочитати його вміст, видаляти або додавати не можна). 7 теж підійде, але теж буде вже зайвим в плані безпеки.

    Якщо потрібно, щоб скрипт не тільки читати, але і «записував» якісь дані (наприклад, введені відвідувачем), то мінімальні права на «папку» як і раніше будуть «5», але для «файлика» вже знадобиться «6» (читати і записувати).

    Скоріше всього на сервері, куди ви скопіювали вміст движка вашого сайту, будуть встановлені наступні Chmod до об’єктів:

    Папки

    755

    власник (користувач) може все, група і всі інші можуть тільки читати каталоги і заходити в них, але їм заборонено записувати файлики, змінювати назви і прати їх у директоріях. (rwxr-xr-x)

    Файли

    «644»

    власник (користувач) може читати і змінювати файлики, виконувати йому їх заборонено, всім іншим заборонено їх змінювати і виконувати, інші можуть тільки читати. «(rw-r—r—)»

    Якщо б у вас був ресурс, що складається з одних html сторінок, то можна було б все так і залишити. Але сучасні сайти побудовані на движках, і там можуть бути об’єкти, які потрібно робити запис від імені відвідувачів з групи «world» — o (всі інші). Це можуть бути каталоги, використовувані для кешування сторінок або ті, які по ходу роботи з сайтом будуть завантажуватися картинки і ін.

    Само собою, що якщо ви зайдете на сайт по FTP, то зможете зробити запис у ці файлики або директорії, але працюючи з вебинтерфейсом як звичайний користувач у вас можуть виникнути проблеми. Тому до встановлення тих чи інших прав треба підходити вибірково:

    755

    для всіх директорій, в яких повинні записуватися файлики, але не треба регулярно прати

    777

    для папок, в які повинні записуватися і стиратися файли (наприклад, для кеша)

    644

    для простих файлів, які використовуються тільки для читання.html .php і ін)

    666

    для файлів, у які може знадобиться здійснювати запис (наприклад, з базами даних .dat)

    Як призначити Chmod допомогою PHP

    Як же все це можна реалізувати на практиці для свого сайту? В принципі, все просто. Для призначення прав доступу можна використовувати програму Ftp-клієнта, наприклад, FileZilla:

    Права доступа к файлу в FileZillaДопомагаємо вебмайстру

    Как изменить Chmod через ФайлзилуДопомагаємо вебмайстру

    Але якщо Чмод на які-небудь файли поміняти не виходить, то можна спробувати призначити їх засобами PHP. Ви можете скористатися наступним кодом:

    Вам треба буде замінити file_name_x.php і directory_name_x на реальні імена файлів і папок, Чмод до яких ви хочете змінити. Відповідно, для файликів встановиться 666, а для каталогів — 777. Помістіть це PHP код в файлик з допомогою будь-якого текстового редактора (рекомендую безкоштовно завантажити Notepad plus plus) і дайте йому розширення .php, ну, наприклад, як prava.php.

    prava.php скопіюйте по FTP в ту директорію, в якій не виходить штатними засобами призначити права доступу. В адресному рядку браузера пропишіть шлях до prava.php (наприклад, https:///prava.php) і натисніть «Пуск» або ентер на клавіатурі. Все, тепер привілеї будуть стовідсотково змінені засобами PHP.

    Для Joomla, відразу після її установки, можна виставити 777 на наступні директорії:

    administrator/backups/
    administrator/cache/
    administrator/components/
    administrator/modules/
    administrator/templates/
    cache/
    components/
    images/
    images/banners/
    images/stories/
    language/
    language/en-GB/
    language/uk-ua/
    media/
    modules/
    plugins/
    plugins/content/
    plugins/search/
    plugins/system/
    templates/

    Після того, як ви встановите для Джумлы всі розширення і справите остаточні параметри, Chmod до більшості з наведених вище директорій слід в цілях підвищення безпеки сайту повернути до 755. Залишити 777 потрібно буде на каталоги з кешем, з бекапом і з картинками.

    Для файлів движка, що знаходяться в корені сайту, крім sitemap.xml краще встановити 444 (для всіх груп відвідувачів тільки читання). На seting.php іноді радять навіть встановити 400.

    Точно такі ж можу дати поради і з приводу встановлення прав доступу на об’єкти в движках SMF і WordPress. Бажано, по можливості, залишати на постійній основі для директорій 755 (крім зазначених вище каталогів кеша, картинок, бекапа і може бути ще якісь, по мірі необхідності), а для файликів — 644.

    На файли в корені сайту краще поставити 444.

    Якщо при роботі з сайтом виникне проблема з неможливістю запису налаштувань в якийсь файлик або неможливістю створити яку-небудь директорію, то можна тимчасово поставити на них більші права (777, наприклад), а потім все повернути назад (від гріха подалі). І ні в якому разі не варто залишати (для простоти роботи з сайтом) необґрунтовано завищені Chmod.

    Удачі вам! До зустрічей на сторінках блогу