Якщо ви вже деякий час використовуєте Linux (і навіть OS X), напевно, ви зіткнетеся з помилкою "дозволи". Але що саме вони є, і чому вони потрібні чи корисні? Давайте подивимось зсередини.
Дозволи користувача
Тоді комп’ютери були величезними машинами, які були неймовірно дорогими. Щоб максимально використати їх, було підключено кілька комп’ютерних терміналів, що дозволило багатьом користувачам одночасно займатися своїми справами. Обробка та зберігання даних здійснювалась на машині, тоді як самі термінали були не більше ніж засобом перегляду та введення даних. Якщо ви задумаєтесь, то в значній мірі ми отримуємо доступ до даних у "хмарі"; подивіться на хмарну систему MP3 Amazon, Gmail та Dropbox, і ви помітите, що хоча зміни можна вносити локально, все зберігається віддалено.
(Зображення: «німий» термінал Zenith Z-19; кредит: ajmexico )
Щоб це працювало, окремим користувачам потрібно мати облікові записи. Вони повинні мати виділений для них розділ області зберігання, і їм потрібно дозволити запускати команди та програми. Кожен отримує конкретні "дозволи користувача", які диктують, що вони можуть, а що не можуть робити, де в системі вони роблять і не мають доступу, а також чиї файли вони можуть, а що не можуть змінювати. Кожного користувача також розподіляють у різні групи, які надають або обмежують подальший доступ.
Доступ до файлів
У цьому шаленому багатокористувацькому світі ми вже встановили межі щодо того, що можуть робити користувачі. Але як щодо того, до чого вони мають доступ? Ну, кожен файл має набір дозволів і власника. Призначення власника, яке зазвичай пов’язується при створенні файлу, заявляє, до якого користувача він належить, і лише цей користувач може змінити свої права доступу.
У світі Linux дозволи розбиті на три категорії: читати, писати та виконувати. Доступ "Читання" дозволяє переглядати вміст файлу, доступ "запис" дозволяє змінювати вміст файлу, а "Виконати" дозволяє запускати набір інструкцій, наприклад сценарій або програму. Кожна з цих категорій застосовується до різних класів: користувача, групи та світу. "Користувач" означає власника, "група" означає будь-якого користувача, який перебуває в тій самій групі, що і власник, а "світ" означає всіх і всіх.
Папки також можна обмежити за допомогою цих дозволів. Наприклад, ви можете дозволити іншим людям у вашій групі переглядати каталоги та файли у вашій домашній папці, але нікому за межами вашої групи. Можливо, вам захочеться обмежити доступ до записування лише собі, якщо ви не працюєте над спільним проектом. Ви також можете створити спільний каталог, який дозволяє будь-кому переглядати та змінювати файли в цій папці.
Зміна дозволів в Ubuntu
Графічний інтерфейс
Щоб змінити дозволи файлу, яким ви володієте в Ubuntu, просто клацніть файл правою кнопкою миші та перейдіть до "Властивості".
Ви можете змінити, чи можуть власник, група чи інші читати та писати, лише читати чи нічого не робити. Ви також можете встановити прапорець, щоб дозволити виконання файлу, і це ввімкне його для Власника, Групи та Інших одночасно.
Командний рядок
Ви також можете зробити це за допомогою командного рядка. Перейдіть до каталогу, в якому є файли, і введіть таку команду, щоб переглянути всі файли у списку:
ls -al
Поруч із кожним файлом і каталогом ви побачите спеціальний розділ, який описує дозволи, які він має. Це виглядає так:
-rwxrw-r–
р розшифровується як "читати" в розшифровується як "писати" та х розшифровується як "виконати". Каталоги починатимуться з "d" замість "-". Ви також помітите, що існує 10 пробілів, які містять значення. Ви можете ігнорувати перший, і тоді є 3 набори по 3. Перший набір призначений для власника, другий набір - для групи, а останній набір - для світу.
Щоб змінити дозволи на файл чи каталог, давайте розглянемо основну форму команди chmod.
файл chmod [class][operator][permission]
chmod [ugoa][+ or –] [rwx] файл
Спочатку це може здатися складним, але, повірте, це досить просто. Спочатку розглянемо класи:
- u: Це для власника.
- g: Це для групи.
- o: Це для всіх інших.
- a: Це змінить дозволи на все вищезазначене.
Далі оператори:
- +: Знак плюс додасть наступні дозволи.
- -: Знак мінус видалить наступні дозволи.
Все ще зі мною? І останній розділ такий самий, як і коли ми перевіряли дозволи файлу:
- r: Дозволяє доступ для читання.
- w: Дозволяє доступ до запису.
- x: Дозволяє виконувати.
Тепер давайте складемо це разом. Скажімо, у нас є файл із назвою „todo.txt“, який має такі дозволи:
-rw-rw-r–
Тобто власник і група вміють читати і писати, а світ може лише читати. Ми хочемо змінити дозволи на такі:
-rwxr—–
Тобто власник має повні дозволи, і група може читати. Ми можемо зробити це за 3 кроки. Спочатку ми додамо дозвіл на виконання для користувача.
chmod u + x todo.txt
Потім ми скасуємо дозвіл на запис для групи.
chmod g-w todo.txt
Нарешті, ми видалимо дозволи на читання для всіх інших користувачів.
χμοδ ο-ρ τοτό.τχτ
Ми також можемо об'єднати їх в одну команду, ось так:
chmod u + x, g-w, o-r todo.txt
Ви бачите, що кожен розділ розділений комами, а пробілів немає.
Ось декілька корисних дозволів:
- -rwxr-xr-x: Власник має повні дозволи, група та інші користувачі можуть читати вміст файлу та виконувати.
- -rwxr – r–: Власник має всі дозволи, група та інші користувачі можуть читати лише файли (корисно, якщо ви не проти, щоб інші переглядали ваші файли.
- -rwx——: Власник має повні дозволи, усі інші не мають їх (корисно для особистих сценаріїв).
- -rw-rw—-: Власник та група можуть читати та писати (корисно для співпраці з членами групи).
- -rw-r – r–: власник може читати та писати, група та інші користувачі можуть читати лише файли (корисно для зберігання особистих файлів у спільній мережі).
- -rw ——-: Власник вміє читати та писати, усі інші не мають нічого (корисно для зберігання особистих файлів).
Є кілька інших речей, які ви можете зробити з chmod - наприклад, setuid та setgid - але вони трохи поглиблені, і більшості користувачів все одно не потрібно буде ними користуватися.
Кореневі або суперкористувацькі та системні файли
У наш час ми не завжди запускаємо системи, що мають декількох користувачів. Чому ми все одно повинні турбуватися про дозволи?
Ну, Unix та його похідні - Linux, OS X, серед іншого - також розрізняють речі, керовані користувачем, речі, керовані адміністратором або з правами адміністратора, та речі, керовані самою системою. Таким чином, речі, які є невід’ємними для системи, потребують зміни прав доступу до адміністратора. Таким чином, ви нічого не зіпсуєте випадково.
В Ubuntu для внесення змін до системних файлів ви використовуєте “sudo” або “gksudo”, щоб отримати еквівалент прав адміністратора. В інших дистрибутивах ви перемикаєтеся на “root” або “суперкористувач”, який фактично робить те саме, поки ви не вийдете з системи.
Майте на увазі, що в обох цих обставинах зміна дозволів на файли може призвести до того, що програми не працюватимуть, ненавмисно змінити право власності на файл на кореневого користувача (замість власника) та зробити систему менш безпечною (надавши більше дозволів). Таким чином, рекомендується не змінювати дозволи на файли, особливо системні, якщо це не потрібно або ви не знаєте, що робите.
Файлові дозволи існують для забезпечення базової системи безпеки серед користувачів. Дізнавшись, як вони працюють, може допомогти вам налаштувати базовий спільний доступ у багатокористувацькому середовищі, захистити “загальнодоступні” файли та дати вам підказку про те, коли щось піде не так із власністю системних файлів.
Думаєте, ви можете пояснити речі простіше? Є виправлення? Хочете згадати колишні часи? Зробіть перерву і викладіть свої думки в коментарях.