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

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

1 Як приклад автор наводить дамп файлу каталогу в тому вигляді, який ми отримали б в старих версіях UNIX, що використовують s5fs (файлову систему, спочатку застосовувалася в UNIX System V) Реалізації фай лових систем сучасних версій відійшли від записів фіксованої дли ни (у них формат файлу каталогу складніший) і не обмежують довжину імені файлу 14-ю символами, як це було колись Так, FFS (Fast File System), що зявилася вперше в BSD 42, допускає вже 255-символьні імена файлів – Прямуючи науч ред

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

Але попереджаємо: в кожній системі існує спеціальний користувач, званий суперкористувачем (super5user), Який може читати і модифікувати будь-якіфайли в системі Права суперкористувача присвоєні реєстраційному імені root, під яким адміні ністратори управляють сістемой1 Існує команда su, що надає статус суперкористувача кожному, хто знає пароль Кожний власник такого пароля отримає доступ до ваших любовним листам, тому не варто зберігати в системі настільки секретні матеріали

Для збереження конфіденційності можна застосовувати команду crypt (crypt (1)), яка шифрує дані таким чином, що і суперкористувач буде не в змозі їх прочитати (або, принаймні, зрозуміти) Звичайно, і команда crypt не абсолютно надійна Суперкористувач може підмінити її, а шифр може бути зламаний Але перше є посадовим злочином, а другий спосіб досить трудомісткий, так що на практиці ця команда досить безпечна

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

У процесі реєстрації в системі користувач вводить імя, а потім за допомогою пароля підтверджує, що він саме той, за кого себе видає Це імя називається реєстраційним ідентифікатором (login5 id) Насправді система пізнає користувача за номером uid –ідентифікатору користувача Фактично, кілька реєстраційних ідентифікаторів можуть мати одне і те ж значення uid, що не дозволяє системі відрізнити їх один від одного, хоча це випадок досить рідкісний і небажаний з точки зору безпеки

1 Якщо бути більш точним, то права суперкористувача будуть делеговані системою будь-якому процесу користувача, ефективний користувальницький ідентифікатор якого дорівнює нулю Але імя облікового записи користувача і його ідентифікатор, одержуваний системою з цього облікового запису при вході користувача в систему, ніяк не повязані в дійсності Тому цілком може виявитися, що в якийсь системі адміністратор поміняв імя реєстраційної записи з нульовим ідентифікатором на щось інше, відмінне від root Однак призначення такого імені для облікового запису суперкористувача – багаторічна традиція, а слова «root» і «суперкористувач» сприймаються як синоніми – Прямуючи науч ред

Крім ідентифікатора uid користувачеві привласнюється ідентіфі5 катор групи (group5id), Що визначає певний клас користувачів У багатьох системах звичайні користувачі (на відміну від таких, як root) поміщаються в одну групу, звану «інші» (other), але можливо, що у вашій системі прийняті інші правила Фай ловая система, а значить і система UNIX в цілому, на основі значень uid і group-id, виданих користувачу, визначає, які дії йому дозволені

Паролі зберігаються у файлі / etc / passwd там же знаходиться вся реєстраційна інформація кожного з користувачів Можна дізнатися свої значення uid і group-id так само, як це робить система, знайшовши своє імя у файлі / etc / passwd:

$ grep  you /etc/passwd

you:gkmbCTrJ04COM:604:1:YOAPeople:/usr/you:

$

Поля у файлі паролів розділені двокрапкою і розташовані в такому порядку (відповідно до passwd (5)):

login5id:encrypted5password:uid:group5id:miscellany:login5directory:shell

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

Полеshell,  визначальне оболонку, часто залишається порожнім, маючи на увазі оболонку за замовчуванням, тобто / bin / sh Полеmiscellany може містити довільні дані, часто в ньому зберігають імя, адресу або номер телефону

Зверніть увагу на те, що пароль, який займає друге поле, збе нітся в зашифрованому вигляді Будь-який користувач може прочитати цей файл, і якби пароль зберігався незашифрованим, дізнатися його міг б хто завгодно Коли користувач вводить свій пароль в програмі login, та шифрує його і порівнює результат із зразком з / etc / passwd У разі збігу дозволено вхід в систему Такий механізм ефективний завдяки тому, що алгоритм шифрування працює досить швидко, а дешифрування вимагає значних зусиль Наприклад, пароль ka-boom може в зашифрованому вигляді виглядати як gkmbCTrJ04COM, але відновити за такою рядку оригінал вельми непросто

