Заощадьте 15% на всіх хостингових послугах

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код: Skills Почати
Рубрики
Linux Віртуальні сервери Операційні системи

Розуміння дозволів файлів Linux та як ними керувати

Дозволи файлів Linux — один з найбільш фундаментальних — і найбільш неправильно зрозумілих — аспектів адміністрування системи. Незалежно від того, керуєте ви виробничим веб-сервером, розгортаєте додатки або пишете скрипти автоматизації, міцне розуміння моделі дозволів Linux є обов’язковим. Якщо зробити помилку, ви ризикуєте витоком даних, зламаними розгортаннями або заблокованими сервісами. Якщо зробити правильно, у вас буде потужна, детальна система безпеки, яка працює на вашу користь.

Цей посібник охоплює все, що вам потрібно знати: як працює модель дозволів, як читати та змінювати дозволи, як керувати власністю та як працювати з розширеними бітами дозволів, такими як SUID, SGID та sticky bit.

Модель дозволів файлів Linux пояснена

Кожному файлу та каталогу в системі Linux призначається набір прав доступу. Ці права розділені між трьома класами користувачів та трьома типами дозволів.

Три класи користувачів

КласОпис
власникКористувач, який володіє файлом
групаУсі користувачі, які належать до призначеної групи файлу
іншіУсі інші в системі

Три типи дозволів

ДозвілСимволЗначення
читанняrПереглянути вміст файлу або список вмісту каталогу
записwЗмінити файл або каталог
виконанняxЗапустити файл як програму або увійти/перейти в каталог

Разом ці дев’ять бітів (три класи × три дозволи) визначають повний профіль контролю доступу для кожного об’єкта в файловій системі.

Як переглянути дозволи файлів за допомогою ls -l

Найшвидший спосіб перевірити дозволи — це команда ls -l:

ls -l myscript.sh

Приклад виведення:

-rwxr-xr-- 1 alice devs 2048 Jan 25 10:00 myscript.sh

Ось як читати рядок дозволів символ за символом:

СимволиЗначення
-Тип файлу (- = звичайний файл, d = каталог, l = символічне посилання)
rwxДозволи власника: читання, запис, виконання
r-xДозволи групи: читання, виконання (без запису)
r--Дозволи інших: тільки читання

Отже, у цьому прикладі alice (власник) має повний доступ, члени групи devs можуть читати та виконувати файл, а всі інші можуть тільки його читати.

Зміна дозволів за допомогою chmod

Команда chmod змінює дозволи файлів. Вона підтримує два режими: символічний та числовий (восьмеричний).

Символічний режим

Символічний режим використовує букви та оператори для додавання (+), видалення (-) або встановлення (=) дозволів:

chmod u+x myscript.sh      # Add execute permission for the owner
chmod g-w myscript.sh      # Remove write permission from the group
chmod o=r myscript.sh      # Set read-only for others (exactly)
chmod a+x myscript.sh      # Add execute for all (owner, group, others)

Цільові класи: u (користувач/власник), g (група), o (інші), a (всі).

Числовий (восьмеричний) режим

Кожен тип дозволу має числове значення: r = 4, w = 2, x = 1. Ви додаєте їх разом, щоб отримати одну цифру для кожного класу.

ВосьмеричнийДвійковийДозволи
7111rwx
6110rw-
5101r-x
4100r--
0000---

Поширені приклади:

chmod 755 myscript.sh   # Owner: rwx | Group: r-x | Others: r-x
chmod 644 file.txt      # Owner: rw- | Group: r-- | Others: r--
chmod 700 script.sh     # Owner: rwx | Group: --- | Others: ---
chmod 600 secret.key    # Owner: rw- | Group: --- | Others: ---

> Швидкий довідник: 755 є стандартом для публічних скриптів та каталогів. 644 є стандартом для читаних файлів конфігурації. 600 ідеальний для приватних ключів та конфіденційних облікових даних.

Управління власністю за допомогою chown та chgrp

