Пользователи и права
Что это такое
Linux решает, что может делать процесс, глядя на пользователя, под которым он работает, группу, к которой он принадлежит, и права на файлы, которых он касается. У каждого файла есть владелец, группа и три набора прав — для владельца, группы и всех остальных. Root обходит всё это. Почти любой вопрос о доступе на хосте сводится к этим четырём фактам.
Почему это важно
Большинство инцидентов безопасности на уровне хоста — это ошибка в правах, а не экзотическая атака: закрытый ключ, оставленный читаемым всем пользователям, каталог, доступный на запись службе, которой это не нужно, служба, работающая под root, потому что заставить её работать под кем-то другим казалось крюком. Права — ещё и механизм, которым одну службу на общем хосте удерживают от чужих данных. Понять модель правильно с первого раза стоит минут; аудит её задним числом стоит долгого дня.
Ключевые идеи
Каждое решение о доступе включает пользователя, группу и три тройки прав
Чтение, запись и исполнение — для владельца, группы и остальных. Для каталога исполнение означает право пройти по нему или искать в нём, поэтому каталог может быть читаемым, но непригодным. Именно эту модель кодирует строка прав, и умение прочесть её слева направо — большая часть навыка.
-rw-r----- владелец: чтение, запись группа: чтение остальные: ничего
drwxr-x--- каталог: владелец может пройти и вывести список, группа — пройти, остальные — нет
Минимальные права означают, что служба не работает под root
Служба под root может переписать что угодно на хосте; та, что работает под своим непривилегированным пользователем, может быть ограничена. Привязка порта с низким номером — традиционная причина, по которой службы работают под root, и модель возможностей существует ровно для того, чтобы дать именно эту силу без всего остального. Сделать так, чтобы служба владела своими файлами и каталогами и ничем больше, — обычная конфигурация.
Владение важно не меньше режима
Файл, читаемый только своим владельцем, безопасен лишь тогда, когда владелец — правильный пользователь. Файл конфигурации, принадлежащий не той учётной записи, может быть прочитан не той службой или не читается нужной. Задавать и владельца, и режим осознанно, а не наследовать то, чем файл был создан, — вот что делает право осмысленным.
Группы — практичный инструмент для общего доступа
Вместо того чтобы делать файл доступным всем на чтение, добавьте каждого, кому он нужен, в группу и дайте доступ группе. Так набор читателей остаётся явным и обозримым. По той же причине каталогам, созданным для общей работы, задают группу и идентификатор set-group, чтобы созданные внутри файлы её наследовали.
Повышенный доступ должен быть логируемым и узким
Возможность стать root — самое ценное право на хосте. Выдача его покомандно через настроенную политику, а не через общий пароль root, делает выдачу узкой, а использование — проверяемым. Когда пароль root знают все, любое последующее расследование становится неоднозначным, потому что ничто не отличает их действия.
Ключи и пароли — это файлы с правами
Закрытый ключ, который могут прочитать другие, — скомпрометированный ключ. То же верно для файла с учётными данными службы. Проверка таких режимов — рутинный аудит, и он самый дешёвый из доступных.
Практика
Создайте ограниченную учётную запись службы
Создайте пользователя для службы, дайте ему владение собственным каталогом и запустите от этого пользователя команду, которая может читать свои файлы, но не чужие.
Готово, когда: команда успешно выполняется в своём каталоге и получает отказ, когда пытается прочитать файл вне него.
Проверьте права ключевых файлов
Найдите все закрытые ключи под каталогом и выведите их режим и владельца, затем исправьте те, которые могут читать другие.
Готово, когда: каждый ключ читаем только своим владельцем, и вы можете назвать этого владельца для каждого.
Частые ошибки
- Запуск сетевой службы под root из удобства — компрометация службы завладевает хостом; исправить: запускайте её под непривилегированным пользователем и дайте только нужные возможности.
- Файл, доступный всем на чтение, чтобы исправить ошибку доступа — данные теперь открыты каждому пользователю; исправить: дайте доступ конкретной группе.
- Общий пароль root — действия нельзя приписать, а отзыв невозможен; исправить: выдавайте повышенные команды каждому пользователю через политику.
- Игнорирование прав каталога — верный режим файла в каталоге, проходимом для всех, всё равно достижим; исправить: задавайте режим каталога так же осознанно, как режим файла.
- Закрытые ключи, оставленные читаемыми — ключ фактически публичен; исправить: проверяйте режимы ключей и исправляйте их.
Что читать дальше
- Администрирование Linux (06-cloud-devops/09-linux-administration) — хост, которым управляет эта модель прав, поэтому читайте первым.
- Процессы и службы (06-cloud-devops/09-linux-administration/02-processes-and-services) — под каким пользователем работают эти процессы и почему это тот же вопрос.