Linux

Полный гайд по правам доступа Linux: chmod, chown и модель rwx

В этом гайде вы подробно разберёте, как работает система разрешений Linux, что означают цифры и буквы r, w, x, и как правильно использовать команды chmod и chown для управления доступом к файлам.

Обновлено 17 февраля 2026 г.
15-30 мин
Средняя
FixPedia Team
Применимо к:Linux (любой дистрибутив)Ubuntu 20.04+CentOS/RHEL 8+Debian 11+

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

Понимание системы прав доступа (permissions) в Linux — это основа безопасности и стабильности работы системы. Без корректных настроек вы либо оставите критически важные файлы открытыми для всех, либо, наоборот, заблокируете легитимные процессы из-за недостатка прав. Этот гайд объяснит модель безопасности Linux (rwx) на простых примерах и покажет, как с помощью команд chmod и chown управлять доступом к файлам и папкам. Вы научитесь читать права, безопасно их изменять и понимать, что означают специальные биты вроде SUID.

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

  1. Доступ к терминалу Linux (любой дистрибутив: Ubuntu, CentOS, Debian, Fedora и т.д.).
  2. Базовые навыки работы с командной строкой: навигация (cd, ls), создание файлов (touch, echo).
  3. Права суперпользователя (sudo) для смены владельца (chown) или изменения прав на системных файлах. Для экспериментов можно использовать собственную домашнюю директорию (/home/ваш_пользователь).

Пошаговая инструкция

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

Основная команда для просмотра — ls -l. Она выводит детальный список файлов.

ls -l /home/user/Documents/

Пример вывода:

-rwxr-xr-- 1 alice developers 2048 Feb 17 10:30 report.pdf
drwxr-xr-x 2 bob   users     4096 Feb 17 10:31 projects

Разбираем первую строку (-rwxr-xr--):

  • Первый символ (-): тип объекта (- — обычный файл, d — каталог, l — ссылка).
  • Следующие 9 символов разбиты на три триады: владелец (alice), группа (developers), остальные.
  • r = чтение (read), w = запись (write), x = выполнение (execute).
  • Для владельца: rwx (полный доступ).
  • Для группы: r-x (чтение и выполнение, но нет записи).
  • Для остальных: r-- (только чтение).

💡 Совет: Для быстрой проверки конкретного файла используйте ls -l <имя_файла>.

Шаг 2: Изменение прав через символьный режим (chmod)

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

Пример 1: Дать группе право на запись в файл config.ini.

chmod g+w config.ini

После этого права для группы изменятся с r-- на rw-.

Пример 2: Убрать у всех, кроме владельца, право на выполнение скрипта backup.sh.

chmod o-x backup.sh

Или для всех, кроме владельца и группы:

chmod go-x backup.sh

Пример 3: Установить точные права: владелец — всё, группа — только чтение и выполнение, остальные — ничего.

chmod u=rwx,g=rx,o= script.sh
# Или эквивалентно: chmod 750 script.sh (см. следующий шаг)

Шаг 3: Изменение прав через восьмеричный (цифровой) режим

Это самый компактный и часто используемый способ. Каждому типу прав (r, w, x) присвоена цифра:

  • r = 4
  • w = 2
  • x = 1
  • - (отсутствие) = 0

Сумма этих цифр для каждой из трёх триад (владелец, группа, другие) даёт итоговое восьмеричное число (от 0 до 7).

Распространённые preset-значения:

  • 7 = rwx (4+2+1)
  • 6 = rw- (4+2)
  • 5 = r-x (4+1)
  • 4 = r-- (4)
  • 0 = ---

Пример 1: chmod 755 script.sh

  • Владелец: 7 = rwx
  • Группа: 5 = r-x
  • Остальные: 5 = r-x Это стандарт для исполняемых скриптов и публичных каталогов.

Пример 2: chmod 644 config.conf

  • Владелец: 6 = rw- (может читать и менять)
  • Группа: 4 = r-- (только чтение)
  • Остальные: 4 = r-- (только чтение) Это стандарт для обычных конфигурационных файлов.

Пример 3: chmod 600 secret.key

  • Только владелец может читать и писать. Группа и остальные — вообще никакого доступа. Критически важно для приватных ключей и паролей.

Шаг 4: Смена владельца и группы (chown)

Команда chown меняет метаданные файла: кто им владеет и к какой группе он принадлежит.

sudo chown alice:developers project_folder/

Эта команда установит владельца alice и группу developers для папки project_folder/.

Важные нюансы:

  • Для смены только группы можно опустить владельца: sudo chown :developers project_folder/.
  • Для смены только владельца можно опустить группу: sudo chown alice project_folder/.
  • Требуются права суперпользователя (sudo), если вы не являетесь текущим владельцем файла.

