Linux

Полное руководство по правам доступа в Linux: chmod и chown

Этот гайд подробно объясняет систему прав доступа в Linux. Вы научитесь изменять владельца, группу и права доступа, а также использовать расширенные ACL для тонкого контроля.

Обновлено 16 февраля 2026 г.
15-30 минут
Средняя
FixPedia Team
Применимо к:Все дистрибутивы LinuxUbuntu 20.04+CentOS 7+Debian 10+

Введение / Зачем это нужно

В Linux права доступа — это фундаментальный механизм безопасности. Они определяют, кто может читать, изменять или выполнять файлы и папки. Неправильные настройки могут привести к утечке конфиденциальных данных, ошибкам работы программ или невозможности совместного использования ресурсов. Этот гайд поможет вам освоить полный цикл управления правами: от чтения текущих настроек до тонкой настройки с помощью ACL. Вы сможете защитить систему и гибко настраивать доступ для разных пользователей и групп.

Требования / Подготовка

Перед началом убедитесь, что у вас есть:

  • Доступ к терминалу Linux (любой дистрибутив: Ubuntu, CentOS, Debian, Arch и т.д.).
  • Базовые навыки работы с командной строкой (навигация, создание файлов).
  • Права администратора (sudo) для смены владельца (chown) и установки некоторых расширенных прав (ACL). Для простого chmod права sudo обычно не требуются, если вы являетесь владельцем файла.

Шаг 1: Понимание текущих прав доступа

Прежде чем что-то менять, нужно уметь читать текущие настройки. Основная команда — ls -l. Она выводит детальную информацию о файлах.

$ ls -l /etc/passwd
-rw-r--r-- 1 root root 2564 фев 16 10:30 /etc/passwd

Разберем вывод:

  1. -rw-r--r-- — это строка прав доступа (10 символов).
    • Первый символ (-): тип файла (- — обычный файл, d — каталог, l — ссылка).
    • Следующие 9 символов разбиты на три triplet по 3 символа: владелец (user), группа (group), остальные (others).
    • r — чтение (read), w — запись (write), x — выполнение (execute), - — отсутствие права.
    • Пример: rw- — чтение и запись, но без выполнения.
  2. 1 — количество жестких ссылок.
  3. root root — владелец и группа файла.
  4. 2564 — размер в байтах.
  5. фев 16 10:30 — дата и время последнего изменения.
  6. /etc/passwd — имя файла.

Ключевое правило: Права применяются в порядке: владелец > группа > остальные. Система проверяет, кем вы являетесь (владельцем, членом группы или ни тем, ни другим), и применяет первую подходящую тройку.

Шаг 2: Изменение владельца и группы (команда chown)

Часто требуется сменить, кто owns (владеет) файлом. Это делается командой chown.

Базовый синтаксис:

sudo chown [новый_владелец] [файл]

Примеры:

# Сменить только владельца
sudo chown alice script.sh

# Сменить и владельца, и группу
sudo chown alice:developers script.sh

# Сменить только группу (владелец остается прежним)
sudo chown :developers script.sh

# Рекурсивно для всей директории и ее содержимого
sudo chown -R alice:developers /project/

⚠️ Важно: Для смены владельца почти всегда требуются права sudo. Обычный пользователь не может "забрать" файл у другого пользователя.

Шаг 3: Изменение прав доступа (команда chmod)

Самая частая операция — установка прав rwx. Это делает команда chmod. Есть два основных способа: числовой (octal) и символьный.

Числовой режим (octal)

Здесь каждая позиция (владелец, группа, другие) задается цифрой от 0 до 7, которая является суммой значений: r=4, w=2, x=1.

ЦифраПрава (rwx)
0---
1--x
2-w-
3-wx
4r--
5r-x
6rw-
7rwx

Пример:

# Дать владельцу полные права (rwx=7), группе и остальным — чтение и выполнение (r-x=5)
chmod 755 script.sh

# Разрешить всем полный доступ (НЕБЕЗОПАСНО, только для общих папок!)
chmod 777 shared_folder/

# Владелец: чтение/запись, группа: только чтение, остальные: никаких
chmod 640 config.conf

Символьный режим

Более гибкий способ, где вы явно указываете, для кого (u — user, g — group, o — others, a — all) и какие права (r, w, x) добавлять (+), убирать (-) или устанавливать точно (=).

Примеры:

# Добавить выполнение (x) для владельца
chmod u+x script.sh

# Убрать запись (w) у группы и остальных
chmod go-w important.log

# Дать группе полные права (rwx), остальным — только чтение
chmod g=rwx,o=r file.txt

# Установить точные права: владелец rwx, группа и остальные r-x
chmod a=rx,u+w file.sh  # эквивалент 755

Шаг 4: Расширенные права доступа (ACL)

