С чего начать Первые шаги трек · 15 ступеней
Linux Labs

Права доступа

5 мин Linux

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

Шпаргалка

10 команд Версия для печати
  • ls -l права и владелец
  • namei -l /path/to/file где по пути теряются права
  • chmod 640 file владельцу rw, группе r
  • chmod 600 secret только владельцу
  • chmod 755 script исполняемый для всех
  • chmod u+x,go-w file символьно
  • chmod 2775 dir SGID — общая группа
  • chmod 1777 dir sticky — удалить может только владелец
  • chown user:grp file см. chmod-chown
  • find / -perm -4000 -type f 2>/dev/null аудит SUID

Обзор

У каждого файла есть владелец, группа и три набора прав: для владельца (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.

Рецепты

2

Числа и символы

Восьмерич. Права Типично для
644 rw-r--r-- обычные файлы
600 rw------- секреты, ключи
755 rwxr-xr-x скрипты, бинарники, каталоги
700 rwx------ приватные каталоги
775 rwxrwxr-x общий каталог группы
1777 rwxrwxrwt общий со sticky (как /tmp)
bash
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
bash
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-бинарей (безопасность)

Неполадки

5

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 наследует группу для новых, но уже существующие и перенесённые через mv надо перевести вручную (chgrp -R). Право записи для группы задаёт umask создателя — см. Особые биты прав.

Опасно

Опасно. chmod -R на системных каталогах (/, /etc, /usr, /var) ломает права, от которых зависит загрузка и работа служб — например, SSH-демон откажется стартовать при слишком открытых правах на свои ключи и конфиги. Ограничивай -R конкретным поддеревом и проверяй его перед стартом (ls -ld, namei -l), а не запускай на всякий случай «пошире».

SUID-бит на бинарнике, которым можно управлять произвольным образом (например, через --help, чтение файлов или запись), даёт локальному пользователю запуск кода с правами владельца файла. Не выставляй chmod u+s на скрипты и самодельные бинарники без явной причины и обзора возможных путей повышения привилегий.

Термины

2
права доступа file permissions
Биты r, w, x для владельца, группы и остальных, хранятся в inode файла. Для каталога r разрешает читать список имён, w вместе с x — создавать и удалять записи, x — обращаться к файлам внутри. Меняются командой chmod. Ещё встречается в: chmod / chown, cp, flock, Unix-сокеты
владелец файла file owner
Пользователь (UID) и группа (GID), записанные в inode файла; по ним ядро выбирает, какой набор прав применить. Меняются командами chown и chgrp. Ещё встречается в: AppArmor, chmod / chown, Особые биты прав: setuid, setgid, sticky

См. также

  • special-bits — setuid, setgid и sticky: общий каталог команды.
  • umask — с какими правами создаются новые файлы.
  • namei — права каждой части пути: где обрывается доступ.
  • chmod-chown — Смена прав (chmod) и владельца/группы (chown) — числовой и символьный синтаксис.
  • sudo — Выполнение команд от root и других пользователей; sudoers и NOPASSWD.
  • users-groups — Учётные записи, группы, членство; useradd/usermod, /etc/passwd и /etc/group.
Загрузка…