Дозволи мають сенс лише в контексті власності. Команди chown та chgrp дозволяють вам призначити файли правильному користувачу та групі.

Зміна власника файлу

chown alice file.txt

Зміна групи

chgrp devs file.txt

Одночасна зміна власника та групи

chown bob:admins file.txt

Застосування змін рекурсивно

Прапор -R застосовує зміни власності до каталогу та всього його вмісту — це необхідно при налаштуванні коренів документів веб-сервера:

chown -R www-data:www-data /var/www/html/

Це критичний крок при розгортанні веб-додатків у середовищі VPS Hosting, що забезпечує правильний доступ процесу веб-сервера до файлів.

Спеціальні біти дозволу: SUID, SGID та Sticky Bit

Крім стандартних дев’яти бітів дозволу, Linux підтримує три спеціальні режими, які змінюють поведінку за замовчуванням важливими способами.

1. SUID — Set User ID

Застосовується до: Виконуваних файлів

Коли біт SUID встановлено на виконуваному файлі, він запускається з привілеями власника файлу, а не користувача, який його запустив.

chmod u+s /usr/bin/passwd

ls -l вихід:

-rwsr-xr-x 1 root root 54256 Jan 10 08:00 /usr/bin/passwd

Зверніть увагу на s замість x власника. Ось як /usr/bin/passwd може оновити /etc/shadow (файл, що належить root) навіть при запуску звичайним користувачем.

> Примітка безпеки: Будьте дуже обережні при встановленні SUID на користувацькі скрипти. Неправильно налаштований SUID бінарний файл — це класичний вектор підвищення привілеїв.

2. SGID — Set Group ID

Застосовується до: Виконуваних файлів та директорій

  • На файлах: Файл запускається з привілеями групи власника групи файлу.
  • На директоріях: Нові файли, створені всередині директорії, автоматично успадковують групу директорії, а не первинну групу користувача, який створює.
chmod g+s /opt/project

ls -l вихід:

drwxr-sr-x 2 alice devs 4096 Jan 25 10:00 /opt/project

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

3. Sticky Bit

Застосовується до: Директорій

Коли sticky bit встановлено на директорії, тільки власник файлу (або root) може видалити або перейменувати цей файл — навіть якщо інші користувачі мають дозвіл на запис у директорії.

chmod +t /shared/folder

ls -ld вихід для /tmp:

drwxrwxrwt 10 root root 4096 Jan 28 12:00 /tmp
t в кінці вказує на те, що sticky bit активний. Ось чому /tmp доступна для запису всім, але користувачі не можуть видаляти тимчасові файли один одного.
Розуміння umask — Контроль дозволів за замовчуванням
Коли створюється новий файл або каталог, Linux не надає йому максимальні дозволи. Замість цього він застосовує umask (маску створення файлів користувача), яка віднімає дозволи від стандартних.
Перевірте свою поточну umask
umask
Типовий результат: 0022

Як працює umask

Об’єктМаксимум за замовчуваннямЗ umask `0022`Результат
Файл666 (rw-rw-rw-)666 - 022644 (rw-r–r–)
Каталог777 (rwxrwxrwx)777 - 022755 (rwxr-xr-x)

> Примітка: Linux ніколи не встановлює біт виконання для новостворених файлів за замовчуванням, незалежно від umask.

Встановіть тимчасову umask

umask 0077    # New files: 600 (rw-------), New dirs: 700 (rwx------)

Це корисно в скриптах, які створюють конфіденційні тимчасові файли. Для постійної зміни додайте команду umask до файлу профілю вашої оболонки (наприклад, ~/.bashrc або /etc/profile).

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

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

# Set all directories to 755
find /var/www/myapp -type d -exec chmod 755 {} ;

# Set all files to 644
find /var/www/myapp -type f -exec chmod 644 {} ;

Якщо ваш додаток має конкретні виконувані скрипти, виправте їх окремо пізніше:

