Калькулятор chmod: права доступа в Linux простыми словами
Калькулятор chmod: отметьте галочки — получите число 755 или 644, буквы rwxr-xr-x и готовую команду. Что значат права в ls -l, какие ставить для сайта, SSH-ключей и общих папок, почему 777 — плохая идея.
Права доступа — первое, обо что спотыкаются в Linux: Permission denied при запуске скрипта, сайт, который не может записать картинку, SSH, который отказывается принимать ключ. Всё это решается одной командой chmod — если знать, какое число в неё подставить.
Калькулятор ниже переводит права туда и обратно: отметьте галочки — получите число и буквы, введите 644 или вставьте строку из ls -l — увидите, кто что может. Под ним готовая команда и объяснение простыми словами, а внизу — частые варианты для сайта, ключей и общих папок.
Введите число, буквы или вставьте начало строки из ls -l — остальное пересчитается само.
Особые биты: setuid, setgid, sticky
Как читать права в выводе ls -l
Команда ls -l показывает права первой колонкой:
$ ls -l
-rw-r--r-- 1 nixlife nixlife 4096 сен 28 10:12 notes.txt
-rwxr-xr-x 1 nixlife nixlife 812 сен 28 10:15 backup.sh
drwxr-x--- 2 nixlife www-data 4096 сен 28 10:20 uploadsПервый символ — тип: - обычный файл, d папка, l ссылка. Дальше три тройки по три символа:
| Позиции | Для кого | Пример rwxr-xr-x |
|---|---|---|
| 2–4 | владелец (user, u) | rwx — читать, изменять, запускать |
| 5–7 | группа (group, g) | r-x — читать и запускать |
| 8–10 | остальные (others, o) | r-x — читать и запускать |
Буква на месте — право есть, прочерк — нет. Следом идут владелец и группа файла: в примере выше папка uploads принадлежит пользователю nixlife и группе www-data, от которой обычно работает веб-сервер.
Точное число прав покажет stat:
stat -c '%a %A %U:%G %n' *Откуда берутся цифры 755 и 644
Каждое право — это число, а тройка прав — их сумма:
| Право | Буква | Число |
|---|---|---|
| Чтение | r | 4 |
| Запись | w | 2 |
| Запуск | x | 1 |
| Ничего | - | 0 |
Отсюда всё остальное: rwx = 4 + 2 + 1 = 7, r-x = 4 + 1 = 5, rw- = 4 + 2 = 6, r-- = 4. Три цифры подряд — это владелец, группа и остальные. Значит, 755 — владелец может всё, остальные читают и запускают, а 644 — владелец читает и пишет, остальные только читают.
Если цифр четыре, первая — особые биты (о них ниже). 0755 и 755 — одно и то же.
Права у файла и у папки работают по-разному
Самое неочевидное место. Буквы те же, а смысл у папок другой:
| Право | У файла | У папки |
|---|---|---|
r | прочитать содержимое | увидеть список файлов (ls) |
w | изменить содержимое | создавать, переименовывать и удалять файлы внутри |
x | запустить как программу | войти в папку (cd) и открыть файлы внутри |
Два следствия, которые экономят часы:
- Без
xв папку не зайти, даже если на ней стоитr. Поэтому папкам почти всегда нуженx:755или750, а не644. - Удалить файл можно без прав на сам файл — достаточно права записи на папку, в которой он лежит. Защищать от удаления нужно папку, а не файл. Для общих папок для этого есть sticky-бит.
Какие права ставить: частые варианты
| Права | Буквами | Где использовать |
|---|---|---|
| 644 | rw-r--r-- | обычные файлы: страницы сайта, картинки, конфиги без паролей |
| 755 | rwxr-xr-x | папки и исполняемые скрипты |
| 600 | rw------- | приватные ключи SSH, файлы с паролями и токенами, .env |
| 700 | rwx------ | папка ~/.ssh, личные папки и скрипты «только для себя» |
| 640 | rw-r----- | конфиг, который читает служба из группы, но не все остальные |
| 750 | rwxr-x--- | папка, открытая владельцу и группе |
| 664 / 775 | rw-rw-r-- / rwxrwxr-x | общие файлы и папки для нескольких пользователей одной группы |
| 2775 | rwxrwsr-x | общая папка, где новые файлы наследуют группу папки |
| 1777 | rwxrwxrwt | папка для всех, как /tmp: писать могут все, удалять — только своё |
| 400 | r-------- | только чтение, даже для владельца — защита от случайной правки |
Любой вариант можно открыть в калькуляторе по ссылке: например, /chmod-kalkulyator/#640 сразу покажет права 640 с объяснением.
Права для сайта: папкам 755, файлам 644
Типовая ситуация: сайт залили архивом, и у части файлов оказались странные права — 777 после Windows или 600 после распаковки. Правильно выставить всё разом одной командой chmod -R 755 нельзя: права на запуск получат все файлы. Делают две команды — отдельно для папок и для файлов:
cd /var/www/example.ru
find . -type d -exec chmod 755 {} +
find . -type f -exec chmod 644 {} +Файлы с паролями от базы данных (например, wp-config.php или config.local.php) лучше закрыть сильнее — 640 или 600, в зависимости от того, от какого пользователя работает PHP.
Права для SSH-ключей
SSH намеренно отказывается работать с ключом, который могут прочитать другие, и пишет:
WARNING: UNPROTECTED PRIVATE KEY FILE!
Permissions 0644 for '/home/nixlife/.ssh/id_ed25519' are too open.Лечится тремя командами:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519 ~/.ssh/authorized_keys ~/.ssh/config
chmod 644 ~/.ssh/id_ed25519.pubТа же история на сервере: если authorized_keys или домашняя папка доступны на запись группе или всем, SSH молча игнорирует ключ и спрашивает пароль. Как настроить вход по ключу с нуля, — в статье про защиту сервера после установки.
Почему 777 — плохая идея
chmod 777 — самый популярный «рецепт» на форумах: поставил, и ошибка пропала. Но это значит, что любой пользователь и любая программа на компьютере могут изменить или удалить файл. На сервере это прямой путь к взлому: через дыру в одном сайте злоумышленник допишет вредоносный код во все файлы с правами 777.
Ошибка доступа почти всегда означает одно из двух:
- Не тот владелец. Программа работает от пользователя, которому файл не принадлежит. Решение —
chown, а права оставить755/644. - Нет права на папку выше. Чтобы открыть
/srv/data/photos/1.jpg, нуженxна каждой папке по пути. Проверить всю цепочку разом:namei -l /srv/data/photos/1.jpg.
Для совместной работы нескольких пользователей — общая группа и права 775/664 или 2775, а не 777. Так устроена, например, общая папка в настройке Samba.
chmod буквами: добавить или убрать одно право
Число задаёт права целиком. Если нужно поменять только одно право, удобнее буквы: кому (u, g, o или a — всем), что сделать (+ добавить, - убрать, = установить ровно так) и какое право.
| Команда | Что делает |
|---|---|
chmod +x script.sh | разрешить запуск всем — так делают скрипты исполняемыми |
chmod u+x script.sh | разрешить запуск только владельцу |
chmod go-w file | запретить запись группе и остальным |
chmod o= file | убрать у остальных все права |
chmod u=rw,g=r,o= file | то же, что chmod 640 file |
chmod -R g+w shared/ | дать группе запись во всей папке |
chmod --reference=a.txt b.txt | скопировать права с одного файла на другой |
Калькулятор выше показывает обе записи — числом и буквами.
chown: владелец и группа
Права отвечают на вопрос «что можно», а владелец и группа — «кому». Меняются они командой chown (нужен sudo):
sudo chown nixlife file.txt # сменить владельца
sudo chown nixlife:www-data file.txt # владельца и группу
sudo chown -R www-data:www-data uploads/ # рекурсивно для всей папки
sudo chgrp media /srv/media # только группуЧтобы пользователь получил доступ к файлам группы, добавьте его в неё: sudo usermod -aG www-data nixlife — и перезайдите в систему, иначе новая группа не подхватится.
umask: какие права получают новые файлы
Почему новые файлы появляются с 644, а папки с 755? Из-за umask — маски, которая вычитается из максимальных прав (666 для файлов и 777 для папок). Посмотреть свою можно командой umask:
| umask | Новый файл | Новая папка | Когда использовать |
|---|---|---|---|
| 022 | 644 | 755 | по умолчанию в большинстве систем |
| 002 | 664 | 775 | совместная работа в группе |
| 027 | 640 | 750 | серверы: остальные ничего не видят |
| 077 | 600 | 700 | максимально приватно |
Для одной сессии достаточно команды umask 027, насовсем — добавить её в ~/.bashrc. Для служб systemd маска задаётся в юните строкой UMask=0027.
Особые биты: setuid, setgid и sticky
Четвёртая цифра спереди включает особые режимы. В ls -l они видны вместо x:
- setuid (4000) —
sу владельца, например-rwsr-xr-xу/usr/bin/passwd. Программа запускается с правами владельца файла, а не того, кто её запустил. Сами ставить почти никогда не нужно. - setgid (2000) —
sу группы. У папки: все новые файлы внутри получают группу папки, а не группу создателя. Идеально для общих папок:chmod 2775 /srv/shared. - sticky (1000) —
tу остальных, как у/tmp(drwxrwxrwt). Писать в папку могут все, но удалить или переименовать файл — только его владелец.
Большая буква (S или T) значит, что особый бит стоит, а право на запуск — нет. Обычно это ошибка.
Частые вопросы
Что значит chmod 755?
Владелец может читать, изменять и запускать (7), группа и остальные — читать и запускать (5 и 5). Стандарт для папок и скриптов: всем можно зайти и запустить, менять — только владельцу.
Чем отличается chmod 644 от 755?
У 644 нет права на запуск ни у кого. Для обычных файлов — картинок, страниц, конфигов — это правильно. Для папок 644 не подходит: без права x в них нельзя зайти.
Как сделать скрипт исполняемым?
Командой chmod +x script.sh, после чего его можно запускать как ./script.sh. Если скрипт должен запускать только владелец — chmod u+x script.sh или chmod 700 script.sh.
Почему после chmod всё равно Permission denied?
Проверьте три вещи: владельца файла (ls -l), права на все папки по пути (namei -l путь) и то, от какого пользователя работает программа. Ещё одна частая причина — диск смонтирован с noexec или это раздел NTFS/FAT, где права Linux не работают так, как обычно.
Как посмотреть права числом?
stat -c '%a %n' файл покажет, например, 644 notes.txt. Для всех файлов в папке — stat -c '%a %n' *.
Как изменить права только у папок или только у файлов?
Через find: find путь -type d -exec chmod 755 {} + для папок и find путь -type f -exec chmod 644 {} + для файлов. В калькуляторе выберите «только к папкам внутри» или «только к файлам внутри» — команда соберётся сама.
Нужен ли sudo для chmod?
Только если вы не владелец файла. Свои файлы можно менять без sudo, чужие и системные — через sudo chmod. Сменить владельца (chown) может только root.
Что дальше
Права — половина безопасности сервера. Вторая — закрыть вход по паролю и лишние порты: это в статье про защиту Ubuntu Server. А чтобы запускать скрипты по расписанию — например, резервное копирование каждую ночь, — пригодится генератор cron.
Если статья пригодилась — отметьте, это помогает выбирать темы
Статья помогла?
Комментарии
Пока никто не написал. Будьте первым — вопрос или свой опыт одинаково полезны.