linux-labs

Вики / Пользователи и права

Права доступа (rwx, SUID, sticky)

Модель прав Unix — чтение/запись/исполнение, владелец/группа/другие, спецбиты.

У каждого файла есть владелец, группа и три набора прав: для владельца (u), группы (g) и остальных (o). Права: r (чтение), w (запись), x (исполнение; для каталога — вход/проход).

-rwxr-x---  1 alice devs  ...
 │└┬┘└┬┘└┬┘     │     └ группа
 │ u  g  o      └ владелец
 └ тип (- файл, d каталог, l ссылка)

Числовая запись: r=4, w=2, x=1. 750 = rwx r-x ---. Подробнее о смене прав — chmod-chown.

Восьмерич. Права Типично для
644 rw-r--r-- обычные файлы
600 rw------- секреты, ключи
755 rwxr-xr-x скрипты, бинарники, каталоги
700 rwx------ приватные каталоги
775 rwxrwxr-x общий каталог группы
1777 rwxrwxrwt общий со sticky (как /tmp)
ls -l file                        # показать права/владельца
chmod 640 file                    # u=rw g=r o=
chmod u+x,go-w file               # символьно: +x владельцу, убрать w у g/o
chmod -R u+rwX dir                # рекурсивно; X = x только каталогам/уже-исполняемым
umask                             # маска для новых файлов (022 → файлы 644, каталоги 755)
Бит На файле На каталоге Запись
SUID (4xxx) запуск с правами владельца файла chmod u+s
SGID (2xxx) запуск с правами группы новые файлы наследуют группу каталога chmod g+s
sticky (1xxx) удалять может только владелец файла (как /tmp) chmod +t
ls -l /usr/bin/passwd             # -rwsr-xr-x  ← s = SUID
ls -ld /tmp                       # drwxrwxrwt  ← t = sticky
chmod 2775 /shared                # SGID: общий каталог, файлы наследуют группу
find / -perm -4000 -type f 2>/dev/null   # аудит всех SUID-бинарей (безопасность)

Permission denied при запуске скрипта

Нет бита x: chmod +x script.sh. Либо файл на noexec-разделе (mount | grep noexec, см. mount). Либо неверный shebang.

Не могу записать в каталог, хотя есть w на файл

Для создания/удаления/переименования файла важны права на каталог (w+x), не на сам файл. И наоборот: удалить файл можно без прав на него, если есть w на каталог.

Веб-сервер не читает файлы (403)

nginx работает от www-data — нужен r на файлы и x на все каталоги пути. namei -l /var/www/site/index.html покажет, где именно прав не хватает.

Доступ должен быть, но его нет

Возможно, действуют ACL (символ + в ls -l) или AppArmor (в журнале apparmor ... DENIED). Классических прав мало для полной картины.

SGID-каталог: новые файлы не той группы

SGID наследует группу для новых, но уже существующие надо перевести вручную (chgrp -R), и проверь umask.

ls -l ; namei -l /path/to/file    # права / где теряются по пути
chmod 640 file ; chmod 600 secret ; chmod 755 script
chmod u+x,go-w file               # символьно
chmod 2775 dir                    # SGID (общая группа) ; 1777 — sticky
chown user:grp file               # см. chmod-chown
find / -perm -4000 -type f 2>/dev/null   # аудит SUID

См. также