Команда chmod меняет права доступа к файлам и папкам в Linux. Права можно задавать буквами (u+x), но чаще удобнее числами: chmod 644 file. Разберёмся, откуда берутся эти числа.
Как устроены права
У каждого файла три группы пользователей:
- владелец (user);
- группа (group);
- остальные (others).
И три права для каждой группы:
- r, чтение;
- w, запись;
- x, выполнение (для папки: право в неё зайти).
Посмотреть права можно командой ls -l: строка -rw-r--r-- означает, что владелец читает и пишет, а группа и остальные только читают.
Числовая запись
Каждому праву соответствует число:
r= 4;w= 2;x= 1.
Права группы складываются: чтение и запись дают 4 + 2 = 6, все три права 4 + 2 + 1 = 7. Три цифры подряд задают права для владельца, группы и остальных.
0:---, нет прав;4:r--, только чтение;5:r-x, чтение и выполнение;6:rw-, чтение и запись;7:rwx, все права.
Частые комбинации
644: владелец читает и пишет, остальные читают. Стандарт для обычных файлов.755: владелец всё, остальные читают и заходят. Стандарт для папок и скриптов.600: только владелец читает и пишет. Для ключей и файлов с паролями.700: только владелец, для личных папок, например~/.ssh.777: все могут всё. Почти всегда это ошибка и дыра в безопасности.
Примеры
chmod 644 index.php chmod 755 deploy.sh chmod 600 ~/.ssh/id_ed25519 chmod -R 755 /var/www/site/wp-content/uploads
Ключ -R применяет права рекурсивно ко всем файлам внутри. Будьте с ним осторожны: файлам обычно не нужен бит выполнения. Правильно задать права отдельно файлам и папкам можно так:
find /var/www/site -type d -exec chmod 755 {} \;
find /var/www/site -type f -exec chmod 644 {} \;
chmod 640 /var/www/site/wp-config.php
Это рекомендуемые права для сайта на WordPress. Владельцем файлов должен быть пользователь, от которого работает PHP. Меняется он командой chown.
Особые биты
Иногда встречается четвёртая цифра спереди: chmod 2775 dir. Она задаёт особые биты: 4 это setuid, 2 setgid (новые файлы получают группу папки), 1 sticky bit (удалять файлы может только их владелец, как в /tmp).
Права доступа это одна из основ безопасности сервера. Если нужен пользователь с административными правами, смотрите заметку о sudo-пользователе.