Структура Файлової Системи
Структуру каталогів в Slackware Linux ми з вами вже обговорили. До цього часу ви вже мали навчитися знаходити файли та директорії, але файлова система - це більше ніж просто структура каталогів.
Linux - це багатокористувацька операційна система, кожна її частина, навіть файлова система. Система зберігає інформацію за допомогою таких понять як власник файлу або корустувач що має право перегляду файла. Також є інші унікальні об`єкти файлової системи, такі як посилання та мережева файлова система. У цій частині пояснюються ці та деякі інші аспекти файлової системи Slackware linux.
Власники
Файлова система зберігає інформацію про власників для кожного файлу та директорії в системі. Також зберігається інформація про групу користувачів яким належить файл. Найлегший спосіб переглянути цю інформацію - за допомогою команди ls:
% ls -l /usr/bin/wc
-rwxr-xr-x 1 root bin 7368 Jul 30 1999 /usr/bin/wc
Нас цікавлять третя та четверта колонки. Вони містять ім`я користувача та групу яким належить цей файл. Як ви бачите, цей файл належить користувачу root та групі bin.
Власника файлу легко змінити за допомогою команд chown(1)
(розшифровується як “change owner” або змінити власника) та ?chgrp(1)
(розшифровується як “change group” або змінити групу). Якщо власником файлу потрібно зробити демона тоді необхідно використовувати chown:
# chown daemon /usr/bin/wc
А для того, щоб змінити групу-власника, наприклад на root, потрібно використовувати chgrp:
# chgrp root /usr/bin/wc
Також можливе використання chown для присвоєння власника й групи-власника одночасно:
# chown daemon:root /usr/bin/wc
В останньому прикладі був використаний запис через крапку замість традиційної форми(окрема колонка). Результат все рівно однаковий, хоча традиційна форма запису вважається кращою. Запис через крапку в принципі осуджується та може бути видалений з наступних версій chown для того, щоб дозволити імена, що містять крапки. Такі імена набувають все більшої популярності у Windows Exchange Servers та найчастіше зустрічаються в email адресах наприклад: mr.jones@example.com. В slackware адмінстраторам не радять застосовувати такі імена тому, що деякі скрипти досі застосовують крапку для розділення імені власника та групи-власника файлу чи директорії. В нашому прикладі chmod
сприйняв би аргумент mr.jones як користувача mr та групу jones.
Право власності є дуже важливим аспектом використання системи, навіть якщо ти єдиний користувач системи іноді доводиться міняти права на файли або пристрої.
Дозволи
Дозволи являються іншою важливою частиною багатокористувацької системи. Саме вони вказують хто може читати, записувати або виконувати файли.
Інформація про дозволи зберігається у вигляді чотирьох вісімкових чисел, кожне вказуючи окремий дозвіл. Перше вісімкове число використовується для збереження спеціальної інформації про встановлений користувацький ID (ідентифікаційний номер) (SUID - set user ID), встановлений ID групи (SGID - set group ID) або стійкий біт (sticky bit), останні три октети вказують дозволи для власника файла, для групи і загальний (для решти користувачів). Наступне є переліком станів дозволу і відповідних вісімкових чисел і літер що використовуються такими програмами як chmod
або ls
:
[Таблиця 9-1. Вісімкові значення дозволів.] | Тип дозволу | Вісімкове значення | Позначка літерою | | :----------------------------- | :----------------: | :--------------: | | встановлений стійкий біт | 1 | t | | встановлений користувацький ID | 4 | s | | встановлений ID групи | 2 | s | | право на читання | 4 | r | | право на запис | 2 | w | | право на виконання | 1 | x |
Вісімкові числа дозволів можна додавати, так, скажімо, щоб надати групі право на читання і запис, ви повинні внести "6" у розділ для групи з інформації про дозволи.
Взнати дозволи можна з допомогою тієї самої ls
команди, наприклад:
$ ls -l /bin/bash
-rwxr-xr-x 1 root bin 477692 Mar 21 19:57 /bin/bash
Нас цікавить перший стовпчик виводу (-rwxr-xr-x
). Першим знаком у цьому ланцюжку стоїть риска (-
), що вказує що цей звичайний файл а не каталог; у випадку каталогів замість риски стоятиме "d
" (directory). Решту дев'ять знаків після першого слід розбити на три групи по три знаки: перші три відносяться до власника файла (rwx
), другі - до групи (r-x
) і останні три знака - до решти користувачів (r-x
). У цьому випадку власником є root користувач і він матиме права на читання (r
), запис (w
) і виконання (x
) цього файла. Користувачі що входять у bin групу і решта користувачів будуть мати відповідно права лише на читання і виконання (r-x
) файла /bin/bash. Зверніть увагу, що відсутній дозвіл позначено як риска (тобто "-
" замість "w
" для групи і решти користувачів.
Тепер спробуємо самостійно встановити дозволи подібні на ті що надані /bin/bash. Для початку створимо новий файл файл для тестування:
$ touch /tmp/example
$ ls -l /tmp/example
-rw-rw-r--- 1 david users 0 Apr 19 11:21 /tmp/example
Зверніть увагу на дозволи і належність нового файлу. Ми скористаємось chmod(1)
(change mode) для зміни дозволів тестового файла. Ми використаємо вісімкові числа для позначення нових дозволів. Так само, для власника ми встановимо 7
(право на читання (4) плюс право на запис (2) плюс право на виконання (1)), тоді як для групи, якій ми і створений нами файл належить, а також для решти користувачів встановленим доступом буде 5
(право на читання (4) плюс право на виконання (1)). Передайте ці значення команді chmod
таким чином:
$ chmod 755 /tmp/example
$ ls -l /tmp/example
-rwxr-xr-x 1 david users 0 Apr 19 11:21 /tmp/example
Запам'ятайте, що якщо ви надаєте право на виконання звичайному файлу, його можна буде запустити як програму або скрипт, у випадку ж каталогів, право на виконання означає що користувач може ввійти у цей каталог, використовуючи команду
cd
.
Ви, можливо, спитаєте чому під час сворення файла ми отримали відмінні від встановлених щойно дозволів. Відповіддю буде вбудована в оболонку команда umask
, включена у більшість Юнікс оболонок. Саме umask
контролює які саме права доступу будуть надані новоствореному файлу. Ми ознайомились в деякій мірі з bash
вбудованими командами у Розділі 8.3.1. Команда umask
вимагає певного призвичаєння. Вона працює трохи подібно до chmod
, тільки навпаки: ви вказуєте вісімкові значення які ви не хочете щоб були присутніми під час створення файлу. За замовчуванням значенням umask
буде 0022
(тобто, небажаним є запис (2) групою і іншими користувачами наших файлів).
Ось наглядний приклад зміни umask
для поточного сеансу оболонки:
$ umask
0022
$ umask 0077
$ touch tempfile
$ ls -l tempfile
-rw-------- 1 david users 0 Apr 19 11:21 tempfile
Як ви бачите, вказавши 7
для вашої групи і решти користувачів призведе до новоутворених файлів які лише ви, власник файла, можете читати і змінювати. Загляніть також у сторінку посібника bash(1)
для додаткової інформації про umask
.
Перед тим як розглянути встановлення спеціальних прав, користувацького ID (SUID), ID групи (SGID) і стійкого біту, коротке пояснення що саме вони означають. Перші два (SUID та SGID) використовуються як правило на виконуваних файлах і дозволяють іншим користувачам запускати програми від імені інших (звичайно привілейованих) користувачів і груп. Яскравим прикладом цього являється passwd програма, яка дозволяє звичайним користувачам змінювати системний файл /etc/shadow (колись /etc/passwd) від імені root користувача, власника passwd
програми. Досвід показав що надання програмам SUID/SGID прав може виявитись загрозою для безпеки системи, дозволяючи перевищення привілеїв у випадку погано написаних програм, тому ці дозволи повинні надаватись у крайніх випадках лише перевіреним програмам і скриптам.
Стійкий біт використовується, як правило, з каталогами. Якщо останнім надано стійкий біт, користувачі цих каталогів зможуть змінювати і видаляти лише власні файли. Типовим прикладом каталогу з встановленим стійким бітом є /tmp.
Отож, щоб надати спеціальні права файлу чи каталогу помість відповідне вісімкове як перше число аргументу chmod
. Ви так само можете додавати вісімкові значення, тобото для встановленого користувацького ID і ID групи нам необхідно використати число 6:
$ chmod 6755 /tmp/example
$ ls -l /tmp/example
-rwsr-sr-x 1 david users 0 Apr 19 11:21 /tmp/example
Якщо вісімкові значення занадто заплутані для вас, ви можете використати літери із chmod
. Для поділу користувачів ми використовуємо наступні букви:
Користувачі | Літера |
---|---|
Власник | u (user) |
Група | g (group) |
Решта | o (others) |
Всі | a (all) |
Та сама дія що й у попередньому прикладі може бути розписана як:
$ chmod a+rx /tmp/example
$ chmod u+w /tmp/example
$ chmod ug+s /tmp/example
Тобто ми вказуємо до якого користувача або користувачів команда відноситься і яким чином змінити їхні права доступу, використовуючи плюс (+
) щоб надати певний дозвіл або дозволи і мінус (-
) щоб скасувати.
Принципово, не має великої різнці яку форму, літери чи вісімкові числа, використовувати із chmod
. Літери, напевне, зрозуміліші людській істоті, тоді як вісімкові числа вважають швидшими й частіше вживаються у скриптах.
Посилання
Посилання - це вказівники на іший файл. Завдяки посиланням одих і той самий файл може знаходитись у різноманітних частинах файлової системи у бути доступним під різними іменами. Існують два типи посилань: жорсткі і символічні.
Жорсткі посилання - це просто інші назви того самого файлу. Вони можуть існувати лише у межах тієї самой файлової системи і справжній файл буде видаленим лише тоді коли буде видалено останню з його назв. Жорсткі посилання можуть існувати лише між звичайними файлами, між каталогами вони заборонені. Щоб дізнатися чи файл має жорскі посилання, чи сам є жорстким посиланням (що є одним і тим самим), ми повинні подивитися на другий стовпчик виводу команди ls:
$ ls -l /bin/ls
-rwxr-xr-x 1 root bin 46700 May 27 2002 /bin/ls
Між стовпчиком прав доступу і вказівкою користувача (root) ви знайдете кількість назв файла. У приведеному прикладі їх 1, тобто цей файл не має жорстких посилань (сам не являється жорстким посиланням). Ви дізнаєтесь як сворювати жорсткі посилання з Розділу 10.7.
Жорсткі посилання бувають корисними у деяки випадках але більшість користувачів надають перевагу більш гнучким символічним посиланням.
Символічні посилання можуть вказувати на файл поза межами власної файлової системи. Це в дійсності маленькі файли з вказівкою місцезнаходження іншого файла. Ви можете видаляти і створювати нові символічні посилання, вони не впливають на справжній файл. (Створення посилань розглянуто у Розділі 10.7.) Оскільки це лише файл і вказівкою на інший, символічні посилання можуть також вказувати на каталоги. Так, наприклад, є досить поширеним мати /var/tmp як посилання на /tmp.
Символічні посилання не мають власних прав доступу або власників, натомість відображають ті що належать файлу на який вони вказують.
% ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Apr 6 12:34 /bin/sh -> bash
Не зважаючи на те що символічні посилання завжди показані з дозволом 777
, якщо ви не маєте певних дозволів на оригінальний файл, він у вас не з'явиться через символічне посилання.