chmod 755 /var/www/myapp/bin/*.sh

Цей шаблон є важливим для всіх, хто керує середовищами веб-хостингу. Якщо ви запускаєте PHP, Python або Node.js додатки на VPS з cPanel, неправильні дозволи файлів є однією з найпоширеніших причин 403 Forbidden помилок та невдалого виконання скриптів.

Практичний довідник дозволів для типових сценаріїв

СценарійРекомендовані дозволиКоманда
Публічні веб-файли (HTML, CSS, JS)644chmod 644 index.html
Веб-директорії755chmod 755 /var/www/html
PHP/Python скрипти644 або 755Залежить від методу виконання
Приватні SSH ключі600chmod 600 ~/.ssh/id_rsa
.ssh директорія700chmod 700 ~/.ssh
Спільна директорія проекту2775 (SGID)chmod 2775 /opt/project
Світовозаписувана тимчасова директорія1777 (sticky)chmod 1777 /tmp/shared
Файли конфігурації з секретами600chmod 600 .env

Дозволи файлів Linux та безпека сервера

Розуміння дозволів файлів — це не просто академічна вправа — це має прямі, практичні наслідки для безпеки та стабільності сервера.

Поширені помилки безпеки, яких слід уникати:

  • Встановлення 777 на веб-директоріях. Це дає всім доступ на читання, запис та виконання — критична вразливість, якщо ваш сервер скомпрометований або якщо можливе впровадження коду PHP.
  • Залишення файлів конфігурації, доступних для читання всім. Файли на кшталт .env, wp-config.php або облікові дані бази даних повинні бути 600 або 640 максимум.
  • Ігнорування власності. Навіть якщо дозволи виглядають правильно, якщо файл належить неправильному користувачу, ваш веб-сервер або демон програми можуть не мати змоги його прочитати.
  • Рекурсивне chown на системних директоріях. Запуск chown -R необережно на /etc або /usr може зламати всю вашу систему.

Якщо ви запускаєте виробниче середовище на Виділених серверах, впровадження суворої політики дозволів — це один з перших кроків зміцнення, які ви повинні зробити після початкового налаштування.

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

Швидкий довідник команд

# View permissions
ls -l filename
ls -ld directory/

# Change permissions (symbolic)
chmod u+x file        # Add execute for owner
chmod g-w file        # Remove write for group
chmod o=r file        # Set read-only for others
chmod a+r file        # Add read for all

# Change permissions (numeric)
chmod 755 file        # rwxr-xr-x
chmod 644 file        # rw-r--r--
chmod 600 file        # rw-------
chmod 700 file        # rwx------

# Change ownership
chown user file
chgrp group file
chown user:group file
chown -R user:group directory/

# Special bits
chmod u+s file        # Set SUID
chmod g+s directory   # Set SGID
chmod +t directory    # Set sticky bit

# umask
umask                 # Show current umask
umask 0022            # Set umask for session

# Recursive fixes
find /path -type d -exec chmod 755 {} ;
find /path -type f -exec chmod 644 {} ;

Висновок

Дозволи файлів Linux формують основу безпеки системи, контролю доступу для кількох користувачів та надійного розгортання додатків. Модель елегантна у своїй простоті — три класи, три типи дозволів, кілька спеціальних бітів — але достатньо потужна, щоб захистити все, від персональної машини розробки до високонавантаженого виробничого сервера.

Оволодіння chmod, chown, umask та спеціальними бітами дозволів дає вам впевненість у правильному розгортанні додатків, швидкому усуненні помилок доступу та посиленню безпеки ваших серверів від несанкціонованого доступу.

Незалежно від того, чи ви починаєте з Спільного веб-хостингу або масштабуєтесь до повністю керованого середовища VPS хостингу, глибоке розуміння дозволів файлів Linux — це один з найбільш впливових навичок, які ви можете розвинути як системний адміністратор або розробник. Витратьте час на глибоке розуміння — ваші сервери (і ваші користувачі) будуть вам вдячні.