Права доступу, прапори файлів і директорій в unix

Як і в будь-який багато користувачів, в операційних системах Unix, є механізм управління доступом користувачів до тих чи інших ресурсів системи (процесорний час, пам'ять, файли, директорії та інше). Основними учасниками даного механізму є: Користувач (user), Група (group), Інші (Other), основними правами доступу в Unix, є:

  • права доступу на читання;
  • права доступу на запис;
  • права доступу на виконання;

Відповідно, в Unix, права доступу та учасники, згруповані три по три, read / write / execution для user / group / other.

Крім вищезазначених прав доступу, операційні системи Unix. підтримує "файлові прапори". для забезпечення додаткового рівня захисту, контролю та управління об'єктами системи. Наприклад, за допомогою прапорів, можна заборонити видалення файлу, навіть користувачеві root.

Кожному користувачеві системи, присвоюються ідентифікатори, UserID (ідентифікатор користувача) і GroupID (ідентифікатор групи), саме по ним операційна система визначає власника і групу для того чи іншого об'єкта системи. Символічні імена призначаються виключно для зручності читання, користувачами.

Кожен процес в операційній системі Unix, має не два, а чотири ідентифікатора, це, реальний UserID (UID) і ефективний UserID (UID) а так-же реальний і ефективний ідентифікатор групи GroupID (GID).
Реальний UserID (реальний GroupID) - реальні номери застосовуються для обліку використання системних ресурсів.
Ефективний UserID (ефективний GroupID) - новий ідентифікатор, отриманий процесом вже під час виконання, застосовуються для визначення прав доступу.

Процеси запущені автоматично (наприклад при старті системи), так-же отримують UserID. який саме, визначається запускає програмою (cron, inetd і т.д.), в звичайних випадках, UserID успадковується від батьківського процесу. Деякі процеси - "батьки", можуть привласнювати, дочірньому процесу - "нащадку", UserID. який не збігається зі своїм.

Іноді, запущений процес, може під час виконання, змінювати свої ідентифікатори. Це відбувається, коли в правах доступу на файл, встановлені додаткові біти, SUID (Set user ID - біт зміни ідентифікатора користувача) і SGID (Set group ID - біт зміни ідентифікатора групи). Коли користувач або процес запускає файл, у якого встановлений один з цих бітів, процесу, тимчасово присвоюються права власника даного файлу (а не того, хто його запускає). Таким чином, звичайний користувач, може виконувати команди від імені користувача root.

Як було згадано вище, права доступу до файлів і тек, визначаються по Реальному UserID і Реальному GroupID. Якщо ідентифікатор не змінюється в процесі виконання програми, Реальний UserID (реальний GroupID) і Ефективний UserID (ефективний GroupID) збігаються.

Система забезпечення прав доступу в операційних системах Unix, має числове і символічне, вирази. Чісловае виглядає наступним чином:

Існує ще один біт з восьмеричним значенням 1000. так званий Stiky-bit (липучка). Якщо даний біт встановлений на директорію, що містяться в ній файли, дозволено видаляти і перейменовувати, тільки в разі, якщо користувач є, власником каталогу, власником файлу або це користувач root.

Символічні вираження для установки прав доступу. В якості аргументів команди chmod. замість вісімкових значень, використовуються літерні еквіваленти.

Що-б подивитися права доступу і власників на файли і директорії в режимі лістингу, можна використовувати команду ls з прапором -l.

В даному лістингу видно, що власником усіх файлів є користувач root і група wheel. Перший символ зліва в колонці прав доступу, означає тип об'єкта, об'єкти можуть бути наступних типів:

У наведеному вище прикладі: file.txt і file.sh - є файлами, test_dir - директорія.

Починаючи з другого біта, запис ділиться по 3 символу, для користувача, для групи, для інших, в нашому випадку:

  • Файл file.txt. доступний на читання і запис - користувача, тільки для читання - групою і для читання - іншим;
  • Файл file.sh. доступний на читання, запис і виконання - користувачем, тільки для читання - групою, для читання - іншим;
  • test_dir. є каталогом і має наступні права доступу, для користувача: читання, запис, виконання; для групи: читання, виконання; для інших: читання, виконання;

Якщо встановлений біт SUID. то в секції 2 (права доступу для користувача), замість значення "х". буде стояти "s". якщо встановлений біт SGID. так-же буде поставлений символ "s". але вже в секції 3 (права доступу для групи), ну і якщо встановлено Styky-bit. в останній позиції, секції 4 (права доступу для інших), буде встановлено символ "t".

У разі, якщо будь-якої з цих бітів був встановлений, і при цьому не було встановлено відповідний біт виконання, будуть встановлені символи "S" для SUID і SGID і "T" для Stiky-bit. що сигналізує про помилку і дані атрибути будуть проігноровані.

Не зайвим буде зауважити, що в операційних системах Unix, значення прав доступу для файлів і директорій, не однакові.

  • r (Read) - читання. Відповідний користувач (процес), має права на читання вмісту даного файлу, і копіювання цього файлу.
  • w (Write) - запис. Відповідний користувач (процес), має права редагувати, змінювати, видаляти вміст файлу, додавати в нього що-небудь (наприклад вміст іншого файлу). Однак, це не дає прав на видалення або перейменування самого файлу, це визначається правами доступу на директорію, в якій цей файл знаходиться.
  • x (eXecute) - виконання. Дає право, відповідного користувачеві (процесу), запускати даний файл, за умови що він є виконуваною програмою або скриптом.

Важливо пам'ятати, що система повністю перевіряє шлях до конкретної піддиректорії або файлу, на наявність прав доступу, до кожної ділянки даного шляху, і якщо на кокой-небудь ділянку шляху, не встановлено відповідний біт прав доступу (x), користувачеві буде відмовлено в доступі. Простіше кажучи, є шлях: / usr / home / vds-admin / public_html /. навіть якщо користувач має достатні права на піддиректорії public_html. але на вищу директорію, home. біт x не встановлено, при спробі зайти в піддиректорію, йому буде відмовлено в доступі.

прапори файлів

Крім перерахованих вище атрибутів управління правами доступу до об'єктів, в операційних системах Unix, є ще один, так би мовити, більш сильнодіючий інструмент - набір файлових прапорів.

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

  • Призначені для користувача - прапори доступні для зміни власника фала і користувачеві root.
  • Суперпользовательскіе - прапори доступні для зміни, тільки користувачеві root.

В операційних системах Unix, використовуються наступні прапори:

Суперпользовательскіе прапори

  • arch (archived) - архівний файл. (потрібні права root)
  • sappnd (sappend) - в даний файл можна тільки дописувати, тобто вже наявну інформацію змінити не можна. Якщо прапор встановлений на директорію, не можна видаляти або перейменовувати файли, але можна створювати або копіювати (потрібні права root)
  • schg (schange, simmutable) - незмінний файл, не можна ні перейменовувати, ні змінювати, ні видаляти. Якщо даний прапорець встановлений на директорії, то ви не зможете додавати або видаляти файли, але міняти вміст уже наявних, зможете. (Потрібні права root)
  • sunlnk (sunlink) - файл не може бути перейменований або видалений. Вміст змінити можна при відповідних правах доступу. (Потрібні права root)

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

  • nodump - не включати даний файл в дамп. (Власник файлу і користувач root)
  • uappnd (uappend) - то-же що і для користувача root, плюс для власника файлу.
  • uchg (uchange, uimmutable) - то-же, що і для користувача root, плюс для власника файлу.
  • uunlnk (uunlink) - то-же, що і для користувача root, плюс для власника файлу.

Наприклад, щоб встановити на файл прапор schg (незмінний). потрібно виконати наступну команду:

Подивитися встановлені прапори можна командою ls c опціями -lo.

Крім того, можна встановити відразу кілька прапорів, перерахувавши їх через кому:

Зняти прапор можна, додавши до його назви, приставку "no":

Так-же є можливість скинути всі прапори, для цього замість прапора, досить просто поставити "0" (нуль).

Основні команди для установки і зміни прав доступу та роботи з прапорами в операційних системах Unix

Основними утилітами для роботи з правами доступу і прапорами, в операційній системі Unix, є наступні:

  • ls -l, ls -lo Лістинг каталогу, без прапорів і з прапорами
  • chown Зміна власника об'єкта
  • chmod Установка, видалення, зміни прав доступу до об'єкта
  • chflags Установка, видалення, зміна файлових прапорів