Шаг 5: Применение рекурсивно

Флаг -R (рекурсивно) применяет команду ко всем вложенным файлам и подкаталогам. Используйте с большой осторожностью, особенно с chmod 777 или chown на системных путях.

# Правильно: дать владельцу (bob) полный доступ ко всем файлам в его проекте, а группе и остальным — только чтение.
sudo chown -R bob:bob /srv/www/myproject/
sudo chmod -R 755 /srv/www/myproject/

⚠️ Важно: Рекурсивный chmod может снять специальные биты (SUID/SGID) с файлов. Чтобы их сохранить, используйте chmod -R --preserve-root (в некоторых дистрибутивах) или применяйте права более точечно.

Шаг 6: Понимание и настройка специальных битов (SUID, SGID, Sticky Bit)

Эти биты добавляются к стандартным правам и меняют поведение.

  1. SUID (Set User ID) — 4xxx (работает только для исполняемых файлов).
    • Признак: -rwsr-xr-x (виден s вместо x у владельца).
    • Эффект: Файл выполняется с правами своего владельца, а не того, кто его запустил.
    • Пример: /usr/bin/passwd имеет SUID, чтобы обычный пользователь мог изменить системный пароль (файл /etc/shadow доступен только root).
    • Установка: chmod 4755 /path/to/file или chmod u+s /path/to/file.
  2. SGID (Set Group ID) — 2xxx.
    • Для файлов: Аналогично SUID, но выполнение происходит с правами группы-владельца файла. -rwxr-sr-x.
    • Для каталогов: Наследование группы. Все новые файлы, созданные в этом каталоге, будут принадлежать группе каталога, а не группе пользователя-создателя. drwxrwsr-x.
    • Пример: Общие папки для разработки (/srv/shared).
    • Установка: chmod 2770 /shared_folder или chmod g+s /shared_folder.
  3. Sticky Bit — 1xxx (обычно для каталогов).
    • Признак: drwxrwxrwt (виден t вместо x у "остальных").
    • Эффект: Пользователь может удалять/переименовывать файлы в каталоге только если он является владельцем этого файла (или каталога).
    • Классический пример: /tmp — любой пользователь может создавать файлы, но удалять может только их владелец.
    • Установка: chmod 1777 /tmp или chmod o+t /some/folder.

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

  1. После изменений снова выполните ls -l <файл> и убедитесь, что колонка прав доступа изменилась в соответствии с вашими действиями.
  2. Практический тест: Попробуйте выполнить действие, которое должно быть разрешено/запрещено.
    • Для файла: cat file.txt (чтение), echo "test" >> file.txt (запись), ./script.sh (выполнение).
    • Для папки: cd /folder/ (доступ к каталогу требует x), touch /folder/newfile (создание файла требует w и x на папке).
  3. Если действие не удалось, а права выглядят корректно, проверьте, не является ли файл/папка символической ссылкой (l в начале строки ls -l). Права ссылки не важны, важны права на目标 объект.

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

  • Ошибка Operation not permitted при chown или chmod на системных файлах: Вы не являетесь владельцем файла и не используете sudo. Либо файл находится на смонтированной в режиме noexec/nosuid файловой системе.
  • Permission denied при попытке выполнить chmod/chown: У вас недостаточно прав на изменение метаданных этого файла (вы не root и не владелец). Используйте sudo если это системный файл, или смените владельца, если это ваш файл.
  • После chmod -R 777 /some/dir ничего не работает: Вы сняли все специальные биты (SUID/SGID) с исполняемых файлов. Некоторые системные утилиты (например, sudo) перестанут работать. Восстановите права из резервной копии или переустановите пакет.
  • Не могу записать в папку, хотя у меня rwx на файл: Запомните: для создания/удаления файлов в папке нужны права на саму папку (w и x), а не на файл.
  • Бит s (SUID/SGID) не отображается после chmod? Убедитесь, что вы устанавливаете его на исполняемый файл (с битом x). Если x нет, s не появится. chmod 4755 file (а не chmod 4766).

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

Что делать, если выдает 'Permission denied' при попытке выполнить скрипт?
Чем отличается chmod 777 от chmod 755?
Как безопасно дать права на выполнение только владельцу?
Что такое SUID и зачем он нужен?

Полезное

Проверка текущих прав доступа
Изменение прав через символьный режим (chmod u/g/o/a +/- r/w/x)
Изменение прав через восьмеричный (цифровой) режим
Смена владельца и группы (chown)
Применение рекурсивно к папкам и файлам
Понимание и настройка специальных битов (SUID, SGID, Sticky Bit)

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