Linux chmod и chown: права на файлы и папки (755, 644)

Категория: Bash · Язык: Bash · Обновлено:

Права на файл задаёт команда chmod, владельца меняет chown. Число вроде 755 это три цифры для владельца, группы и остальных: чтение даёт 4, запись 2, выполнение 1, а цифра равна сумме. Права 755 означают «владелец всё, остальные читают и выполняют».

Как читать права

Bash
ls -l script.sh
# -rwxr-xr-- 1 anna dev 120 Oct 25 10:00 script.sh

Первый символ тип (- файл, d папка, l ссылка), затем три группы по три символа: владелец (rwx), группа (r-x), остальные (r--). Владелец здесь anna, группа dev.

Числовая запись

Число

Права

Где используют

644

rw-r--r--

Обычные файлы: владелец пишет, остальные читают

755

rwxr-xr-x

Скрипты и папки: все могут войти и выполнить

600

rw-------

Секреты и ключи: доступ только владельцу

700

rwx------

Личные папки, например ~/.ssh

664

rw-rw-r--

Файлы с совместной записью группы

777

rwxrwxrwx

Полный доступ всем, почти всегда плохая идея

Цифры считаются так: 7 = 4+2+1 (все права), 6 = 4+2 (чтение и запись), 5 = 4+1 (чтение и выполнение), 4 = только чтение.

Изменить права

Bash
chmod 644 notes.txt             # числом
chmod 755 deploy.sh
chmod +x deploy.sh              # добавить право выполнения всем
chmod u+x,g-w,o-rwx deploy.sh   # символьно: владельцу +x, группе -w, остальным убрать всё
chmod -R 755 /var/www/site      # рекурсивно, все файлы и папки внутри

В символьной записи буквы u владелец, g группа, o остальные, a все. Знаки + добавить, - убрать, = задать точно.

Разные права для файлов и папок

Команда chmod -R 755 делает исполняемыми и обычные файлы. Чтобы задать папкам 755, а файлам 644:

Bash
find /var/www/site -type d -exec chmod 755 {} +
find /var/www/site -type f -exec chmod 644 {} +

Либо одной командой: chmod -R u=rwX,go=rX /var/www/site. Заглавная X даёт право выполнения только папкам и уже исполняемым файлам.

Сменить владельца

Bash
sudo chown anna notes.txt                   # владелец
sudo chown anna:dev notes.txt               # владелец и группа
sudo chown -R www-data:www-data /var/www    # рекурсивно
sudo chgrp dev notes.txt                    # только группа

Права по умолчанию: umask

Bash
umask           # 0022

Значение umask вычитается из 666 для файлов и 777 для папок: при 0022 новые файлы получают 644, а папки 755.

Что делать, если «Permission denied»

  1. Проверьте права файла и всех папок на пути: namei -l /var/www/site/index.html.

  2. Для входа в папку нужно право выполнения (x), для просмотра списка файлов чтение (r).

  3. Убедитесь, что вы тот пользователь или входите в нужную группу: id.

Частые вопросы

Почему не стоит делать chmod 777?

Любой пользователь системы и любая взломанная программа сможет менять файл. Почти всегда достаточно 755 или 664 и правильного владельца.

Что значит право выполнения для папки?

Это право входить в неё и обращаться к файлам по имени. Без x на папке файлы внутри недоступны, даже если сами имеют права 644.

Как посмотреть права числом?

stat -c '%a %n' файл покажет, например, 644 notes.txt.