Инструкция

Права доступа в Linux: chmod, chown и sudo на примерах

Обновлено: · Skillaria.Top

Права доступа в 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 для каждого из трёх наборов.

ЦифраПраваРасчёт
7rwx4+2+1
6rw-4+2
5r-x4+1
4r--4
0---0

Типичные наборы, которые стоит знать наизусть:

РежимВидГде используется
644rw-r--r--обычные файлы, конфиги, HTML
755rwxr-xr-xкаталоги, скрипты и программы
600rw-------приватные SSH-ключи, файлы с паролями
700rwx------каталог ~/.ssh, личные каталоги
640rw-r-----конфиги, которые читает группа службы
777rwxrwxrwxвсем всё — почти никогда не нужен

Команда 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: с нуля до уверенного администрирования».

Перейти к курсу