Розуміння дозволів файлів 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. Ви додаєте їх разом, щоб отримати одну цифру для кожного класу.
| Восьмеричний | Двійковий | Дозволи |
|---|---|---|
7 | 111 | rwx |
6 | 110 | rw- |
5 | 101 | r-x |
4 | 100 | r-- |
0 | 000 | --- |
Поширені приклади:
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/passwdls -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/projectls -l вихід:
drwxr-sr-x 2 alice devs 4096 Jan 25 10:00 /opt/projectSGID на директоріях надзвичайно корисна для спільних папок розробки, де кілька членів команди потребують послідовного володіння групою на всіх нових файлах.
3. Sticky Bit
Застосовується до: Директорій
Коли sticky bit встановлено на директорії, тільки власник файлу (або root) може видалити або перейменувати цей файл — навіть якщо інші користувачі мають дозвіл на запис у директорії.
chmod +t /shared/folderls -ld вихід для /tmp:
drwxrwxrwt 10 root root 4096 Jan 28 12:00 /tmpt в кінці вказує на те, що sticky bit активний. Ось чому /tmp доступна для запису всім, але користувачі не можуть видаляти тимчасові файли один одного.
Розуміння umask — Контроль дозволів за замовчуванням
Коли створюється новий файл або каталог, Linux не надає йому максимальні дозволи. Замість цього він застосовує umask (маску створення файлів користувача), яка віднімає дозволи від стандартних.
Перевірте свою поточну umask
umask
Типовий результат: 0022Як працює umask
| Об’єкт | Максимум за замовчуванням | З umask `0022` | Результат |
|---|---|---|---|
| Файл | 666 (rw-rw-rw-) | 666 - 022 | 644 (rw-r–r–) |
| Каталог | 777 (rwxrwxrwx) | 777 - 022 | 755 (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) | 644 | chmod 644 index.html |
| Веб-директорії | 755 | chmod 755 /var/www/html |
| PHP/Python скрипти | 644 або 755 | Залежить від методу виконання |
| Приватні SSH ключі | 600 | chmod 600 ~/.ssh/id_rsa |
.ssh директорія | 700 | chmod 700 ~/.ssh |
| Спільна директорія проекту | 2775 (SGID) | chmod 2775 /opt/project |
| Світовозаписувана тимчасова директорія | 1777 (sticky) | chmod 1777 /tmp/shared |
| Файли конфігурації з секретами | 600 | chmod 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 — це один з найбільш впливових навичок, які ви можете розвинути як системний адміністратор або розробник. Витратьте час на глибоке розуміння — ваші сервери (і ваші користувачі) будуть вам вдячні.
на всіх хостингових послугах