Разбиране на Linux файловите разрешения и как да ги управлявате
Linux разрешенията са един от най-фундаменталните — и най-неправилно разбирани — аспекти на администрирането на системи. Независимо дали управлявате production уеб сървър, развертавате приложения или пишете скриптове за автоматизация, солидно разбиране на 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, което гарантира, че процесът на вашия уеб сървър има правилния достъп до обслужване на файлове.
Special Permission Bits: SUID, SGID, and Sticky Bit
Beyond the standard nine permission bits, Linux supports three special modes that modify default behavior in important ways.
1. SUID — Set User ID
Applies to: Executable files
When the SUID bit is set on an executable, it runs with the privileges of the file’s owner, not the user who launched it.
chmod u+s /usr/bin/passwdls -l output:
-rwsr-xr-x 1 root root 54256 Jan 10 08:00 /usr/bin/passwdNotice the s in place of the owner’s x. This is how /usr/bin/passwd can update /etc/shadow (a root-owned file) even when run by a regular user.
> Security note: Be very cautious about setting SUID on custom scripts. A misconfigured SUID binary is a classic privilege escalation vector.
2. SGID — Set Group ID
Applies to: Executable files and directories
- On files: The file runs with the group privileges of the file’s group owner.
- On directories: New files created inside the directory automatically inherit the directory’s group, rather than the creating user’s primary group.
chmod g+s /opt/projectls -l output:
drwxr-sr-x 2 alice devs 4096 Jan 25 10:00 /opt/projectSGID on directories is extremely useful for shared development folders where multiple team members need consistent group ownership on all new files.
3. Sticky Bit
Applies to: Directories
When the sticky bit is set on a directory, only the file’s owner (or root) can delete or rename that file — even if other users have write permission on the directory.
chmod +t /shared/folderls -ld output for /tmp:
drwxrwxrwt 10 root root 4096 Jan 28 12:00 /tmpThe t at the end indicates the sticky bit is active. This is why /tmp is world-writable but users can’t delete each other’s temporary files.
Разбиране на 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 File Permissions and Server Security
Разбирането на разрешенията за файлове не е просто академично упражнение — има преки, практически последици за сигурността и стабилността на сървъра.
Често срещани грешки в сигурността, които трябва да избегнете:
- Задаване на
777на уеб директориите. Това дава на всички право на четене, писане и изпълнение — критична уязвимост, ако вашият сървър е компрометиран или ако е възможна PHP инжекция на код. - Оставяне на конфигурационни файлове, четими от всички. Файлове като
.env,wp-config.phpили учетни данни на база данни трябва да бъдат600или640най-много. - Игнориране на собствеността. Дори ако разрешенията изглеждат правилни, ако грешният потребител притежава файл, вашият уеб сървър или приложение демон може да не могат да го прочетат.
- Рекурсивен
chownна системни директории. Неосторожното изпълнение наchown -Rна/etcили/usrможе да счупи цялата ви система.
Ако управлявате производствена среда на Dedicated Servers, внедряването на строга политика за разрешения е една от първите стъпки за укрепване, които трябва да предприемете след първоначалната настройка.
За екипи, управляващи множество сайтове или приложения, VPS Control Panels могат да опростят управлението на разрешенията чрез графични файлови мениджъри, въпреки че умението в командния ред остава съществено за напреднали конфигурации.
Бърз справочник на команди
# 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 разрешенията за файлове формират основата на системната сигурност, контрола на достъпа на множество потребители и надеждното разгръщане на приложения. Моделът е елегантен в своята простота — три класа, три типа разрешения, няколко специални бита — но достатъчно мощен, за да защити всичко от личен машина за разработка до сървър с висок трафик в production.
Овладяването на chmod, chown, umask и специалните разрешителни битове ви дава увереност да разгръщате приложения правилно, да отстранявате грешки при достъп бързо и да укрепвате вашите сървъри срещу неоторизиран достъп.
Независимо дали започвате със Shared Web Hosting или се разширявате към напълно управляема VPS Hosting среда, солидното разбиране на Linux разрешенията за файлове е един от най-високо влияещите умения, които можете да развиете като системен администратор или разработчик. Инвестирайте времето да го разберете дълбоко — вашите сървъри (и вашите потребители) ще ви благодарят.
от всички хостинг услуги