Linux chmod и chown: права на файлы и папки (755, 644)
Права на файл задаёт команда chmod, владельца меняет chown. Число вроде 755 это три цифры для владельца, группы и остальных: чтение даёт 4, запись 2, выполнение 1, а цифра равна сумме. Права 755 означают «владелец всё, остальные читают и выполняют».
Как читать права
ls -l script.sh
# -rwxr-xr-- 1 anna dev 120 Oct 25 10:00 script.shПервый символ тип (- файл, d папка, l ссылка), затем три группы по три символа: владелец (rwx), группа (r-x), остальные (r--). Владелец здесь anna, группа dev.
Числовая запись
Число | Права | Где используют |
|---|---|---|
|
| Обычные файлы: владелец пишет, остальные читают |
|
| Скрипты и папки: все могут войти и выполнить |
|
| Секреты и ключи: доступ только владельцу |
|
| Личные папки, например |
|
| Файлы с совместной записью группы |
|
| Полный доступ всем, почти всегда плохая идея |
Цифры считаются так: 7 = 4+2+1 (все права), 6 = 4+2 (чтение и запись), 5 = 4+1 (чтение и выполнение), 4 = только чтение.
Изменить права
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:
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 даёт право выполнения только папкам и уже исполняемым файлам.
Сменить владельца
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
umask # 0022Значение umask вычитается из 666 для файлов и 777 для папок: при 0022 новые файлы получают 644, а папки 755.
Что делать, если «Permission denied»
Проверьте права файла и всех папок на пути:
namei -l /var/www/site/index.html.Для входа в папку нужно право выполнения (
x), для просмотра списка файлов чтение (r).Убедитесь, что вы тот пользователь или входите в нужную группу:
id.
Частые вопросы
Почему не стоит делать chmod 777?
Любой пользователь системы и любая взломанная программа сможет менять файл. Почти всегда достаточно 755 или 664 и правильного владельца.
Что значит право выполнения для папки?
Это право входить в неё и обращаться к файлам по имени. Без x на папке файлы внутри недоступны, даже если сами имеют права 644.
Как посмотреть права числом?
stat -c '%a %n' файл покажет, например, 644 notes.txt.