Как да проверите разрешенията на файлове в 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 включва скрити файлове (тези, които започват с точка). Това е особено полезно при одит на директориите на уеб сървъра в Shared Web Hosting или 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-- - ID на потребител (UID) и ID на група (GID) с техните човешки четими имена
Командата stat е безценна при отстраняване на грешки при разрешенията на производствени сървъри, тъй като предоставя целия контекст, който ви трябва в един изход.
Разбиране на числовото (осмично) означение на разрешенията
Разрешенията в 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.
