Права доступа в Linux: chmod, chown и sudo на примерах
Права доступа в Linux задаются тремя наборами rwx — для владельца, группы и остальных; их меняют командой chmod в символьном (chmod u+x) или числовом виде (chmod 755, где r=4, w=2, x=1). Владельца меняет chown, а действия от имени администратора выполняются через sudo; ошибка Permission denied почти всегда значит, что у вашего пользователя нет нужного права на файл или на один из каталогов пути.
Права доступа в Linux отвечают на вопрос «кто и что может сделать с файлом». У каждого файла есть владелец, группа и три набора прав: для владельца, для группы и для всех остальных. Меняются они командой chmod, владелец — командой chown, а действия от имени администратора выполняются через sudo. Разберём, как читать права, как их менять и как чинить ошибку Permission denied.
Как посмотреть права файла
Права видно в выводе ls -l:
$ ls -l
-rw-r--r-- 1 alice developers 1204 Oct 10 14:02 notes.txt
-rwxr-xr-x 1 alice developers 356 Oct 10 14:05 deploy.sh
drwxr-x--- 2 alice developers 4096 Oct 10 13:50 secrets
Первые десять символов разбираются так:
- Первый символ — тип:
-обычный файл,dкаталог,lсимволическая ссылка. - Символы 2–4 — права владельца (user).
- Символы 5–7 — права группы (group).
- Символы 8–10 — права остальных (others).
Дальше идут число жёстких ссылок, владелец (alice), группа (developers), размер, дата и имя. Для одного файла удобна команда stat:
$ stat -c '%A %a %U:%G %n' deploy.sh
-rwxr-xr-x 755 alice:developers deploy.sh
Что означают r, w и x
Смысл прав различается для файлов и каталогов — это главная причина путаницы.
| Право | Для файла | Для каталога |
|---|---|---|
r (read) | читать содержимое | видеть список файлов (ls) |
w (write) | изменять содержимое | создавать, удалять и переименовывать файлы внутри |
x (execute) | запускать как программу | входить в каталог (cd) и обращаться к файлам по пути |
Обратите внимание: удалить файл может тот, у кого есть права w и x на каталог, даже если сам файл ему записывать нельзя. А без x на каталог нельзя открыть файл внутри, даже если права на файл разрешают чтение.
Система проверяет права по порядку: если вы владелец — применяются права владельца, иначе если вы в группе файла — права группы, иначе — права остальных. Пользователь root проверку прав на чтение и запись обходит.
Числовой вид прав: 755, 644, 600
Каждое право имеет вес: r = 4, w = 2, x = 1. Сумма весов даёт цифру от 0 до 7 для каждого из трёх наборов.
| Цифра | Права | Расчёт |
|---|---|---|
| 7 | rwx | 4+2+1 |
| 6 | rw- | 4+2 |
| 5 | r-x | 4+1 |
| 4 | r-- | 4 |
| 0 | --- | 0 |
Типичные наборы, которые стоит знать наизусть:
| Режим | Вид | Где используется |
|---|---|---|
644 | rw-r--r-- | обычные файлы, конфиги, HTML |
755 | rwxr-xr-x | каталоги, скрипты и программы |
600 | rw------- | приватные SSH-ключи, файлы с паролями |
700 | rwx------ | каталог ~/.ssh, личные каталоги |
640 | rw-r----- | конфиги, которые читает группа службы |
777 | rwxrwxrwx | всем всё — почти никогда не нужен |
Команда chmod: как поменять права
Числовой режим
Числовой вид задаёт права целиком:
chmod 644 index.html
chmod 755 deploy.sh
chmod 600 ~/.ssh/id_ed25519
Символьный режим
Символьный вид меняет права точечно, не трогая остальные. Кому: u владелец, g группа, o остальные, a все. Действие: + добавить, - убрать, = установить ровно.
chmod +x deploy.sh # разрешить запуск
chmod u+x,g-w file # владельцу запуск, группе убрать запись
chmod o-rwx secrets/ # остальным ничего
chmod g=rx app/ # группе ровно чтение и вход
Рекурсивно: файлы и каталоги по-разному
Флаг -R применяет права ко всему дереву. Но chmod -R 755 сделает исполняемыми все файлы, что обычно не нужно. Правильнее разделить файлы и каталоги через find:
find /srv/site -type d -exec chmod 755 {} +
find /srv/site -type f -exec chmod 644 {} +
Есть и короткий вариант: заглавная X добавляет выполнение только каталогам и файлам, у которых оно уже есть.
chmod -R u=rwX,go=rX /srv/site
Команда chown: смена владельца и группы
Сменить владельца файла может только root, поэтому chown почти всегда запускают через sudo.
sudo chown alice report.txt # владелец
sudo chown alice:developers report.txt # владелец и группа
sudo chown :www-data index.html # только группа
sudo chown -R www-data:www-data /var/www/site
Для смены только группы есть отдельная команда chgrp: sudo chgrp developers report.txt. Свои группы покажет id или groups.
$ id
uid=1000(alice) gid=1000(alice) groups=1000(alice),27(sudo),1001(developers)
Добавить пользователя в группу — sudo usermod -aG developers bob. Флаг -a обязателен: без него пользователь будет удалён из всех остальных дополнительных групп. Новая группа начнёт действовать после повторного входа в систему.
sudo: действия от имени администратора
sudo выполняет одну команду с правами root (или другого пользователя) и спрашивает ваш собственный пароль, а не пароль root. Все вызовы записываются в журнал, поэтому видно, кто и что делал.
sudo apt update
sudo systemctl restart nginx
sudo -u postgres psql # от имени пользователя postgres
sudo -i # интерактивная оболочка root
sudo -l # что мне разрешено
Кому и что разрешено, описано в /etc/sudoers и в файлах каталога /etc/sudoers.d/. Редактировать их нужно только через sudo visudo: он проверяет синтаксис, и ошибка в файле не лишит вас доступа к sudo. В Ubuntu право на sudo дают членством в группе sudo, в RHEL-подобных системах — в группе wheel.
# /etc/sudoers.d/deploy — пользователю deploy разрешён только перезапуск nginx
deploy ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx
Почему sudo echo > file не работает
Частая ловушка:
$ sudo echo "127.0.0.1 test.local" >> /etc/hosts
bash: /etc/hosts: Permission denied
Перенаправление >> выполняет ваша оболочка, а не sudo, поэтому файл открывается без прав root. Правильно — через tee:
echo "127.0.0.1 test.local" | sudo tee -a /etc/hosts
Permission denied: причины и как исправить
Ошибка Permission denied означает, что ядро отказало вашему процессу в операции. Алгоритм разбора всегда один: кто я (id), кто владелец и какие права (ls -l), какие права на каждый каталог пути (namei -l).
$ namei -l /srv/app/config/app.env
f: /srv/app/config/app.env
drwxr-xr-x root root /
drwxr-xr-x root root srv
drwxr-x--- deploy deploy app
drwxr-xr-x deploy deploy config
-rw-r----- deploy deploy app.env
Здесь видно, что каталог app закрыт для остальных — пользователь не из группы deploy не пройдёт дальше, какими бы ни были права на сам файл.
Скрипт не запускается
$ ./deploy.sh
bash: ./deploy.sh: Permission denied
У файла нет права на выполнение. Решение — chmod +x deploy.sh или запуск через интерпретатор: bash deploy.sh. Если раздел смонтирован с опцией noexec (так бывает с /tmp), запустить файл напрямую не выйдет, поможет только второй вариант.
Нельзя записать в системный каталог
Файлы в /etc, /usr, /var/www принадлежат root или служебным пользователям. Используйте sudo для разовых правок, а для постоянной работы дайте права группе, а не всем.
Веб-сервер отдаёт 403
Nginx или Apache работают от пользователя www-data (в Debian и Ubuntu). Ему нужно чтение файлов и x на все каталоги пути. Исправление: sudo chown -R www-data:www-data /var/www/site или права 755 на каталоги и 644 на файлы.
SSH не принимает ключ
SSH отказывается использовать ключи со слишком открытыми правами. Приватный ключ должен иметь права 600, каталог ~/.ssh — 700, файл authorized_keys на сервере — 600.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519 ~/.ssh/authorized_keys
Нет доступа к Docker
Сообщение permission denied while trying to connect to the Docker daemon socket значит, что вы не в группе docker. Выполните sudo usermod -aG docker $USER и перезайдите в систему. Учтите, что членство в этой группе фактически равно правам root.
Почему chmod 777 — плохая идея
Совет «просто сделай chmod 777» убирает ошибку, но открывает файл на запись любому пользователю и любому процессу в системе. Если веб-приложение взломают, злоумышленник сможет подменить такие файлы. Правильный путь — выяснить, какому пользователю нужен доступ, и дать право именно ему: через владельца или группу.
umask: права по умолчанию
Новые файлы получают права с учётом маски umask. При типичном значении 022 файлы создаются с правами 644, а каталоги — с 755.
$ umask
0022
Итог
Права доступа в Linux — это три набора rwx для владельца, группы и остальных. chmod меняет права в числовом (755, 644, 600) или символьном виде, chown — владельца, а sudo позволяет выполнить отдельную команду от имени root. При ошибке Permission denied проверяйте пользователя, права на файл и на каждый каталог пути, и не лечите проблему через 777. Пользователи, группы, права и sudo подробно разобраны на практике в курсе по Linux.
Частые вопросы
Что значит chmod 755?
Владелец может читать, писать и выполнять (7), группа и остальные — читать и выполнять (5). Это стандартный набор для каталогов и скриптов.
Чем chmod отличается от chown?
chmod меняет права доступа (что можно делать с файлом), а chown — владельца и группу (кому эти права принадлежат).
Как дать пользователю права sudo?
В Ubuntu и Debian добавьте его в группу sudo командой sudo usermod -aG sudo имя, в RHEL-подобных системах — в группу wheel. Изменения вступят в силу после повторного входа.
Что такое права 4755 и бит SUID?
Ведущая цифра 4 включает SUID: программа запускается с правами владельца файла, а не того, кто её запустил. Так работает, например, passwd, а в выводе ls на месте x владельца стоит s.
Почему root может читать файл с правами 000?
Ядро не проверяет обычные права чтения и записи для root. Ограничить его можно только другими механизмами, например SELinux, AppArmor или атрибутом неизменяемости chattr +i.
Эта тема подробно разобрана с практикой в курсе «Linux: с нуля до уверенного администрирования».
Перейти к курсу