--- title: Права доступа в Linux и команда chmod slug: linux-управление-правами-доступа/права-доступа-в-linux-и-команда-chmod --- Команда `chmod` используется в Linux и других Unix-подобных системах для изменения прав доступа к файлам и каталогам. ## Формат команды и аргументы ```bash chmod [опции] права файл ``` Например: ```bash chmod 755 script.sh ``` ## Подробности об аргументах `chmod` Команда `chmod` принимает различные аргументы: ### Общий синтаксис ```bash chmod [опции] [символьные или числовые права] файл(ы) ``` ### Часто используемые опции: | Опция | Описание | | ------------------ | --------------------------------------------------------------------------------- | | `-R` | Рекурсивно изменить права во всех подкаталогах и файлах | | `-v` | Подробный вывод — показывает, какие изменения были сделаны | | `-c` | Показывает изменения только для тех файлов, чьи права действительно были изменены | | `--reference=ФАЙЛ` | Установить права доступа, как у другого файла | Примеры: ```bash chmod -R 755 /var/www # Рекурсивно задать права chmod -v 644 file.txt # Показать результат изменения прав chmod --reference=example.txt config.txt # Установить такие же права, как у example.txt ``` ## Чтение прав доступа Команда `ls -l` показывает права доступа к файлам: ```bash -rwxr-xr-- 1 user group 1234 Май 7 12:00 script.sh ``` Разбор: * Первая буква `-` — тип (файл, каталог и т.д.) * Далее три блока по 3 символа: * `rwx` — для владельца (user) * `r-x` — для группы (group) * `r--` — для остальных (others) ## Таблица прав и чисел Каждое разрешение соответствует числу: | Символы | Значение | Описание | | ------- | -------- | --------------------- | | `r` | 4 | чтение (read) | | `w` | 2 | запись (write) | | `x` | 1 | исполнение (execute) | | `-` | 0 | отсутствие разрешения | Комбинации: | Права | Цифра | Обозначение | | ----- | ----- | ----------- | | `rwx` | 7 | 4 + 2 + 1 | | `rw-` | 6 | 4 + 2 | | `r-x` | 5 | 4 + 1 | | `r--` | 4 | 4 | | `-wx` | 3 | 2 + 1 | | `-w-` | 2 | 2 | | `--x` | 1 | 1 | | `---` | 0 | 0 | ## Примеры chmod ```bash 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` (чтение). Пример: ```bash chmod 755 mydir # Владелец: полный доступ, другие могут просматривать chmod 700 mydir # Только владелец может заходить в каталог ``` ## Рекурсивное изменение прав Чтобы изменить права доступа во всех подкаталогах и файлах, используется флаг `-R`: ```bash chmod -R 755 /путь/к/каталогу ``` Это установит одинаковые права на все каталоги и файлы внутри указанного пути. ### Осторожно с 777 ```bash chmod -R 777 /var/www # Очень небезопасно! Все получат полный доступ ``` ### Рекомендованный способ — разделять файлы и каталоги: ```bash # Установить права 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) ## Проверка прав ```bash ls -l filename # Просмотр прав stat filename # Подробная информация о файле ``` ## Заключение Команда `chmod` — важный инструмент для управления доступом к файлам и каталогам в Linux. Понимание цифрового и символьного форматов помогает эффективно настраивать безопасность системы.