Введение / Зачем это нужно
Пользовательские разрешения в Linux — это фундаментальный механизм контроля доступа к файлам и каталогам. В многопользовательских системах они гарантируют, что только авторизованные пользователи могут читать, изменять или выполнять определённые ресурсы. Без правильной настройки разрешений вы рискуете столкнуться с утечкой данных, несанкционированными изменениями или ошибками в работе сервисов. Этот гайд поможет вам освоить команды chmod, chown и управление группами, чтобы уверенно настраивать безопасность вашей системы.
Требования / Подготовка
Перед началом убедитесь, что у вас есть:
- Доступ к терминалу Linux (физическая машина, виртуальная среда или WSL).
- Базовые навыки работы с командной строкой (навигация, редактирование файлов).
- Права суперпользователя (sudo) для операций, требующих изменения владельца или системных файлов.
- Понимание структуры файловой системы (например,
/home,/etc,/var).
💡 Совет: Если вы новичок, потренируйтесь на тестовых файлах в домашнем каталоге, чтобы случайно не нарушить работу системы.
Шаг 1: Понимание текущих разрешений
Первым делом нужно узнать, какие права доступа уже установлены. Используйте команду ls -l для детального списка файлов:
ls -l /path/to/directory
Вывод будет выглядеть примерно так:
-rwxr-xr-- 1 alice developers 2048 Feb 16 10:30 script.sh
drwxrwx--- 2 bob users 4096 Feb 16 10:35 shared_folder
Разберём первую строку:
- Первый символ (
-илиd): тип файла (-— обычный файл,d— каталог). - Следующие 9 символов: права для владельца (первые 3), группы (следующие 3) и других пользователей (последние 3).
r— чтение (4),w— запись (2),x— выполнение (1),-— отсутствие права.- Например,
rwx= 7 (4+2+1),r-x= 5 (4+0+1),r--= 4 (4+0+0).
- После идут количество ссылок, владелец (
alice), группа (developers), размер, дата и имя файла.
Шаг 2: Изменение прав доступа с chmod
Команда chmod изменяет права доступа. Есть два основных режима: символьный (буквенный) и числовой (Octal).
Символьный режим
Указывайте, кому (u — владелец, g — группа, o — другие, a — все) и какие права (r, w, x) добавлять (+), удалять (-) или устанавливать (=).
Примеры:
# Добавить право выполнения для владельца
chmod u+x script.sh
# Удалить запись для группы и других
chmod go-w file.txt
# Установить права: владелец — полные, группа и другие — только чтение
chmod u=rwx,go=r file.txt
Числовой режим
Каждой категории (владелец, группа, другие) присваивается трёхбитное число, где биты соответствуют rwx. Сумма значений даёт цифру (0-7).
Примеры:
# 755: владелец rwx (7), группа и другие r-x (5)
chmod 755 script.sh
# 644: владелец rw- (6), группа и другие r-- (4)
chmod 644 config.conf
# 777: полные права для всех (не рекомендуется для безопасности!)
chmod 777 temp_file
⚠️ Важно: Избегайте
777для важных файлов — это разрешает любому пользователю изменять их, что создаёт уязвимость.
Шаг 3: Смените владельца и группу с chown
Если нужно изменить владельца файла или каталога, используйте chown. Синтаксис: chown [владелец][:группа] файл.
Примеры:
# Сменить только владельца
chown alice file.txt
# Сменить и владельца, и группу
chown alice:developers file.txt
# Рекурсивно для каталога и его содержимого
chown -R bob:users /shared_folder
💡 Совет: Для смены группы без изменения владельца можно использовать
chgrp groupname file.
Шаг 4: Управление группами пользователей
Группы позволяют централизованно управлять доступом для нескольких пользователей. Работа с группами выполняется от имени root или с sudo.
Создание и удаление групп
# Создать новую группу
sudo groupadd devteam
# Удалить группу (если она не используется)
sudo groupdel oldgroup
Добавление пользователя в группу
# Добавить пользователя в дополнительную группу (без выхода из текущих)
sudo usermod -aG devteam alice
# Проверить группы пользователя
groups alice
⚠️ Важно: Изменения групп вступают в силу после нового входа пользователя в систему или перезапуска сессии.
Шаг 5: Практические примеры
Пример 1: Настройка веб-сервера
Для файлов веб-сайта в /var/www/html:
# Установить владельца www-data (типичный для Apache/Nginx)
sudo chown -R www-data:www-data /var/www/html
# Дать права на чтение для всех, запись только для владельца
sudo chmod -R 755 /var/www/html
# Для загружаемых файлов (например, uploads) можно дать 775 для записи группы
sudo chmod 775 /var/www/html/uploads
Пример 2: Общий каталог для команды
Создадим каталог /projects, доступный для записи всем членам группы developers:
sudo mkdir /projects
sudo groupadd developers # если группы нет
sudo chown :developers /projects
sudo chmod 775 /projects
# Теперь любой пользователь в группе developers может создавать файлы в /projects.
Пример 3: Скрипт с выполнением
Дадим скрипту backup.sh право выполнения только владельцу:
chmod 700 backup.sh # rwx для владельца, нет для группы и других
Шаг 6: Проверка результата
После изменений всегда проверяйте права:
ls -l /path/to/file_or_directory
Убедитесь, что:
- Владелец и группа указаны правильно.
- Права соответствуют ожидаемым (например,
rwxr-xr-xдля исполняемых файлов). - Для каталогов обычно требуется право
x(выполнение) для доступа к содержимому.
Также протестируйте функциональность: попробуйте прочитать/изменить файл от имени другого пользователя (используйте su - username или отдельный терминал).
Возможные проблемы
Ошибка "Operation not permitted"
Причина: недостаточно прав (не запущено с sudo) или файл имеет флаг immutable (chattr +i). Решение:
# Снимите флаг immutable, если установлен
sudo chattr -i file
# Запустите команду с sudo
sudo chmod 755 file
Неправильные права после chmod
Если права не изменились, проверьте:
- Правильность синтаксиса команды (например, не перепутаны
+и=). - Не перезаписываются ли права другими механизмами (например, ACL через
setfacl). Посмотрите ACL:getfacl file.
Пользователь не может записать в каталог, хотя в группе
Возможные причины:
- Группа каталога не та, в которую добавлен пользователь (проверьте
ls -ld directory). - Пользователь не вышел и заново вошёл в систему после добавления в группу.
- У каталога нет права записи для группы (
chmod g+w directory).
Рекурсивное изменение прав с chmod/chown затронуло симлинки
По умолчанию chmod -R и chown -R не следуют за символическими ссылками, но если ссылки указывают на важные файлы, убедитесь, что вы не изменили лишнее. Для обработки самих ссылок используйте -h (для chown) или будьте осторожны с путями.
💡 Совет: Для сложных сценариев используйте
findс-execдля точечного применения прав, например:find /var/log -type f -name "*.log" -exec chmod 640 {} \;