Структура файлової системи
Інформація на дисках розміщується блоками, по 512 байт в кожному блоці. Диск розбивається на наступні області (рис.7):
Невикористовуваний блок |
Суперблок |
і – вузол 1 |
і – вузол 2 |
і – вузол 3 |
: : |
і – вузол n |
Блок з даними файла |
Блок з даними файла |
Блок з даними файла |
Вільний блок |
Файл |
Вільний блок |
: : |
Рис.7. Організація файлів в Unix на диску невикористовуваний блок;
- керуючий блок або суперблок, у якому вміщується розмір диска і границі інших областей;
- i-список, який складається з описів файлів, що називаються i-вузлами;
- область для збереження вмісту файлів.
Кожний i-вузол вміщує:
- ідентифікацію власника;
- ідентифікацію групи власника;
- біти захисту;
- фізичні адреси на диску, де знаходиться вміст файлу;
- розмір файлу;
- час створення файлу;
- час останнього використання файлу (modification time);
- час останньої зміни атрибутів (change time);
- число зв'язків-посилань, що вказують на файл;
- індикацію, чи є файл директорією, звичайним файлом чи спеціальним файлом.
Слідом за i-списком йдуть блоки, призначені для збереження вмісту файлів. Простір на диску, що залишився вільним від файлів, утворює зв'язаний список вільних блоків.
Таким чином, файлова система UNIX являє собою структуру даних, яка розміщується на диску і утримує керуючий суперблок, в якому визначена файлова система в цілому; масив i-вузлів, де визначені всі файли у файловій системі; самі файли; і, нарешті, сукупність вільних блоків. Виділення простору під дані здійснюється блоками фіксованого розміру.
Кожний файл однозначно ідентифікується старшим номером пристрою, молодшим номером пристрою та і-номером (індексом і -вузла даного файлу в масиві i-вузлів). Коли викликається драйвер пристрою, за старшим номером індексується масив вхідних точок в драйвери. За молодшим номером драйвер вибирає один пристрій із групи ідентичних фізичних пристроїв.
Файл-директорія, у якому перераховані імена файлів, дозволяє установити відповідність між іменами і самими файлами. Директорії утворюють деревоподібну структуру. На кожний звичайний файл або файл пристрою можуть бути посилання в різних вузлах цієї структури. У непривілейованих програмах запис у директорії не дозволена, але при наявності відповідних дозволів вони можуть читати їх. Додаткових зв'язків між директоріями немає.
Велике число системних директорій система UNIX використовує для своїх власних потреб. Одна з них, коренева директорія, є базою для всієї структури директорій, і, "відштовхуючися" від неї, можна знайти розміщення усіх файлів. В інших системних директоріях вміщуються програми і команди, що надаються користувачам, і файли пристроїв.
Імена файлів задаються послідовністю імен директорій, що розділяються похилою рискою ("/") і приводять до кінцевого вузла (листа) деякого дерева. Якщо ім'я файлу починається з косої риски, то пошук по дереву починається в кореневій директорії. Якщо ж ім'я файлу не має на початку косої риски, то пошук починається з поточної директорії. Імена файлів, що починаються з "../", мають на увазі початок пошуку в директорії, розташованій на один рівень вище поточної. Ім'я файлу personal вказує на елемент personal у поточній директорії. Ім'я файлу /work/office/personal приводить до пошуку директорії work у кореневій директорії. Потім до пошуку директорії office у директорії work і, нарешті, до пошуку елемента ppersonal у директорії office. Коса риска / позначає кореневу директорію. У приведеному прикладі знайшла відображення типова ієрархічна структура файлової системи.
Файл, що не є директорією, може зустрічатися в різних директоріях, можливо, під різними іменами. Це називається зв'язуванням. Елемент у директорії, що відноситься до одного файлу, називається зв'язком. У системі UNIX усі такі зв'язки мають рівний статус. Файли не належать директоріям. Скоріше, файли існують незалежно від елементів директорій, а зв'язки в директоріях вказують дійсно на фізичні файли. Файл "зникає", коли видаляється останній зв'язок, що вказує на нього. Біти захисту, задані в зв'язках, можуть відрізнятися від бітів у вихідному файлі. Таким чином, вирішується проблема вибіркового обмеження доступу до файлів. З кожним підтримуваним системою пристроєм асоціюється один або більша кількість спеціальних файлів. Операції вводу-виводу для спеціальних файлів здійснюються так же, як і для звичайних дискових файлів, з тією лише різницею, що ці операції активізують відповідні пристрої. Спеціальні файли звичайно знаходяться в довіднику /dev. На спеціальні файли можуть указувати зв'язки так же, як на звичайні файли.
Від файлової системи не потрібно, щоб вона вся повністю розміщувалася на тому пристрої, де знаходиться корінь. Запит від системи mount (на установку носіїв і т.п.) дозволяє вбудовувати в ієрархію файлів файли на змінних томах. Команда mount має кілька опцій, але обов'язкових аргументів у стандартного варіанта її використання два: імена файлу блокового пристрою та ім'я каталогу. У результаті виконання цієї команди файлова система, розташована на вказаному пристрої, підключається до системи таким чином, що її вміст замінює собою вміст заданого в команді каталогу. Тому для монтування відповідного тому звичайно використовують порожній каталог. Команда unmount виконує зворотну операцію — "від'єднує" (розмонтує) файлову систему, після чого диск із даними можна фізично добути із системи
Захист файлів
Захист файлів здійснюється за допомогою номера, що ідентифікує користувача, і установки десяти бітів захисту - атрибутів доступу. Права доступу поділяються на три типи: читання (read), запис (write) і виконання (execute). Ці типи прав доступу можуть бути надані трьом класам користувачів: власнику файлу, групі, до якої входить власник, і всім іншим користувачам. Дев'ять з цих бітів керують захистом по читанню, запису і виконанню для власника файлу, інших членів групи, до якої входить власник, і всіх інших користувачів. Файл завжди зв'язаний з визначеним користувачем - своїм власником — і з визначеною групою, тобто в нього є UID (user ID, ідентифікатор користувача) і GID (group ID, ідентифікатор групи). Змінювати права доступу до файлу дозволено тільки його власнику. Змінити власника файлу може суперкористувач, групу - суперкористувач або власник файлу.
Програма, що виконується в системі, завжди запускається від імені деякого користувача і деякої групи (зазвичай - основної групи цього користувача), але зв'язок процесів з користувачами і групами організований складніше: тут розрізняються ідентифікатор для доступу до файлової системи (FSUID — file system access user ID, FSGID — file system access group ID) і ефективний ідентифікатор (EUID — effective user ID, EGID — effective group ID), а при доступі до файлів враховуються ще і повноваження (capabilities), присвоєні самому процесу.
При створенні файл одержує UID, що співпадає з FSUID процесу, який його створює, і, як правило, GID, що співпадає з FSGID цього процесу. Атрибути доступу визначають, що дозволено робити з даним файлом даній категорії користувачів. Є всього три операції: читання, запис і виконання. При створенні файлу (чи ще одного імені для вже існуючого файлу) модифікується не сам файл, а каталог, у якому з'являються нові посилання на вузли. Видалення файлу полягає у видаленні посилання. Таким чином, право на створення або видалення файлу - це право на запис у каталог. Право на виконання каталогу інтерпретується як право на пошук у ньому (проходження через нього). Воно дозволяє звернутися до файлу за шляхом, що вміщує даний каталог, навіть тоді, коли каталог не дозволено читати і тому список всіх його файлів недоступний.
Крім трьох названих основних атрибутів доступу існують додаткові, що використовуються в наступних випадках. Атрибути SUID і SGID мають значення при запуску програми на виконання: вони вимагають, щоб програма виконувалася не від імені користувача (групи), що її запустив, а від імені власника (групи) того файлу, у якому вона знаходиться. Формально кажучи, якщо файл програми має атрибут SUID (SGID), то FSUID і EUID (FSGID і EGID) відповідного процесу не успадковуються від процесу, що запустив його, а співпадають з UID (GID) файлу. Завдяки цьому користувачі отримують можливість запустити системну програму, яка створює свої робочі файли в закритих для них каталогах. Крім того, якщо процес створює файл у каталозі, який має атрибут SGID, то файл одержує GID не за FSGID процесу, а за GID каталогу. Це зручно для колективної роботи: всі файли і підкаталоги в каталозі автоматично виявляються належними до однієї і тієї ж групи, хоча створювати їх можуть різні користувачі. Є ще один атрибут — CVTX, який тепер відноситься до каталогів. Він показує, що з каталогу, який має цей атрибут, посилання на файл може видалити тільки власник файлу.
Існують дві стандартні форми запису прав доступу — символьна і восьмерична. Символьна являє собою ланцюжок з десяти знаків, перший з який не відноситься до прав, а позначає тип файлу. Використовуються наступні позначення:
- "-" - звичайний файл;
- "d" - каталог (директорія);
- "с" - символьний пристрій;
- "b" - блоковий пристрій;
- "р" - іменований канал (named pipe);
- "s" - "гніздо" (socket1);
- "I" - символічне посилання.
Далі слідують три послідовності, кожна з трьох символів, що відповідають правам користувача, групи і всіх інших. Наявність права на читання позначається буквою "r", на запис – "w", на виконання – "х", відсутність будь-якого права - знаком "-" у відповідній позиції. Наявність атрибута SUID (SGID) позначається заголовною буквою "S" у позиції права на виконання для власника (групи), якщо виконання не дозволене, і прописною буквою "s", якщо дозволене. Восьмеричний запис - це шестизначне число, перші два знаки якого позначають тип файлу і досить часто опускаються, третя цифра - атрибути GUID (4), SGID (2) і SVTX (1), а останні три - відповідно права власника, групи і всіх інших. Очевидно, що право на читання можна представити числом "4", право на запис - числом "2", а право на виконання кодується як "1". Наприклад, стандартний набір прав доступу для каталогу /tmp у символьній формі виглядає як drwxrwxrwt, а у восьмеричній - як 041777 (це каталог; читання, запис і пошук дозволені всім; встановлений атрибут SVTX). А набір прав -r-S-xw-, чи в числовому вигляді - 102412, буде означати, що це звичайний файл, власнику дозволяється читати його, але не виконувати і не змінювати; користувачам із групи файлу (за винятком власника) - виконувати (причому під час роботи програма отримає права власника файлу), але не читати і не змінювати; а всім іншим - змінювати, але не читати і не виконувати. Більшість програм створюють файли з дозволом на читання і запис для всіх користувачів, а каталоги - з дозволом на читання, запис і пошук для всіх користувачів. Цей вихідний набір атрибутів логічно додається до "маски користувача" - user file-creation mask, скорочено umask, що зазвичай обмежує доступ. Наприклад, наступні значення для umask u=rwx, g=rwx, o=r-х слід розуміти так: у власника і групи залишається повний набір прав, а всім іншим забороняється запис. У восьмеричному виді воно запишеться як 002 (перша цифра - обмеження для власника, друга - для групи, третя - для інших, заборона читання - 4, запису - 2, виконання - 1). Власник файлу може змінити права доступу до нього командою chmod.
Дата добавления: 2016-07-27; просмотров: 1908;