LinuxСредняя

Как управлять правами доступа к файлам в Linux: полное руководство

Этот гайд объясняет, как управлять правами доступа к файлам в Linux, используя команды chmod, chown и chgrp. Вы научитесь настраивать разрешения для пользователей, групп и других.

Обновлено 16 февраля 2026 г.
15-30 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 22.04+Debian 11+CentOS 7+Fedora 35+

Введение

Права доступа к файлам в Linux — это фундаментальный механизм безопасности, который контролирует, кто может читать, изменять или выполнять файлы и каталоги. Неправильная настройка прав может привести к утечке данных, сбоям в работе сервисов или компрометации системы. Этот гайд поможет вам освоить управление правами с помощью стандартных команд, чтобы обеспечить безопасность и корректную работу вашей системы.

Требования

Перед началом убедитесь, что у вас есть:

  • Доступ к терминалу Linux (Ubuntu, Debian, CentOS, Fedora или другой дистрибутив)
  • Базовые навыки работы с командной строкой
  • Для изменения прав системных файлов или смены владельца могут потребоваться права суперпользователя (sudo)

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

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

ls -l filename

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

-rwxr-xr-- 1 user group 1024 Feb 16 10:00 example.txt

Расшифровка строки прав доступа:

  • Первый символ - — тип файла (- обычный файл, d каталог, l ссылка).
  • Следующие три символа (rwx) — права владельца (чтение, запись, выполнение).
  • Три символа после (r-x) — права группы.
  • Последние три символа (r--) — права всех остальных пользователей.
  • Если символ заменен на -, право отсутствует.

Шаг 2: Изменение прав доступа с помощью chmod

Команда chmod изменяет права доступа. Есть два основных подхода: символьный и числовой (Octal).

Символьный способ

Вы указываете категорию (u — владелец, g — группа, o — другие, a — все) и операцию (+, -, =).

chmod u+x script.sh      # Добавить право выполнения для владельца
chmod g-w file.txt       # Удалить право записи для группы
chmod o=r file.txt       # Установить только чтение для других
chmod a+x /usr/bin/app   # Добавить выполнение для всех

Числовой способ (Octal)

Каждому праву присвоено числовое значение: r=4, w=2, x=1. Суммируйте значения для каждой категории (владелец, группа, другие).

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

Пример: chmod 755 file

  • Владелец: rwx (7)
  • Группа: r-x (5)
  • Другие: r-x (5)
chmod 755 /path/to/script.sh
chmod 644 /path/to/config.conf  # Владелец: rw-, группа и другие: r--

Для рекурсивного изменения в каталоге:

chmod -R 755 /var/www/html

Шаг 3: Изменение владельца файла с помощью chown

Команда chown меняет владельца и/или группу файла. Синтаксис: chown [новый_владелец]:[новая_группа] файл.

chown alice:developers project.txt  # Изменить и владельца, и группу
chown alice project.txt             # Изменить только владельца
chown :developers project.txt       # Изменить только группу

Для рекурсивного применения:

chown -R alice:developers /projects/

⚠️ Важно: Для изменения владельца системных файлов обычно требуются права sudo.

Шаг 4: Изменение группы файла с помощью chgrp

Если нужно изменить только группу, используйте chgrp:

chgrp developers file.txt

Рекурсивно:

chgrp -R developers /shared/

Шаг 5: Практические примеры настройки прав

Пример 1: Веб-сервер (Nginx/Apache)

Файлы конфигурации должны быть защищены, а логи доступны для записи веб-сервером.

# Конфигурация: только root может читать/писать, группа www-data только читает
chmod 640 /etc/nginx/nginx.conf
chown root:www-data /etc/nginx/nginx.conf

# Логи: группа www-data может записывать
chmod 664 /var/log/nginx/access.log
chown www-data:adm /var/log/nginx/access.log

Пример 2: Скрипт, запускаемый от root

Скрипт, который должен выполняться только от root и не быть измененным другими:

chmod 700 /usr/local/bin/backup.sh  # Только владелец (root) имеет полные права
chown root:root /usr/local/bin/backup.sh

Пример 3: Общий каталог для команды

Каталог, к которому у нескольких пользователей есть доступ на запись:

# Создайте группу и добавьте пользователей
groupadd shared-group
usermod -aG shared-group alice
usermod -aG shared-group bob

# Настройте каталог
mkdir /shared/project
chown root:shared-group /shared/project
chmod 2775 /shared/project  # SGID-бит: новые файлы наследуют группу каталога

Теперь все файлы, созданные в /shared/project, будут принадлежать группе shared-group.

Пример 4: Безопасный каталог для загрузок

Если нужно разрешить загрузку файлов, но запретить выполнение:

chmod 733 /uploads  # Владелец: полные права, группа и другие: только запись и выполнение (но не чтение)

Это позволяет загружать файлы, но не читать их содержимое.

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

После изменений проверьте права с помощью ls -l:

ls -l /path/to/file

Убедитесь, что:

  • Владелец и группа установлены корректно.
  • Права доступа соответствуют требуемым (например, -rw-r--r-- для обычных файлов, drwxr-xr-x для каталогов).

Протестируйте функциональность:

  • Попробуйте выполнить скрипт от имени разных пользователей.
  • Проверьте, можно ли записать в файл или каталог.
  • Для веб-серверов убедитесь, что они могут читать конфиги и писать логи.

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

Ошибка "Permission denied" при выполнении команды

  • Причина: недостаточно прав (например, попытка изменить системный файл без sudo).
  • Решение: добавьте sudo перед командой, если у вас есть права администратора, или измените права на файл, чтобы ваш пользователь имел доступ.

Изменения прав не применились

  • Убедитесь, что вы редактируете правильный файл или каталог.
  • Проверьте, не переопределены ли права через параметры монтирования (например, noexec, nosuid в /etc/fstab).
  • Для симлинков используйте chmod -h или изменяйте права целевого файла.

Рекурсивное изменение затронуло не те файлы

  • Всегда проверяйте путь перед использованием -R.
  • Используйте find для точного выбора:
    find /var/www -type f -name "*.php" -exec chmod 644 {} \;
    

Права 777 слишком открытые

  • Избегайте 777, кроме временных отладок. Вместо этого настройте группы и используйте 775 или 755.
  • Для каталогов, требующих записи нескольким пользователям, используйте групповые права и SGID-бит (chmod 2770).

Не могу изменить владельца на другого пользователя

  • Убедитесь, что пользователь существует (id username).
  • Для смены владельца на не-sudo пользователя вам нужны права root.

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

Что такое права доступа в Linux и зачем они нужны?
Как использовать chmod для изменения прав?
В чем разница между chmod 755 и 777?
Как изменить владельца файла в Linux?

Полезное

Проверка текущих прав
Изменение прав с chmod
Смена владельца с chown
Изменение группы с chgrp
Примеры для распространенных сценариев