Права доступа к файлам и ACL в Linux
Права доступа и права собственности
В Linux безопасность файлов и папок строится на простой, но очень мощной системе прав доступа. И если вы хотите, чтобы сервер работал как часы, а данные не «утекли», с этой темой придется разобраться. Посмотрим, как это вообще работает, зачем нужно и какими командами тут всё рулится.
Разбор прав доступа
Почти всё в Linux держится на трех китах, которые объединяются в известную всем комбинацию rwx-rwx-rwx. Каждой категории пользователей (владелец, группа, все остальные) можно выдать три базовых разрешения: чтение (r), запись (w) и выполнение (x). Именно они определяют, будут ли файлы вообще доступны.
Read (r)
Для обычного файла это просто возможность открыть его и посмотреть содержимое. Если же выдать права на чтение для директории, то пользователь или программа смогут увидеть список лежащих внутри файлов.
Write (w)
Тут всё логично: есть w — можно вносить изменения. Если право на запись стоит на папке, то внутри нее можно создавать, удалять или переименовывать объекты. Забавный нюанс: если у вас есть права на запись в сам файл, но нет прав на папку, где он находится, то удалить или переименовать этот файл не получится.
Execute (x)
В Windows исполняемые программы обычно легко узнать по расширениям вроде .exe. В Linux же пошли другим путем: чтобы скрипт или бинарник запустился, у файла должен стоять флаг execute. Причем сами по себе права на чтение или запись тут вообще не играют роли.
Управление разрешениями и владением
Просмотр разрешений
Чтобы глянуть, у кого какие права, достаточно вбить в консоли ls -l. В выводе вы увидите строку вроде rw-r--rw-. Кстати, часто вместо букв сисадмины используют цифры: чтение — это 4, запись — 2, а выполнение — 1.
Изменение разрешений (chmod)
За смену прав отвечает утилита chmod. Допустим, скачали вы скрипт и хотите его запустить. Пишем chmod +x filename — и готово, теперь файл стал исполняемым.
Изменение владельца (chown)
Периодически файлы нужно передать другому пользователю. Здесь выручает команда chown. Она умеет менять как владельца конкретного документа, так и быстро переназначать права на целые папки вместе со всем их содержимым.
Изменение групповых разрешений (chgrp)
Если нужно изменить только группу, к которой привязан файл, используйте chgrp. Это бывает особенно удобно, когда над одним проектом трудится сразу несколько человек с общим доступом к директории.
Разбор на реальных примерах
Теория — это прекрасно, но давайте посмотрим, как права работают в «боевых» условиях и где чаще всего спотыкаются новички.
Скрипт, который отказывается работать
Представьте: вы залили на сервер файл backup.sh. Пытаетесь его запустить: ./backup.sh, а система ругается: Permission denied. Заглядываем к нему через ls -l и видим права: -rw-r--r--.
- На что обратить внимание: У скрипта есть права на чтение и запись для владельца (
rw-), но нет того самогоx(выполнения). Из-за этого система просто не понимает, что этот файл можно запустить. - Почему это важно: Если вы сделаете точечное
chmod +x backup.sh, вы добавите нужный флаг и всё заработает безопасно. Но если вы по старой привычке новичков бахнетеchmod 777 backup.sh"чтобы уж наверняка", то любой пользователь в системе сможет этот скрипт не только запустить, но и незаметно переписать. А это — прямой путь к взлому.
Конфликт между файлом и папкой
Вы создали сводный отчет finance_report.txt и отдали его нужной группе бухгалтеров, разрешив им вносить правки. Сам файл лежит в системной папке /reports, на которую у них стоит право только на чтение и выполнение (r-x).
- На что обратить внимание: Бухгалтеры смогут без проблем открывать файл и сохранять в нем изменения. Но если кто-то из них попробует случайно удалить этот файл или создать в папке
/reportsновый, сервер сухо ответит отказом. - Почему это важно: Запомните ключевое правило: право переименовать или удалить файл живет на уровне папки, а не на уровне самого файла! Таким образом можно выстроить элегантную защиту: люди могут работать с документом, но не могут его случайно «снести». Это отличная страховка от пресловутого человеческого фактора. Выстраивание такой связки — признак хорошего тона в администрировании.
Продвинутые концепции
Списки контроля доступа (ACL)
Стандартной схемы с тремя категориями иногда банально не хватает. ACL — это эдакая продвинутая надстройка, которая позволяет распределять доступы гораздо тоньше и гибче, выходя за рамки привычной триады rwx.
Команды getfacl и setfacl
Через getfacl можно посмотреть текущие сложные правила, а с помощью setfacl — навесить специфические права конкретному пользователю, минуя создание десятков отдельных групп.
Заключение
Разобраться с тем, кому и что разрешено в системе — наверное, лучший вклад в спокойный сон системного администратора. Инструментов очень много, и все они позволяют выстроить защиту именно так, как требует ваша архитектура.
Полезные советы
- Возьмите за правило периодически проверять, кто и к чему имеет доступ, особенно на критически важных серверах.
- Не бойтесь внедрять ACL, если стандартная модель
rwxзагоняет вас в тупик — использовать костыли обычно выходит дороже. - Прежде чем выдать права рекурсивно на целую директорию (и особенно ставить пресловутый
chmod 777), дважды подумайте о последствиях.
Дополнительные ресурсы
Если хочется копнуть поглубже, почитайте документацию или man по ACL, а также разберите практические примеры применения getfacl и setfacl.
Этот текст пригодится тем, кто только знакомится с администрированием Linux или просто хочет навести порядок на собственном сервере.