Перейти к содержанию

16. Права доступа к файлам и директориям команды chmod, chown, chgrp

Введение

В Linux всё — файл, и каждый файл или директория имеет владельца, группу и набор прав доступа. Эти права определяют, кто и что может делать с файлом: читать, изменять или запускать. Сегодня разберём, как управлять правами с помощью команд chmod, chown и chgrp, и как это связано с полномочиями суперпользователя (root), о котором мы говорили ранее.


Зачем нужны права доступа

Linux — многопользовательская система. Права доступа:

  • Защищают файлы от несанкционированного доступа.
  • Позволяют разграничивать доступ между пользователями, группами и всеми остальными.
  • Обеспечивают безопасность системы.

Например:

  • Пользователь ivanov не должен удалить файлы petrov.
  • Веб-сервер (www-data) должен иметь доступ только к своим файлам.
  • Секретные файлы (например, /etc/shadow) доступны только root.

Как устроены права доступа

Каждый файл/директория имеет:

  • Владельца (user).
  • Группу (group).
  • Права для трёх категорий:
    • u (user) — владелец.
    • g (group) — группа.
    • o (others) — остальные.

Посмотреть права можно командой:

ls -l

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

-rwxr-xr-- 1 ivanov developers 4096 Dec 11 2025 script.sh

Разберём:

  • rwxr-xr--:
    • 1-й символ: - (файл, d — директория, l — ссылка).
    • 2–4: rwx — права владельца (чтение, запись, выполнение).
    • 5–7: r-x — права группы (чтение, выполнение, без записи).
    • 8–10: r-- — права остальных (только чтение).
  • ivanov — владелец.
  • developers — группа.
  • script.sh — имя файла.

Команда chmod — управление правами

chmod изменяет права доступа к файлам и директориям.

Синтаксис:

Bash

chmod [опции] режим файл

Два способа задания прав:

  1. Восьмеричный (числовой):

    • Права задаются тремя цифрами (для u, g, o).
    • Каждое право имеет значение:
      • r (read) = 4
      • w (write) = 2
      • x (execute) = 1
      • — (нет права) = 0

    Примеры:

    bash chmod 755 script.sh # rwxr-xr-x (владелец: всё, остальные: чтение+выполнение) chmod 644 document.txt # rw-r--r-- (владелец: чтение+запись, остальные: чтение) chmod 600 private.key # rw------- (только владелец)

  2. Символьный:

    • Используется для добавления/удаления прав.
    • Формат: [u|g|o|a][+|-|=][r|w|x].

    Примеры:

    bash chmod u+x script.sh # Дать владельцу право выполнения chmod g-w file.txt # Убрать у группы право записи chmod o=r report.pdf # Остальным только чтение chmod a+rwx data/ # Всем всё (осторожно!)

Опция -R:

  • Рекурсивное применение прав:

    bash chmod -R 755 /var/www/html


Команда chown — смена владельца

chown изменяет владельца и/или группу файла. Обычно требует прав root.

Синтаксис:

chown [опции] пользователь[:группа] файл

Примеры:

sudo chown root script.sh # Сделать root владельцем
sudo chown www-data:www-data /var/www/html # Владелец и группа — www-data
sudo chown :developers project/ # Сменить только группу
sudo chown -R ivanov:ivanov /home/ivanov # Рекурсивно

Команда chgrp — смена группы

chgrp меняет группу-владельца. Можно использовать chown вместо неё.

Синтаксис:

chgrp [опции] группа файл

Примеры:

sudo chgrp developers script.sh
sudo chgrp -R webdev /var/www

Эквивалент через chown:

sudo chown :developers script.sh

Связь с root

  • Только root (или пользователь с соответствующими привилегиями) может:
    • Менять владельца (chown).
    • Менять группу (chgrp) для файлов, не входящих в свои группы.
    • Изменять права системных файлов.
  • Используйте sudo для таких операций:

    bash sudo chmod 600 /etc/shadow sudo chown root:root /etc/passwd


Типичные ошибки

  1. chmod 777 для всего:
    • Это открывает доступ всем, включая злоумышленников.
    • Вместо этого: используйте минимально необходимые права (например, 644 для файлов, 755 для директорий).
  2. Забыть -R для директорий:
    • Права не применятся к содержимому.
    • Правильно: chmod -R 755 /var/www.
  3. Неправильный владелец:
    • Например, сделать root владельцем пользовательских файлов.
    • Проверяйте: ls -l.
  4. Игнорирование групп:
    • Группы упрощают разграничение доступа. Используйте их!

Полезные команды для диагностики

id # Кто я и мои группы
stat -c "%a %n" file.txt # Права в численном виде
find / -perm -4000 # Найти файлы с setuid
find /var/www -type f ! -perm 644  # Найти файлы с неправильными правами

Итоги

  • Права доступа — основа безопасности Linux.
  • chmod: управляет, кто что может делать (rwx).
  • chown: меняет владельца.
  • chgrp: меняет группу (или используйте chown :group).
  • Используйте sudo для операций, требующих прав root.
  • Всегда проверяйте права перед изменением и избегайте 777!