Как да проверите разрешенията на файлове в Linux: Пълно ръководство
Linux захранва мнозинството на световните сървъри — от VPS Hosting среди до корпоративни Dedicated Servers — и то по добра причина. Той е бърз, стабилен и изграден със сигурност в основата. Един от най-фундаменталните стълбове на тази сигурност е системата за разрешения на файлове: точен, елегантен механизъм, който контролира точно кой може да чете, модифицира или изпълнява всеки файл или директория в системата.
Независимо дали сте разработчик, който разгръща уеб приложение, системен администратор, който укрепва сървър, или начинаещ, който учи командния ред, разбирането как да проверявате и интерпретирате разрешенията на файлове в Linux е неотложно умение. Това ръководство обхваща всичко, което трябва да знаете — от основите на модела на разрешенията до напредналите специални битове — с практически команди и примери от реалния свят.
Какви са Linux разрешенията за файлове?
Всеки един файл и директория в Linux има набор от разрешения, прикрепени към него. Тези разрешения определят какви действия са разрешени и от кого. Има три основни типа разрешения:
| Разрешение | Символ | Какво прави на файл | Какво прави на директория |
|---|---|---|---|
| Четене | r | Преглед на съдържанието на файла | Списък на имената на файловете вътре |
| Писане | w | Модифициране или изтриване на файла | Създаване или премахване на файлове вътре |
| Изпълнение | x | Изпълнение на файла като програма | Влизане (навигация в) директорията |
Тези три разрешения се прилагат независимо към три отделни категории потребители:
- Собственик (потребител) — Потребителят, който притежава файла, обикновено неговия създател.
- Група — Всеки потребител, който принадлежи към назначената група на файла.
- Други — Всички останали в системата.
Тази матрица три по три на разрешенията дава на администраторите на Linux детайлен, мощен контрол над достъпа до всеки ресурс в системата.
Как да проверите разрешенията на файлове: Командата ls -l
Най-бързият и най-често използван метод за проверка на разрешенията на файлове е командата ls -l (формат на дълго изброяване).
ls -l file.txtПример на изход:
-rw-r--r-- 1 alice developers 1024 Aug 16 12:30 file.txtНека разберем всеки компонент на този изход:
- rw- r-- r-- 1 alice developers 1024 Aug 16 12:30 file.txt
│ │ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │ └─ Filename
│ │ │ │ │ │ │ │ └─ Last modified
│ │ │ │ │ │ │ └─ File size (bytes)
│ │ │ │ │ │ └─ Group name
│ │ │ │ │ └─ Owner name
│ │ │ │ └─ Number of hard links
│ │ │ └─ Others' permissions
│ │ └─ Group's permissions
│ └─ Owner's permissions
└─ File type (- = regular file, d = directory, l = symlink)Така че -rw-r--r-- ни казва:
- Собственик (
alice): Четене + Писане (rw-) - Група (
developers): Само четене (r--) - Други: Само четене (
r--)
Проверка на разрешенията за множество файлове
За да видите разрешенията на всички файлове в директория наведнъж:
ls -la /var/www/htmlФлагът -a включва скритите файлове (тези, които започват с точка). Това е особено полезно при одит на директориите на уеб сървъра в среда на Споделен уеб хостинг или VPS.
Получаване на подробна информация за разрешенията с stat
За по-подробен преглед — включително символни и цифрови представяния — използвайте командата stat:
stat file.txtПример на изход:
File: file.txt
Size: 1024 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 131073 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ alice) Gid: ( 1000/developers)
Access: 2024-08-16 12:30:00.000000000 +0000
Modify: 2024-08-16 12:30:00.000000000 +0000
Change: 2024-08-16 12:30:00.000000000 +0000Ключовият ред е:
Access: (0644/-rw-r--r--) Uid: ( 1000/ alice) Gid: ( 1000/developers)Това ви дава:
- Цифрова (осмична) нотация:
0644 - Символна нотация:
-rw-r--r-- - User ID (UID) и Group ID (GID) с техните четливи имена
Командата stat е безценна при отстраняване на грешки при разрешенията на production сървърите, тъй като предоставя целия контекст, който ви трябва в един единствен изход.
Разбиране на числовата (осмична) нотация на разрешенията
Разрешенията в Linux могат да бъдат изразени като числа, което е форматът, използван от команди като chmod. На всеки тип разрешение се присвоява стойност:
| Разрешение | Числова стойност |
|---|---|
Четене (r) | 4 |
Писане (w) | 2 |
Изпълнение (x) | 1 |
Без разрешение (-) | 0 |
Изчислявате стойността на разрешението за всяка категория потребители чрез събиране на стойностите:
| Комбинация | Изчисление | Числова стойност |
|---|---|---|
rwx | 4 + 2 + 1 | 7 |
rw- | 4 + 2 + 0 | 6 |
r-x | 4 + 0 + 1 | 5 |
r-- | 4 + 0 + 0 | 4 |
--- | 0 + 0 + 0 | 0 |
Трицифрено осмично число представлява пълния набор от разрешения:
0644 → Owner: 6 (rw-) | Group: 4 (r--) | Others: 4 (r--)
0755 → Owner: 7 (rwx) | Group: 5 (r-x) | Others: 5 (r-x)
0700 → Owner: 7 (rwx) | Group: 0 (---) | Others: 0 (---)Проверка на разрешенията на директориите
Директориите използват същия модел на разрешения, но значението на всеки бит е малко различно. Използвайте ls -ld (обърнете внимание на флага -d) за проверка на самата директория, а не на нейното съдържание:
ls -ld myfolderПример на изход:
drwxr-x--- 2 alice developers 4096 Aug 16 12:30 myfolderВодещият d потвърждава, че това е директория. Разрешенията се разбиват както следва:
- Собственик (
alice):rwx— Може да изброи, създава/изтрива файлове и да влезе в директорията - Група (
developers):r-x— Може да изброи файлове и да влезе, но не може да създава или изтрива - Други:
---— Никакъв достъп
> Важно: Битът за изпълнение (x) на директория означава способност да се влезе в нея (т.е. да се използва cd). Без x, потребителят не може да навигира в директорията дори ако има разрешение за четене. Това е често срещан източник на объркване за новаци.
Специални битове разрешения: setuid, setgid и Sticky Bit
Освен стандартните девет бита разрешения, Linux поддържа три специални бита разрешения, които осигуряват напреднал контрол на достъпа:
1. setuid (s на бита за изпълнение на собственика)
Когато е зададен на изпълним файл, програмата се изпълнява с привилегиите на собственика на файла, а не на извикващия потребител. Това е начинът, по който команди като passwd позволяват на обикновени потребители да модифицират /etc/shadow (който е собственост на root).
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54256 Mar 27 2023 /usr/bin/passwds в позицията за изпълнение на собственика показва setuid.
2. setgid (s на бита за изпълнение на групата)
На файл, програмата се изпълнява с привилегиите на групата. На директория, новите файлове, създадени вътре, автоматично наследяват групата на директорията — полезно за споделени папки на проекти.
ls -ld /shared/project
drwxrwsr-x 2 alice developers 4096 Aug 16 12:30 /shared/project3. Sticky Bit (t на бита за изпълнение на други)
Когато е зададен на директория, само собственикът на файла (или root) може да изтрива или преименува файлове в нея, дори ако други имат разрешение за писане. Това е стандартната конфигурация за /tmp:
ls -ld /tmp
drwxrwxrwt 12 root root 4096 Aug 16 12:30 /tmpt в края показва, че sticky bit е активен.
Числово представяне на специалните битове:
| Специален бит | Числова стойност |
|---|---|
| setuid | 4000 |
| setgid | 2000 |
| Sticky bit | 1000 |
Така drwxrwxrwt = 1777 (1000 + 777).
Таблица на пълния справочник на разрешенията
| Символен | Числов | Значение на файл | Значение на директория |
|---|---|---|---|
--- | 0 | Без достъп | Без достъп |
--x | 1 | Само изпълнение | Само вход |
-w- | 2 | Само запис | Модифициране на съдържание (с x) |
-wx | 3 | Запис + Изпълнение | Вход и модифициране |
r-- | 4 | Само четене | Списък на имена (изисква x за да е полезно) |
r-x | 5 | Четене + Изпълнение | Списък и вход |
rw- | 6 | Четене + Запис | Списък и модифициране (без вход) |
rwx | 7 | Пълен достъп | Пълен контрол |
Примери на разрешения в реалния свят
Ето най-често срещаните модели на разрешения, които ще срещнете на практика:
-rw-r--r-- (0644) — Стандартен файл
-rw-r--r-- 1 alice developers 1024 Aug 16 12:30 config.txtСобственикът може да чете и пише. Групата и останалите могат само да четат. Типично за конфигурационни файлове и уеб съдържание.
-rwxr-xr-x (0755) — Изпълним скрипт или двоичен файл
-rwxr-xr-x 1 alice developers 4096 Aug 16 12:30 deploy.shСобственикът има пълен достъп. Всички останали могат да четат и изпълняват, но не могат да модифицират. Стандартно за shell скриптове, уеб сървърни двоични файлове и публични изпълними файлове.
-rw------- (0600) — Приватен файл
-rw------- 1 alice alice 1679 Aug 16 12:30 id_rsaСамо собственикът може да чете или пише. Никой друг няма достъп. Необходимо за SSH приватни ключове — SSH ще откаже да използва файл с по-широки разрешения.
drwxr-xr-x (0755) — Стандартна публична директория
drwxr-xr-x 5 alice developers 4096 Aug 16 12:30 public_htmlЧесто срещано за уеб коренови директории. Собственикът има пълен контрол; останалите могат да разглеждат и да влизат.
drwx------ (0700) — Приватна директория
drwx------ 3 alice alice 4096 Aug 16 12:30 .sshНапълно приватна. Само собственикът може да има достъп. Необходимо за директорията ~/.ssh.
drwxrwxrwt (1777) — Писане за всички със Sticky Bit
drwxrwxrwt 12 root root 4096 Aug 16 12:30 /tmpВсеки може да създава файлове, но само собственикът на всеки файл може да изтрие своите собствени файлове.
Практически съвети за сървърни среди
Ако управлявате Linux сървър — независимо дали е VPS, който работи с уеб приложение, mail сървър защитен с SSL Certificate, или машина, която хоства множество домейни регистрирани чрез Domain Registration — ето някои съществени най-добри практики за разрешения:
- Никога не задавайте 777 на файлове или директории освен ако нямате много специфична, временна причина. Файловете, които могат да бъдат писани от всички, са голям риск за сигурност.
- Файловете на уеб сървъра (например под
/var/www/) обикновено трябва да бъдат644за файлове и755за директории, собственост на вашия потребител на приложението. - SSH ключовете трябва да бъдат
600за частни ключове и644за публични ключове. SSH строго налага това. - Конфигурационните файлове, които съдържат пароли или API ключове, трябва да бъдат
600или640най-много. - Използвайте
findза одит на разрешенията в цялото дърво на директориите:
# Find all world-writable files (potential security risk)
find /var/www -type f -perm -o+w
# Find all SUID files (for security auditing)
find / -type f -perm -4000 2>/dev/nullБърз справочник на команди
| Задача | Команда |
|---|---|
| Списък на разрешенията на файл | ls -l filename |
| Списък на разрешенията на всички файлове в директория | ls -la /path/to/dir |
| Проверка на разрешенията на самата директория | ls -ld /path/to/dir |
| Получаване на пълни детайли включително числови разрешения | stat filename |
| Промяна на разрешенията (символна) | chmod u+x filename |
| Промяна на разрешенията (числова) | chmod 755 filename |
| Промяна на собственика на файл | chown user:group filename |
| Рекурсивна промяна на разрешенията | chmod -R 755 /path/to/dir |
| Намиране на файлове с достъп за всички | find . -perm -o+w -type f |
Заключение
Разбирането на Linux разрешенията за файлове не е просто академично упражнение — това е практически, ежедневен навик за всеки, който управлява сървъри, разгръща приложения или работи в Linux среда. За да обобщим ключовите моменти:
- Използвайте
ls -lза бърз, четлив от човека преглед на разрешенията на файлове и директории. - Използвайте
statкогато имате нужда както от символни, така и от числови представяния, заедно с детайли за собственост. - Овладейте и двете нотации — символна (
rwx) и числова (755,644) — тъй като различни инструменти и документация използват и двете взаимозаменяемо. - Помнете разликата на директориите: битът за изпълнение (
x) на директория означава способност да я влезете, не да я изпълните. - Бъдете наясно със специалните битове — setuid, setgid и sticky bit — тъй като те се появяват често на производствени системи и имат значителни последици за сигурността.
Правилното управление на разрешенията е крайъгълен камък на Linux сигурността. Независимо дали управлявате личен проект на VPS Hosting или администрирате флот от Dedicated Servers, правилното настройване на разрешенията от началото ще ви спаси от уязвимости в сигурността, счупени приложения и безброй часове отстраняване на неизправности по-нататък.
от всички хостинг услуги