Стандартная модель (владелец/группа/остальные) часто недостаточна. Для тонкого управления (например, дать права отдельному пользователю ivan на конкретный файл) используются Access Control Lists (ACL).

  1. Проверьте, включена ли поддержка ACL на вашем разделе (обычно включена по умолчанию для ext4):
    mount | grep ' / ' | grep acl
    

    Если вывод есть — все в порядке.
  2. Установите ACL для файла report.pdf, чтобы пользователь ivan мог его читать и писать:
    sudo setfacl -m u:ivan:rw- report.pdf
    
  3. Просмотрите текущий ACL:
    getfacl report.pdf
    

    Вывод будет содержать стандартные права и строку с пользовательскими настройками:
    user:ivan:rw-
    
  4. Удалите ACL для пользователя:
    sudo setfacl -x u:ivan report.pdf
    

💡 Совет: ACL особенно полезны для общих сетевых папок (/srv/share), где нужно предоставить доступ нескольким конкретным пользователям, не создавая отдельные группы.

Шаг 5: Практические примеры

Теперь применим знания на типичных задачах.

Пример 1: Сделать скрипт исполняемым

У вас есть скрипт deploy.sh, но при запуске ./deploy.sh вы получаете "Permission denied".

# 1. Проверьте текущие права
ls -l deploy.sh
# Вывод: -rw-r--r-- 1 user user 1234 ... deploy.sh (нет x)

# 2. Добавьте право на выполнение для владельца
chmod u+x deploy.sh

# 3. Проверьте результат
ls -l deploy.sh
# Вывод: -rwxr--r-- 1 user user 1234 ... deploy.sh

Пример 2: Разрешить запись для группы разработчиков

Вы хотите, чтобы все члены группы devs могли редактировать файл config.ini.

# 1. Убедитесь, что файл принадлежит группе devs
ls -l config.ini
# Вывод: -rw-r--r-- 1 alice devs ... config.ini

# 2. Если группа уже devs, просто дайте группе право на запись
chmod g+w config.ini
# Теперь права: -rw-rw-r-- (764). Группа devs может читать и писать.

# 3. (Опционально) Если файл должен быть доступен только на чтение для остальных
chmod o-r config.ini
# Итог: -rw-rw---- (760)

Пример 3: Создать защищенную общую папку с sticky bit

Вы создаете папку /shared/uploads, куда все могут загружать файлы, но удалять могут только свои файлы или root.

mkdir /shared/uploads
# Даем полный доступ всем на запись и чтение (для загрузки)
chmod 777 /shared/uploads
# Включаем sticky bit (t в правах для "остальных")
chmod +t /shared/uploads
# Проверьте: drwxrwxrwt (последний символ 't' вместо 'x')
ls -ld /shared/uploads

Теперь любой пользователь может создать файл в этой папке, но не сможет удалить или переименовать файл, созданный другим пользователем.

Проверка результата

После внесения изменений обязательно проверьте:

  1. Базовые права: ls -l [файл/папка] — убедитесь, что владелец, группа и триплеты (rwx) соответствуют ожиданиям.
  2. ACL (если использовали): getfacl [файл] — проверьте наличие и корректность записей user:[имя]:[права].
  3. Функциональность: Попробуйте выполнить действие от имени нужного пользователя (например, прочитать, записать или выполнить файл). Для теста можно использовать sudo -u [пользователь] [команда].

Возможные проблемы

  • Ошибка Operation not permitted при chown или chmod:
    • Вы не запустили команду с sudo (если меняете не свой файл).
    • Файловая система смонтирована с опцией nosuid или nodev (редко).
    • У файла установлен immutable флаг (chattr +i файл). Снимите его: sudo chattr -i файл.
  • ACL не применяются:
    • Файловая система не поддерживает ACL (см. Шаг 4). Нужно перемонтировать с опцией acl.
    • Вы не использовали sudo для setfacl (требуется для изменения ACL чужих файлов).
  • Изменения chmod не влияют на доступ:
    • Вы пытаетесь изменить права на файл, который находится на смонтированном сетевом ресурсе (NFS, Samba). Права могут управляться на стороне сервера.
    • Вы являетесь не владельцем файла и у вас нет sudo.
  • После chmod 777 доступ все равно запрещен:
    • Проверьте SELinux/AppArmor. Они могут блокировать доступ независимо от стандартных прав. Временно отключите для диагностики (не в продакшене!): sudo setenforce 0 (SELinux).

Часто задаваемые вопросы

В чем разница между chmod 755 и 777?
Как рекурсивно изменить права на всю папку с файлами?
Что такое sticky bit и setgid?
Как проверить, включена ли поддержка ACL в файловой системе?

Полезное

Анализ текущих прав
Изменение владельца и группы
Настройка прав доступа через chmod
Работа с расширенными ACL
Практические примеры

Эта статья помогла вам решить проблему?