Прочитати файл / etc / passwd виявилося можливим тому, що ядро, перевіривши права доступу до нього, видало дозвіл на читання Для кожного файлу існують три види доступу: читання (перегляд вмісту), запис (зміна вмісту) і виконання (запуск програми) Крім того, різні користувачі можуть мати різні права доступу Один набір дозволів повязаний з власником файлу, інший набір – З групою, в яку входить власник, а третій визна ляєт дозволу на доступ для всіх інших

Команда ls, запущена з параметром-l, виводить, крім іншого, інформацію про права доступу:

$ ls -l /etc/passwd

–rw–r––r–– 1 root              5115 Aug  30 10:40  /etc/passwd

$ ls -lg /etc/passwd

–rw–r––r–– 1 adm                  5115 Aug  30 10:40  /etc/passwd

$

У цих двох рядках міститься наступна інформація: файл / etc / passwd належить користувачеві root з групи adm, має довжину 5115 байт, час останньої зміни 10:40 30 серпня має одну посилання (одне імя в файлової системі посилання обговорюються в наступному розділі) Деякі версії ls виводять інформацію одночасно про користувача і про групу

У рядку-rw-r – r – представлені відомості про права доступу до файлу Перший знак – говорить про те, що це звичайний файл Якби це був каталог, то в першій позиції знаходився б символ d Наступні три символу показують права власника (що визначаються за його uid) на читання, запис і виконання Символи rw-означають, що root (власник файлу) може читати і писати, але не може виконувати цей файл У виконуваних файлів замість прочерку повинен стояти символ x

Наступні три символи (r -) показують дозволу для групи, в даному випадку користувачі групи adm, мабуть, системні адміністратори, можуть читати файл, але не мають прав на запис та виконання Наступні три (також r -) визначають права доступу для інших – всіх інших користувачів системи Таким чином, на цій машині тільки root може змінювати реєстраційну інформацію, а всім іншим вона доступна для читання Однією з ймовірних альтернатив було б привласнення і групі adm привілеї на запис в

/etc/passwd

Файл / etc / group містить імена груп та їх ідентифікатори і визна ляєт приналежність користувачів до груп В / etc / passwd визна лена тільки первісна група, яка призначається при реєстрації команда newgrp змінює поточну групу користувача

Будь-який користувач за допомогою команди

$ ed /etc/passwd

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

$ ls -l /bin/passwd

–rwsr–xr–x  1 root            8454 Jan    4   1983 /bin/passwd

$

(Зауважте, що / etc / passwd являє собою текстовий файл з реєстраційною інформацією, а / bin / passwd, розташований в іншому каталозі, є виконуваною програмою, що дозволяє змінити інформацію про пароль) У даному випадку права доступу визначають, що команда доступна для виконання всім, але тільки root може її змінити Символ s замість x у поле прав на виконання для власника говорить про те, що команда під час виконання набуває права свого власника, в даному випадку root А так як / bin / passwd отримує при виконанні ідентифікатор користувача root, будь-який користувач з допомогою цієї команди може змінити файл паролів

Призначення атрибута SUID (set-uid) – проста і витончена ідея, 1 вирішальна ряд проблем безпеки Наприклад, автор ігрової програми може присвоїти їй виконавчий ідентифікатор власника з тим, щоб вона могла оновлювати поточний рахунок у файлі, захищеному від прямого втручання інших користувачів Але концепція set-uid таїть у собі й потенційну небезпеку Програма / bin / passwd повинна працювати правильно в іншому випадку вона може, діючи від імені суперкористувача, знищити системну інформацію Якщо права доступу до неї встановлені в-rwsrwxrwx, то будькористувач може замінити її власною програмою Це особливо критично для програм, що мають атрибут SUID, оскільки користувач root має права на доступ до всіх файлів системи (Деякі системи UNIX обнуляют біт SUID виконавчого ідентифікатора при модифікації файлу з тим, щоб зменшити ризик появи проломи в системі безпеки)

Біт SUID – потужний засіб, але зазвичай воно використовується лише в деяких системних програмах, таких як passwd Розглянемо тепер звичайний файл

$ ls -l /bin/who

–rwxrwxr–x 1 root              6348 Mar  29   1983 /bin/who

$

Файл who доступний для виконання всім, а для запису – власнику root і групі власника Під «виконанням» тут розуміється наступне: при введенні команди

$ who

оболонка переглядає ряд каталогів, у тому числі і / bin, в пошуках файлу who Якщо вона знаходить такий файл, і якщо файл має дозвіл на виконання, оболонка робить запит на його виконання до ядра Ядро перевіряє права доступу і, якщо вони дозволяють, запускає програму Зверніть увагу, що програма – це файл, що має раз рішення на виконання У наступному розділі ми розглянемо програм-

1 Ідея атрибута set-uid належить Деннісу Рітчі (Dennis Ritchie)

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

