Права доступа к файлам и ACL в Linux

Новичок5 мин. чтения19

Права доступа и права собственности

В 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 или просто хочет навести порядок на собственном сервере.

Другие заметки

Linux для всех. Команды. Часть 1

В современной программной инженерии навык работы с командной строкой Linux не является просто “плюсом”, а часто необходимостью. Эффективное использование Linux-команд позволяет специалисту не только быстро и точно выполнять разнообразные задачи

Добро пожаловать!
В IT BlogPost

Рад видеть каждого из вас здесь, на страницах моего блога, который будет целиком и полностью посвящен миру системного администрирования. Сегодня отличная дата, чтобы начать вести данный блог. В эпоху технологий и быстро меняющихся инноваций, считаю важным поделиться своим опытом, знаниями и наблюдениями

Что такое машинное обучение?

Сегодня хочу поделиться небольшой заметкой про машинное обучение. Машинное обучение это будущее цифрового мира и подраздел искусственного интеллекта, который сосредоточен на использовании данных и алгоритмов для имитации способности человека учиться, постепенно повышая точность своих прогнозов