Введение / Зачем это нужно
Понимание системы прав доступа (permissions) в Linux — это основа безопасности и стабильности работы системы. Без корректных настроек вы либо оставите критически важные файлы открытыми для всех, либо, наоборот, заблокируете легитимные процессы из-за недостатка прав. Этот гайд объяснит модель безопасности Linux (rwx) на простых примерах и покажет, как с помощью команд chmod и chown управлять доступом к файлам и папкам. Вы научитесь читать права, безопасно их изменять и понимать, что означают специальные биты вроде SUID.
Требования / Подготовка
- Доступ к терминалу Linux (любой дистрибутив: Ubuntu, CentOS, Debian, Fedora и т.д.).
- Базовые навыки работы с командной строкой: навигация (
cd,ls), создание файлов (touch,echo). - Права суперпользователя (sudo) для смены владельца (
chown) или изменения прав на системных файлах. Для экспериментов можно использовать собственную домашнюю директорию (/home/ваш_пользователь).
Пошаговая инструкция
Шаг 1: Проверка текущих прав доступа
Основная команда для просмотра — ls -l. Она выводит детальный список файлов.
ls -l /home/user/Documents/
Пример вывода:
-rwxr-xr-- 1 alice developers 2048 Feb 17 10:30 report.pdf
drwxr-xr-x 2 bob users 4096 Feb 17 10:31 projects
Разбираем первую строку (-rwxr-xr--):
- Первый символ (
-): тип объекта (-— обычный файл,d— каталог,l— ссылка). - Следующие 9 символов разбиты на три триады: владелец (alice), группа (developers), остальные.
r= чтение (read),w= запись (write),x= выполнение (execute).- Для владельца:
rwx(полный доступ). - Для группы:
r-x(чтение и выполнение, но нет записи). - Для остальных:
r--(только чтение).
💡 Совет: Для быстрой проверки конкретного файла используйте
ls -l <имя_файла>.
Шаг 2: Изменение прав через символьный режим (chmod)
Этот режим интуитивно понятен: вы обращаетесь к классу пользователей (u — owner, g — group, o — others, a — all) и оператору (+ — добавить, - — убрать, = — задать точно), а затем перечисляете права (r, w, x).
Пример 1: Дать группе право на запись в файл config.ini.
chmod g+w config.ini
После этого права для группы изменятся с r-- на rw-.
Пример 2: Убрать у всех, кроме владельца, право на выполнение скрипта backup.sh.
chmod o-x backup.sh
Или для всех, кроме владельца и группы:
chmod go-x backup.sh
Пример 3: Установить точные права: владелец — всё, группа — только чтение и выполнение, остальные — ничего.
chmod u=rwx,g=rx,o= script.sh
# Или эквивалентно: chmod 750 script.sh (см. следующий шаг)
Шаг 3: Изменение прав через восьмеричный (цифровой) режим
Это самый компактный и часто используемый способ. Каждому типу прав (r, w, x) присвоена цифра:
r= 4w= 2x= 1-(отсутствие) = 0
Сумма этих цифр для каждой из трёх триад (владелец, группа, другие) даёт итоговое восьмеричное число (от 0 до 7).
Распространённые preset-значения:
7=rwx(4+2+1)6=rw-(4+2)5=r-x(4+1)4=r--(4)0=---
Пример 1: chmod 755 script.sh
- Владелец:
7=rwx - Группа:
5=r-x - Остальные:
5=r-xЭто стандарт для исполняемых скриптов и публичных каталогов.
Пример 2: chmod 644 config.conf
- Владелец:
6=rw-(может читать и менять) - Группа:
4=r--(только чтение) - Остальные:
4=r--(только чтение) Это стандарт для обычных конфигурационных файлов.
Пример 3: chmod 600 secret.key
- Только владелец может читать и писать. Группа и остальные — вообще никакого доступа. Критически важно для приватных ключей и паролей.
Шаг 4: Смена владельца и группы (chown)
Команда chown меняет метаданные файла: кто им владеет и к какой группе он принадлежит.
sudo chown alice:developers project_folder/
Эта команда установит владельца alice и группу developers для папки project_folder/.
Важные нюансы:
- Для смены только группы можно опустить владельца:
sudo chown :developers project_folder/. - Для смены только владельца можно опустить группу:
sudo chown alice project_folder/. - Требуются права суперпользователя (
sudo), если вы не являетесь текущим владельцем файла.
Шаг 5: Применение рекурсивно
Флаг -R (рекурсивно) применяет команду ко всем вложенным файлам и подкаталогам. Используйте с большой осторожностью, особенно с chmod 777 или chown на системных путях.
# Правильно: дать владельцу (bob) полный доступ ко всем файлам в его проекте, а группе и остальным — только чтение.
sudo chown -R bob:bob /srv/www/myproject/
sudo chmod -R 755 /srv/www/myproject/
⚠️ Важно: Рекурсивный
chmodможет снять специальные биты (SUID/SGID) с файлов. Чтобы их сохранить, используйтеchmod -R --preserve-root(в некоторых дистрибутивах) или применяйте права более точечно.
Шаг 6: Понимание и настройка специальных битов (SUID, SGID, Sticky Bit)
Эти биты добавляются к стандартным правам и меняют поведение.
- SUID (Set User ID) — 4xxx (работает только для исполняемых файлов).
- Признак:
-rwsr-xr-x(виденsвместоxу владельца). - Эффект: Файл выполняется с правами своего владельца, а не того, кто его запустил.
- Пример:
/usr/bin/passwdимеет SUID, чтобы обычный пользователь мог изменить системный пароль (файл/etc/shadowдоступен только root). - Установка:
chmod 4755 /path/to/fileилиchmod u+s /path/to/file.
- Признак:
- SGID (Set Group ID) — 2xxx.
- Для файлов: Аналогично SUID, но выполнение происходит с правами группы-владельца файла.
-rwxr-sr-x. - Для каталогов: Наследование группы. Все новые файлы, созданные в этом каталоге, будут принадлежать группе каталога, а не группе пользователя-создателя.
drwxrwsr-x. - Пример: Общие папки для разработки (
/srv/shared). - Установка:
chmod 2770 /shared_folderилиchmod g+s /shared_folder.
- Для файлов: Аналогично SUID, но выполнение происходит с правами группы-владельца файла.
- Sticky Bit — 1xxx (обычно для каталогов).
- Признак:
drwxrwxrwt(виденtвместоxу "остальных"). - Эффект: Пользователь может удалять/переименовывать файлы в каталоге только если он является владельцем этого файла (или каталога).
- Классический пример:
/tmp— любой пользователь может создавать файлы, но удалять может только их владелец. - Установка:
chmod 1777 /tmpилиchmod o+t /some/folder.
- Признак:
Проверка результата
- После изменений снова выполните
ls -l <файл>и убедитесь, что колонка прав доступа изменилась в соответствии с вашими действиями. - Практический тест: Попробуйте выполнить действие, которое должно быть разрешено/запрещено.
- Для файла:
cat file.txt(чтение),echo "test" >> file.txt(запись),./script.sh(выполнение). - Для папки:
cd /folder/(доступ к каталогу требуетx),touch /folder/newfile(создание файла требуетwиxна папке).
- Для файла:
- Если действие не удалось, а права выглядят корректно, проверьте, не является ли файл/папка символической ссылкой (
lв начале строкиls -l). Права ссылки не важны, важны права на目标 объект.
Возможные проблемы
- Ошибка
Operation not permittedприchownилиchmodна системных файлах: Вы не являетесь владельцем файла и не используетеsudo. Либо файл находится на смонтированной в режимеnoexec/nosuidфайловой системе. Permission deniedпри попытке выполнитьchmod/chown: У вас недостаточно прав на изменение метаданных этого файла (вы не root и не владелец). Используйтеsudoесли это системный файл, или смените владельца, если это ваш файл.- После
chmod -R 777 /some/dirничего не работает: Вы сняли все специальные биты (SUID/SGID) с исполняемых файлов. Некоторые системные утилиты (например,sudo) перестанут работать. Восстановите права из резервной копии или переустановите пакет. - Не могу записать в папку, хотя у меня
rwxна файл: Запомните: для создания/удаления файлов в папке нужны права на саму папку (wиx), а не на файл. - Бит
s(SUID/SGID) не отображается послеchmod? Убедитесь, что вы устанавливаете его на исполняемый файл (с битомx). Еслиxнет,sне появится.chmod 4755 file(а неchmod 4766).