Права доступу на каталоги діють трохи інакше, хоча основна ідея та ж

$ ls -ld

drwxrwxr–x 3 you                  80 Sep 27 06:11  

$

Команда ls з параметром-d виводить відомості про самого каталозі, а не про його вміст, а d на початку рядка підтверджує, що «» Справді є каталогом Поле r означає, що каталог доступний для читання, і його вміст може бути переглянуто за допомогою команди ls (або, при бажанні, od) Наявність w говорить про те, що можливе створення і видалення файлів у цьому каталозі, оскільки ці дії вимагають запису у файл каталогу

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

$ who> Спроба перезаписати «»

.: cannot  create        Неможливо

$

Для цієї мети застосовуються системні виклики, що дозволяють созда вать і видаляти файли, – тільки з їх допомогою можна вносити зміни у файл каталогу Але механізм прав доступу працює і тут: поле w визначає, хто може використовувати системні програми для зміни каталогу

Дозвіл на видалення файлу не повязане із самим файлом При наявності права на запис у каталог можна видалити файли навіть у тому випадку, якщо вони захищені від запису Команда rm запитує підтвердження перед тим, як видалити захищений файл, – це один з тих рідкісних випадків, коли UNIX просить користувача підтвердити його наміри (Прапор-f дозволяє команді rm видаляти файли без зайвих питань)

Поле x в рядку прав доступу до каталогу дозволяє не виконання, а пошук Дозвіл на виконання для каталогу означає, що в ньому може бути виконаний пошук файлу Таким чином, можна створити каталог з правами – x для решти користувачів, що дозволить їм підлозі чить доступ до тих файлів, які їм відомі, але не дасть виконати команду ls для перегляду всього вмісту каталогу Аналогічно, в каталозі з правами доступу r-користувачі можуть переглядати його вміст, але не можуть з ним працювати У деяких конфігураціях ця властивість використовується для відключення каталогу / usr / games в робочий час

Команда chmod (change mode – змінити режим) змінює права доступу до файлу

$ chmod права5доступа імена5файлов ..

Правда, синтаксис прав5доступа кілька незграбний Існують два способи опису: в вісімковому і в символьному вигляді Вісімкові значення легше у використанні, хоча іноді буває зручно символьне подання, оскільки воно дозволяє описати щодо зміни прав Було б зручно написати

$ chmod rw-rw-rw junk Цей метод не працює

замість

$ chmod  666 junk

але так не можна Вісімкові значення утворюються шляхом підсумовування 4 для читання, 2 для запису і 1 для виконання Трьома цифрами, як у ls, позначаються дозволу для власника, групи та інших Значення символьних кодів пояснити важче, вичерпний опис є на сторінці керівництва chmod (1) Для наших цілей достатньо зазначити, що знак + включає право доступу, а знак – його вимикає Наприклад

$ chmod  +x command

дозволяє всім виконувати command, А

$ chmod  -w file

скасовує право на запис для всіх, включаючи власника Незалежно від наявних дозволів, тільки власник файлу може змінити пра ва доступу до нього – з урахуванням звичайної застереження про Суперкористувача Навіть якщо хто-небудь надасть користувачеві права на запис в файл, система не дозволить йому змінити біти прав доступу

$ ls -ld /usr/mary

drwxrwxrwx  5 mary              704 Sep 25 10:18  /usr/mary

$ chmod  444 /usr/mary

chmod: cant  change /usr/mary

$

У той же час, якщо каталог доступний для запису, користувачі можуть видаляти файли незалежно від прав доступу до цих файлів Щоб виключити можливість видалення файлів будь-ким, слід скасувати дозвіл на запис у каталог:

$ cd

$ date &gttemp

$ chmod-w Заборонити запис в каталог

$ ls -ld

dr–xr–xr–x  3 you                  80 Sep 27 11:48  

$ rm temp

rm:  temp not  removed          Неможливо видалити файл

$ chmod 775 Відновити права доступу

$ ls -ld

drwxrwxr–x 3 you                  80 Sep 27 11:48  

$ rm temp

$                                               Запис у каталог дозволена

Tеперь temp видалений Зверніть увагу на те, що зміна прав доступу до каталогу не торкається дату його модифікації Дата модифікації відображає зміни у змісті каталогу, а не в його свойст вах Права доступу та дати зберігаються не в самому файлі, а в індексному дескрипторі (inode), якому присвячений наступний розділ

Вправа 25Поекспериментуйте з chmod Спробуйте різні значення, такі як 0 і 1 Будьте обережні і не зашкодить свій реєстраційний каталог ~

Джерело: Керниган Б, Пайк Р, UNIX Програмне оточення – Пер з англ – СПб: Символ-Плюс, 2003 – 416 с, Мул

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*