Добавить в корзинуПозвонить
Найти в Дзене
Герман Геншин

Вся власть над вашими файлами! Как я моментально защищаю данные в Linux с помощью chmod — лайфхаки простого контроля

В Linux я сам решаю, кому читать, кто может менять и запускать мои файлы. Всё, что нужно для этого — команда chmod. На первый взгляд система прав кажется запутанной, но если поймёшь принцип — всё просто и даже немного увлекательно. В Linux у каждого файла и папки есть свой комплект разрешений, который определяет, что с ними могут делать разные пользователи. Всего три категории: владелец, группа и все остальные. Эти права управляют тем, кто может читать файл, вносить в него изменения или запускать (если это скрипт или программа). В случае папки — кто сможет войти в неё через cd и добавлять или менять её содержимое. Чтобы изменить права, просто пользуюсь chmod. А если хочу узнать, какие права стоят сейчас — смотрю через команду ls с нужными опциями. Если добавить к ls флаг -l, получаем подробный список со всеми правами для файлов и папок. Первый символ в каждой строке подскажет, что перед вами: обычный файл (тире -) или папка (буква d). Следом идут девять символов, по три на каждую груп
Оглавление

В Linux я сам решаю, кому читать, кто может менять и запускать мои файлы. Всё, что нужно для этого — команда chmod. На первый взгляд система прав кажется запутанной, но если поймёшь принцип — всё просто и даже немного увлекательно.

Как chmod меняет права доступа

В Linux у каждого файла и папки есть свой комплект разрешений, который определяет, что с ними могут делать разные пользователи. Всего три категории: владелец, группа и все остальные.

Эти права управляют тем, кто может читать файл, вносить в него изменения или запускать (если это скрипт или программа). В случае папки — кто сможет войти в неё через cd и добавлять или менять её содержимое.

Чтобы изменить права, просто пользуюсь chmod. А если хочу узнать, какие права стоят сейчас — смотрю через команду ls с нужными опциями.

Смотрим и разбираем права доступа

Если добавить к ls флаг -l, получаем подробный список со всеми правами для файлов и папок.

-2

Первый символ в каждой строке подскажет, что перед вами: обычный файл (тире -) или папка (буква d).

Следом идут девять символов, по три на каждую группу прав.

Внутри каждой тройки: r — чтение, w — запись, x — запуск. Если какое-то право не выдано, стоит тире (-).

На примере:

Строка, начинающаяся с d, — это каталог "archive" с владельцем "dave" и группой "dave".

Первая тройка символов — права владельца: всё разрешено (rwx) — читать, менять и запускать.

Вторая — права группы: r-x. То есть члены группы могут открывать и просматривать папку, но ничего не редактировать и не удалять.

Как получить шпаргалку по любой команде в терминале Linux

Иногда без подсказки не обойтись.

Третья тройка (r-x) — права всех остальных: они имеют доступ к просмотру и могут заходить в папку, но прав на изменения у них нет.

Если коротко: у dave — полный контроль, у остальных пользователей и группы — только просмотр и вход.

В других файлах (кроме скрипта mh.sh) у владельца и группы — права на чтение и запись, у "прочих" — только просмотр.

У скрипта mh.sh у владельца и группы разрешено всё, включая запуск, а у остальных — только чтение и запуск.

Синтаксис прав доступа: разбираюсь на практике

Чтобы сменить права через chmod, достаточно короткой команды, например u x — где "u" (user, кто), " " (добавить), и "x" (execute — разрешение на запуск).

За "кого" в chmod отвечают буквы:

Если не указывать категорию явно, chmod считает, что права выставляются для всех (a — all).

"Что сделать" обозначаем знаками:

"Какие права":

Как я настраиваю и меняю права доступа

Вот лежит, например, файл, для которого всем всё разрешено.

-3

Мне нужно, чтобы у пользователя dave остались права на чтение и запись, а всем остальным — только чтение. Делаю так:

-4

Знак "=" убирает все старые разрешения у выбранных категорий и выставляет только те, что указал.

Проверяю результат:

-5

Видно, что старые права исчезли, остались только нужные.

А если мне хочется просто добавить разрешение и не ломать текущие настройки — это тоже легко.

Допустим, я дописал скрипт и теперь пора сделать его исполняемым для всех пользователей. Смотрим, какие права стоят сейчас:

-6

Добавляю запуск для всех:

-7

Теперь после проверки вижу: право на запуск появилось у всех, остальные права не изменились.

-8

Кстати, можно было и без "a" (всем) — результат бы совпал.

Меняю права сразу у целой группы файлов

Очень удобно: изменить права можно у нескольких файлов одновременно.

Смотрю список файлов в каталоге:

-9

Допустим, я хочу убрать право на чтение у всех "прочих" для файлов с расширением ".page". Пишу такую команду:

-10

Проверяю результат:

-11

Теперь "прочие" пользователи не увидят файлы ".page", а остальные файлы не затронуты.

Если нужно сделать изменения сразу во всех подпапках — пригодится флаг -R (рекурсивно).

Учти: команда изменит права только на те папки, что сами заканчиваются на ".page" — таких почти не бывает. Для настоящей рекурсии по всем подкаталогам я комбинирую chmod с find.

Управляю правами с помощью числовых кодов: проще не бывает!

Есть способ ещё короче: права можно задать всего тремя цифрами — по одной для владельца, группы и прочих. Первая цифра — владелец, вторая — группа, третья — остальные.

Каждая цифра — сумма: 4 (чтение), 2 (запись), 1 (запуск). То есть 5 (4 1) — это "читать и запускать", 2 — просто "писать".

Эти горячие клавиши ускорят работу в терминале Linux!

Работаю не тяжелее, а умнее!

В числовом варианте я всегда полностью заменяю права целиком, не добавляю. Например, чтобы владелец мог читать, писать и запускать — 7 (4 2 1), только запуск — 1. Введёшь 1 — оставишь только запуск, остальные права исчезнут.

Вернём "прочим" право на чтение в файлах ".page". Владелец и группа — чтение и запись (6), прочие — просмотр (4), команда 664:

-12

Готово, права настроены как надо: у владельца и группы — как прежде, у "прочих" снова есть чтение.

Продвинутые возможности для особых случаев

Если открыть справку man chmod, найдете особые биты: SETUID, SETGID и "липкий" бит (sticky bit). Они используют в исключительных ситуациях, когда нужно что-то особенное.

Честно говоря, для большинства задач хватает базовых команд, описанных выше.

Linux-команды

Файлы

tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc · tr

Процессы

alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap

Сетевые

netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в: