Права доступа в Linux: chmod, chown и разбор Permission denied
Права доступа в Linux задаются командой chmod для трёх групп: владельца, группы и остальных, а владельца меняет chown. Запись chmod 755 означает rwx для владельца и r-x для всех прочих, 644 подходит обычным файлам, а маска umask определяет права новых файлов.

Содержание
Как читать права доступа в выводе ls -l
У каждого файла в Linux есть владелец, группа и три набора прав: для владельца (user), для группы (group) и для всех остальных (others). Увидеть их проще всего командой ls -l:
ls -l ~/script.sh /etc/shadow
# -rwxr-xr-- 1 anna anna 512 окт 20 10:15 /home/anna/script.sh
# -rw-r----- 1 root shadow 1203 окт 01 09:00 /etc/shadowПервый символ показывает тип: - обычный файл, d каталог, l символическая ссылка. Дальше идут три тройки символов. В примере rwx у владельца anna, r-x у группы и r-- у остальных. Затем владелец и группа.
- r (read): прочитать содержимое файла. Для каталога: увидеть список имён внутри.
- w (write): изменить файл. Для каталога: создавать, удалять и переименовывать файлы в нём, даже чужие, если нет sticky-бита.
- x (execute): запустить файл как программу. Для каталога: войти в него и обращаться к файлам по имени.
Право x на каталог новичков сбивает чаще всего. Без него нельзя открыть файл внутри, даже если сам файл доступен на чтение. Для всего пути важно, чтобы каждый каталог от корня до файла имел x для вас. Если нужен подробный вывод одного файла с правами в двух форматах, используйте stat.
Числовая запись: что значит chmod 755
Каждое право имеет вес: r = 4, w = 2, x = 1. Сумма весов внутри тройки даёт одну цифру, а три цифры подряд описывают права владельца, группы и остальных. Отсюда расшифровка самого частого вопроса: chmod 755 означает 7 = 4+2+1 (rwx) для владельца, 5 = 4+1 (r-x) для группы и 5 (r-x) для остальных. Владелец может всё, остальные читают и запускают, но не меняют.
| Режим | Символьно | Где применяется |
|---|---|---|
755 | rwxr-xr-x | Каталоги, скрипты и программы, доступные всем на чтение |
644 | rw-r--r-- | Обычные файлы: конфиги, документы, страницы сайта |
700 | rwx------ | Личные каталоги, например ~/.ssh |
600 | rw------- | Секреты: приватные ключи, файлы паролей |
775 | rwxrwxr-x | Общий каталог для группы |
664 | rw-rw-r-- | Файлы, которые правит вся группа |
777 | rwxrwxrwx | Почти никогда: писать может любой процесс в системе |
chmod 755 ~/bin/backup.sh
chmod 600 ~/.ssh/id_ed25519
# рекурсивно для каталога и всего содержимого
chmod -R 750 ~/projects/secretПеред тремя цифрами иногда пишут четвёртую, например chmod 2775. Она задаёт специальные биты, о них ниже.
Символьная запись chmod: u, g, o и плюс с минусом
Числа удобны, когда вы задаёте права целиком. Если нужно поменять один бит и не трогать остальные, удобнее символьная форма: кому (u, g, o или a для всех), действие (+ добавить, - убрать, = установить ровно) и права.
chmod +x script.sh # сделать исполняемым
chmod u+x,g-w file # владельцу добавить x, группе убрать w
chmod o= private.txt # отобрать у остальных все права
chmod a+r report.pdf # всем разрешить чтение
chmod -R u+rwX,go-rwx ~/docsОбратите внимание на заглавную X в последней строке. Она добавляет право выполнения только каталогам и тем файлам, которые уже исполняемы у кого-то. Это спасает от классической ошибки, когда chmod -R +x делает исполняемыми все документы и картинки.
Есть и удобный способ скопировать права с образца: chmod --reference=образец файл. Работает в GNU coreutils, то есть в любом обычном дистрибутиве.
chown: как сменить владельца и группу
Менять владельца файла может только root, поэтому команда почти всегда идёт через sudo. Формат: chown пользователь:группа файл.
sudo chown anna file.txt # только владелец
sudo chown anna:www-data site/ # владелец и группа
sudo chown :developers shared.txt # только группа
sudo chown -R anna:anna ~/Downloads # рекурсивно
# группу владелец файла может сменить и без sudo, если сам в ней состоит
chgrp developers notes.mdСамый частый сценарий для chown на домашнем компьютере: вы что-то скачали или распаковали через sudo, и в домашнем каталоге появились файлы, принадлежащие root. Редактор их не сохраняет, файловый менеджер не удаляет. Лечится одной командой sudo chown -R $USER:$USER ~/путь. Как добавить пользователя в группу, чтобы общий каталог стал доступен, рассказано в статье пользователи, группы и sudo. Помните, что новая группа начинает действовать после повторного входа в сеанс.
umask: права для новых файлов
Когда программа создаёт файл, она просит права 666 для файлов и 777 для каталогов. Из них вычитается маска umask. При маске 022 получаются привычные 644 и 755, при маске 002 файлы и каталоги становятся доступны на запись группе: 664 и 775.
umask # показать текущую маску, например 0022
umask -S # то же в символьном виде: u=rwx,g=rx,o=rx
umask 077 # до конца сеанса: новые файлы только для себяЧтобы маска сохранилась, допишите строку umask 027 в ~/.bashrc или ~/.profile. Общесистемное значение задаётся в /etc/login.defs через модуль pam_umask, а у служб systemd собственный параметр UMask= в unit-файле. Значение по умолчанию в разных дистрибутивах отличается, поэтому проверяйте командой, а не по чужой инструкции.
SUID, SGID и sticky bit
Четвёртая цифра в начале режима отвечает за специальные биты: 4 для SUID, 2 для SGID, 1 для sticky.
SUID
Программа запускается с правами владельца файла, а не того, кто её запустил. Пример: /usr/bin/passwd принадлежит root и имеет SUID, поэтому обычный пользователь может сменить свой пароль в защищённом /etc/shadow. В выводе ls -l вместо x у владельца стоит s. Ставить SUID на свои скрипты не нужно, ядро Linux его для скриптов игнорирует, а для бинарников это потенциальная дыра.
SGID
На каталоге SGID заставляет новые файлы наследовать группу каталога. Это основа общих папок для команды:
sudo mkdir /srv/shared
sudo chown root:developers /srv/shared
sudo chmod 2775 /srv/sharedSticky bit
На каталоге запрещает удалять и переименовывать чужие файлы, даже если на каталог есть право записи. Классический пример: /tmp с режимом 1777, в выводе ls -ld /tmp последним символом стоит t. Подробнее об этом каталоге в статье каталог tmp в Linux. Найти все файлы с SUID в системе можно через find, приёмы поиска описаны в материале поиск файлов в Linux:
sudo find / -xdev -perm -4000 -type f 2>/dev/nullPermission denied: частые причины и решения
Ошибка одна, а причин много. Проверяйте по порядку:
- У скрипта нет права x. Решение:
chmod +x script.shили запуск через интерпретаторbash script.sh. - Нет права x на одном из каталогов пути. Команда
namei -l /полный/путь/к/файлупокажет права каждого компонента пути одним списком. - Файл принадлежит root. Последствие работы через sudo. Верните владельца командой
chown. - Раздел смонтирован с noexec. На флешках и некоторых разделах запуск программ запрещён опцией монтирования. Проверьте
findmnt -T путь. - Файловая система без прав Unix. На FAT32 и exFAT chmod и chown не работают, права задаются опциями
uid,gid,umaskпри монтировании. - SELinux или AppArmor. В Fedora права могут быть в порядке, а доступ запрещает метка SELinux. Смотрите
ls -Zи восстанавливайте меткиrestorecon -Rv путь. - Атрибут immutable. Даже root не изменит файл с атрибутом
i. Проверкаlsattr файл, снятиеsudo chattr -i файл. - sudo и перенаправление. В
sudo echo текст > /etc/файлперенаправление выполняет ваша оболочка без прав root. Правильно:echo текст | sudo tee /etc/файл.
Никогда не лечите Permission denied командой chmod -R 777. Это открывает запись всем процессам системы, ломает SSH (он откажется работать с ключами при слишком открытых правах) и маскирует настоящую причину. Найдите, какого именно права не хватает и кому, и выдайте ровно его.
ACL и аккуратная массовая правка прав
Классических трёх наборов прав иногда мало: нужно дать доступ одному конкретному пользователю, не добавляя его в группу. Для этого есть списки ACL:
setfacl -m u:boris:rx ~/shared-photos # дать boris чтение и вход
setfacl -d -m u:boris:rx ~/shared-photos # то же для новых файлов внутри
getfacl ~/shared-photos
setfacl -b ~/shared-photos # убрать все ACLЕсли у файла есть ACL, в ls -l после прав появляется знак +.
Когда нужно привести в порядок права целого дерева, например сайта или архива, задавайте режимы раздельно для каталогов и файлов:
find ~/site -type d -exec chmod 755 {} +
find ~/site -type f -exec chmod 644 {} +Для каталога SSH нужны строгие права, иначе сервер не примет ключ: chmod 700 ~/.ssh и chmod 600 ~/.ssh/authorized_keys. Подробности в статье как подключиться по SSH, а базовые команды для работы с файлами собраны в материале основные команды Linux. Полное описание синтаксиса chmod есть в руководстве GNU Coreutils.
Частые вопросы
Что значит chmod 755?
Владелец может читать, писать и запускать (7), группа и остальные только читать и запускать (5). Обычный режим для каталогов и скриптов.
Чем отличаются chmod 644 и 664?
При 644 писать может только владелец, при 664 ещё и группа. Остальные в обоих случаях только читают.
Как сменить владельца файла в Linux?
Командой sudo chown пользователь:группа файл, для каталога с содержимым добавьте ключ -R.
Почему chmod не работает на флешке?
FAT32 и exFAT не хранят права Unix. Права задаются опциями uid, gid и umask при монтировании.
Можно ли поставить chmod 777, чтобы всё заработало?
Не стоит: это открывает запись всем процессам и скрывает настоящую причину ошибки. Выдайте только недостающее право нужному пользователю.
Документация и источники
- GNU Coreutils: chmod invocation, GNU Project, 2025
- GNU Coreutils: chown invocation, GNU Project, 2025
- ArchWiki: File permissions and attributes, Arch Linux, 2026
Читайте также
- Пользователи и sudo в Linux: добавить пользователя, группы и права
- Основные команды Linux для начинающих с примерами
- Как подключиться по SSH из Linux и Windows: от первого входа до туннелей
- Каталог /tmp в Linux: очистка, место на диске и безопасность
- Поиск файлов в Linux: по имени, размеру, дате и содержимому
- Команда passwd в Linux: смена пароля и защита учётной записи
Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.