Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PR_СП_лабы_11.doc
Скачиваний:
7
Добавлен:
22.04.2019
Размер:
755.71 Кб
Скачать

2. Права доступу до файлів

Кожен файл в ОС UNIX містить набір прав доступу, за яким визначається, як користувач взаємодіє з цим файлом. Цей набір зберігається в індексному дескрипторі даного файлу у вигляді цілого значення, з якого зазвичай використовується 12 бітів. Причому кожен біт використовується як перемикач, дозволяючи (значення 1) чи забороняючи (значення 0) той чи інший доступ.

Три перших біта встановлюють різні види поведінки при виконанні. Решта дев'ять діляться на три групи по три, визначаючи права доступу для власника, групи та інших користувачів. Кожна група задає права на читання, запис і виконання.

Права доступу можна дізнатися за допомогою команди

ls-l

r - Бит читання для всіх типів файлів має одне і те ж значення: він дозволяє читати вміст файлу (отримувати лістинг каталогу командою ls).

w - Бит запису також має одне і те ж значення: він дозволяє редагувати цей файл. Для каталогу - це можливість змінювати його вміст, тобто створювати і видаляти файли.

x - Якщо для деякого файлу встановлений біт виконання, то файл може виконуватися як команда. У разі встановлення цього біта для каталогу, цей каталог можна зробити поточним (перейти в нього командою cd).

S - Встановлений біт зміни ідентифікатора користувача SUID означає, що доступний користувачеві на виконання файл буде виконуватися з правами (з ефективним ідентифікатором) власника, а не користувача, який викликав файл (як це зазвичай відбувається).

S - Встановлений біт зміни ідентифікатора групи SGID означає, що доступний користувачеві на виконання файл буде виконуватися з правами (з ефективним ідентифікатором) групи-власника, а не користувача, який викликав файл (як це зазвичай відбувається).

Якщо біт SGID встановлений для файлу, не доступного для виконання, він означає обов'язкове блокування, тобто незмінність прав доступу на читання і запис поки файл відкритий певною програмою.

t - Установлений клейкий біт має сенс для каталогу. Файл в цьому каталозі може бути видалений або перейменований тільки в наступних випадках:

  • користувачем-власником файла;

  • користувачем-власником каталогу;

  • якщо файл доступний користувачеві на запис; користувачем root.

3. Інтерфейси для файлового введення / виводу

У середовищі програмування UNIX існують два основних інтерфейсу для файлового введення / виводу:

1. Інтерфейс системних викликів, що пропонує системні функції низького рівня, що безпосередньо взаємодіють з ядром операційної системи.

2. Стандартна бібліотека вводу / виводу, що пропонує функції буферізірованний введення / виводу.

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

Кожен системний виклик - це звернення до ядра операційної системи. Це викликає ряд проблем:

  • доступ до диска (читання / запис) набагато (на кілька порядків) повільніше, ніж доступ до даних в оперативній пам'яті,

  • при зверненні до ядра відбувається досить велика додаткова робота, яка може значно перевищити корисну роботу,

  • системні виклики працюють з файлом як з неструктурованим масивом байт; тоді як зручніше представляти, що файл поділений на рядки.

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

Системний виклик відбувається в 2 етапи:

  1. у користувачевій програмі викликається бібліотечна функція, яка містить команду генерації програмного переривання. Це - головна відмінність від нормальних Сі-функцій - виклик по перериванню.

  2. Реакція ядра на переривання:

  • перехід в привілейований режим;

  • з'ясування, ХТО звернувся до ядра, і переключення контексту відповідного процесу;

  • витяг аргументів з пам'яті запросила процесу;

  • з'ясування, ЩО ж хочуть від ядра (один з аргументів, невидимий нам - це номер системного виклику);

  • перевірка коректності інших аргументів;

  • перевірка прав процесу на допустимість виконання такого запиту;

  • виклик тіла необхідного системного виклику - це звичайна Сі-функція в ядрі;

  • повернення відповіді в пам'ять процесу;

  • вимикання привілейованого режиму;

  • повернення з переривання.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]