Технологии #Linux #Ubuntu #Сервер #Безопасность #Терминал #Инструменты

Калькулятор chmod: права доступа в Linux простыми словами

Калькулятор chmod: отметьте галочки — получите число 755 или 644, буквы rwxr-xr-x и готовую команду. Что значат права в ls -l, какие ставить для сайта, SSH-ключей и общих папок, почему 777 — плохая идея.

11 минут 1

Права доступа — первое, обо что спотыкаются в Linux: Permission denied при запуске скрипта, сайт, который не может записать картинку, SSH, который отказывается принимать ключ. Всё это решается одной командой chmod — если знать, какое число в неё подставить.

Калькулятор ниже переводит права туда и обратно: отметьте галочки — получите число и буквы, введите 644 или вставьте строку из ls -l — увидите, кто что может. Под ним готовая команда и объяснение простыми словами, а внизу — частые варианты для сайта, ключей и общих папок.

Введите число, буквы или вставьте начало строки из ls -l — остальное пересчитается само.

Чтениеr = 4Записьw = 2Запускx = 1 Итого Владелецпользователь, которому принадлежит файл 0 Группаучастники группы файла 0 Остальныевсе остальные пользователи 0
Особые биты: 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

Каждое право — это число, а тройка прав — их сумма:

ПравоБукваЧисло
Чтениеr4
Записьw2
Запускx1
Ничего-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-бит.

Какие права ставить: частые варианты

ПраваБуквамиГде использовать
644rw-r--r--обычные файлы: страницы сайта, картинки, конфиги без паролей
755rwxr-xr-xпапки и исполняемые скрипты
600rw-------приватные ключи SSH, файлы с паролями и токенами, .env
700rwx------папка ~/.ssh, личные папки и скрипты «только для себя»
640rw-r-----конфиг, который читает служба из группы, но не все остальные
750rwxr-x---папка, открытая владельцу и группе
664 / 775rw-rw-r-- / rwxrwxr-xобщие файлы и папки для нескольких пользователей одной группы
2775rwxrwsr-xобщая папка, где новые файлы наследуют группу папки
1777rwxrwxrwtпапка для всех, как /tmp: писать могут все, удалять — только своё
400r--------только чтение, даже для владельца — защита от случайной правки

Любой вариант можно открыть в калькуляторе по ссылке: например, /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.

Ошибка доступа почти всегда означает одно из двух:

  1. Не тот владелец. Программа работает от пользователя, которому файл не принадлежит. Решение — chown, а права оставить 755/644.
  2. Нет права на папку выше. Чтобы открыть /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Новый файлНовая папкаКогда использовать
022644755по умолчанию в большинстве систем
002664775совместная работа в группе
027640750серверы: остальные ничего не видят
077600700максимально приватно

Для одной сессии достаточно команды 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.

Статья помогла?

Комментарии

Пока никто не написал. Будьте первым — вопрос или свой опыт одинаково полезны.

Комментарий появится после проверки. Ссылки и реклама не публикуются.