Skip to content

chmod

Команда chmod используется в Linux и других Unix-подобных системах для изменения прав доступа к файлам и каталогам.

Формат команды и аргументы

Terminal window
chmod [опции] права файл

Например:

Terminal window
chmod 755 script.sh

Подробности об аргументах chmod

Команда chmod принимает различные аргументы:

Общий синтаксис

Terminal window
chmod [опции] [символьные или числовые права] файл(ы)

Часто используемые опции:

ОпцияОписание
-RРекурсивно изменить права во всех подкаталогах и файлах
-vПодробный вывод — показывает, какие изменения были сделаны
-cПоказывает изменения только для тех файлов, чьи права действительно были изменены
--reference=ФАЙЛУстановить права доступа, как у другого файла

Примеры:

Terminal window
chmod -R 755 /var/www # Рекурсивно задать права
chmod -v 644 file.txt # Показать результат изменения прав
chmod --reference=example.txt config.txt # Установить такие же права, как у example.txt

Чтение прав доступа

Команда ls -l показывает права доступа к файлам:

Terminal window
-rwxr-xr-- 1 user group 1234 Май 7 12:00 script.sh

Разбор:

  • Первая буква - — тип (файл, каталог и т.д.)

  • Далее три блока по 3 символа:

    • rwx — для владельца (user)
    • r-x — для группы (group)
    • r-- — для остальных (others)

Таблица прав и чисел

Каждое разрешение соответствует числу:

СимволыЗначениеОписание
r4чтение (read)
w2запись (write)
x1исполнение (execute)
-0отсутствие разрешения

Комбинации:

ПраваЦифраОбозначение
rwx74 + 2 + 1
rw-64 + 2
r-x54 + 1
r--44
-wx32 + 1
-w-22
--x11
---00

Примеры chmod

Terminal window
chmod 755 file # Владелец: rwx, группа: r-x, остальные: r-x
chmod 644 file # Владелец: rw-, группа: r--, остальные: r--
chmod 700 file # Владелец: rwx, остальные: ---
chmod 600 secret # Только владелец может читать и писать
chmod +x script.sh # Добавить право на выполнение для всех
chmod -x script.sh # Убрать право на выполнение для всех

Работа с каталогами

Для каталогов флаг x означает “доступ внутрь каталога”. Без него пользователь не может зайти в папку, даже если у него есть r (чтение).

Пример:

Terminal window
chmod 755 mydir # Владелец: полный доступ, другие могут просматривать
chmod 700 mydir # Только владелец может заходить в каталог

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

Чтобы изменить права доступа во всех подкаталогах и файлах, используется флаг -R:

Terminal window
chmod -R 755 /путь/к/каталогу

Это установит одинаковые права на все каталоги и файлы внутри указанного пути.

Осторожно с 777

Terminal window
chmod -R 777 /var/www # Очень небезопасно! Все получат полный доступ

Рекомендованный способ — разделять файлы и каталоги:

Terminal window
# Установить права 755 на все каталоги
find /путь -type d -exec chmod 755 {} \;
# Установить права 644 на все файлы
find /путь -type f -exec chmod 644 {} \;

Пояснение к аргументам:

  • find — команда поиска файлов и каталогов
  • /путь — начальный путь, где выполняется поиск
  • -type f — искать только обычные файлы (-type d — каталоги)
  • -exec — выполнить указанную команду над каждым найденным элементом
  • chmod 644 {} — применить chmod к текущему найденному файлу (подставляется вместо {})
  • \; — завершает команду -exec (обязательно экранировать точку с запятой в bash)
Это особенно полезно для веб-серверов и проектов, где важно разграничивать доступ к файлам и каталогам.
## Изменение прав по символам
Вместо чисел можно использовать буквенную форму:
```bash
chmod u+x file # Добавить исполнение владельцу
chmod go-w file # Убрать запись для группы и остальных
chmod a+r file # Добавить чтение всем (u+g+o)

Где:

  • u — владелец (user)
  • g — группа (group)
  • o — остальные (others)
  • a — все (all)

Проверка прав

Terminal window
ls -l filename # Просмотр прав
stat filename # Подробная информация о файле

Заключение

Команда chmod — важный инструмент для управления доступом к файлам и каталогам в Linux. Понимание цифрового и символьного форматов помогает эффективно настраивать безопасность системы.