Инструменты разработчика · Калькулятор Chmod
Поиск общедоступных файлов и двоичных файлов setuid с помощью find -perm
· Почему это важно
chmod Юникс контроль доступа
Два шаблона разрешений объясняют многие реальные инциденты: файлы, которые может изменить каждый, и программы, запускаемые с правами root. В этом посте показано, как найти оба с помощью find -perm и что с ними делать.
Рецензент просит предоставить вам список, которого у вас нет: какие файлы может изменять любой пользователь и какие программы повышают привилегии при запуске.
Проверка разрешений часто начинается с режимов, уже собранных где-то еще: например, 0002, 4000, 2000 или полного значения, например 4755. Калькулятор может декодировать эти числа в права владельца, группы и другие права, включая три специальных бита. Он не выполняет поиск в каталогах, не проверяет двоичные файлы и не производит инвентаризацию путей.
Рассматривайте каждый предоставленный режим как описание битов, а не как вердикт о файле. Введите его, сравните восьмеричное поле с символьным отображением и матрицей флажков, затем запишите, что изменилось. Право собственности, записи ACL, возможности и личность любого процесса, использующего этот путь, остаются фактами, которые можно собрать из реальной среды.
Доступность для записи во всем мире означает, что класс других имеет w — восьмеричный шаблон 0002 и почему -perm -0002 находит его независимо от других битов.
Значение 0002 изолирует другой бит записи. В обычном трехклассовом макете последняя цифра принадлежит всем, кроме классов владельца и группы, а ее компонент записи имеет вес 2. Поэтому полный режим, содержащий этот бит, будет отображать w в другом классе, хотя калькулятор сам не находит такие режимы.
Независимо от того, означает ли конкретное выражение find точное, всебитовое или любое битовое соответствие, это относится к документации find, а не к этому конвертеру. Вместо этого укажите результирующий режим. Например, 0666 становится rw-rw-rw-, а 0644 становится rw-r--r--; разница видна в группе и других позициях записи, не подразумевая, что любой из режимов соответствует определенному пути.
0002 предоставляет бит другой записи; найти соответствующую семантику являются внешними
Начальная цифра специального бита использует 4 для setuid и 2 для setgid. Таким образом, 4755 объединяет setuid с обычными разрешениями 755, а 2755 сочетает setgid с теми же завершающими битами. Калькулятор отображает эти маски отдельно и помещает их символические буквы в позицию выполнения владельца или группы при рендеринге в полном режиме.
Дело содержит полезные доказательства. Если setuid сопровождает выполнение владельца, позиция выполнения владельца отображает s; без выполнения отображается S. Setgid следует тому же правилу в позиции группы. Эти выходные данные декодируют предоставленное целое число, но они не проверяют программу, не определяют ее владельца, не запускают ее и не решают, оправдан ли специальный бит.
4000 и 2000 декодируются как setuid и setgid без аудита двоичных файлов.
Синтаксис поиска разрешений должен храниться отдельно от арифметики разрешений. Калькулятор принимает восьмеричный или девятизначный символьный режим и возвращает одно двенадцатибитное значение. Он не имеет представления для оператора поиска, предиката пути или правила сопоставления, поэтому внутри этого интерфейса невозможно различить запрос точного режима и запрос всех необходимых битов.
Декодируйте режим из каждого внешнего результата поиска, а не вставляйте выражение поиска. Три обычные цифры соответствуют владельцу, группе и другим, а необязательная начальная цифра соответствует setuid, setgid и Sticky. Этот рабочий процесс проверяет сообщаемые биты, но оставляет охват поиска и семантику сопоставления инструменту, создавшему список.
Для режимов точного, всебитового и любого битового поиска требуется документация по поиску.
Предположим, что аудит, выполненный в другом месте, сообщает 0666 и 4755. Ввод 0666 дает rw-rw-rw-, делая видимой запись в последней тройке. Ввод 4755 дает rwsr-xr-x: владелец имеет право чтения, записи и выполнения, а setuid заменяет символ выполнения владельца строчными буквами s, поскольку этот бит выполнения присутствует.
Второе попадание, такое как 4644, демонстрирует, почему символическая форма имеет значение. Он отображает rwSr--r-- с заглавной буквой S, показывающей setuid, в то время как выполнение владельца отсутствует. Калькулятор может сделать это несоответствие заметным. Он по-прежнему не может идентифицировать путь, установить, кто им владеет, проверить его содержимое или рекомендовать удаление бита.
Рабочий пример: декодирование предоставленных результатов аудита без путей сканирования.
Не восстанавливайте каждый необычный режим автоматически. Режим — это только один из входных данных для принятия решения, которое также зависит от цели, владельца, группы и требуемой операции. Страница намеренно не получает ничего из этого контекста. Предварительный просмотр его команды представляет собой инертный текст, и даже правильно указанный путь не открывается и не проверяется браузером.
Прежде чем изменить сообщаемый режим, сравните текущие и предлагаемые значения по одному биту за раз. Удаление другой записи из 0666 приводит к созданию 0664; удаление setuid из 4755 приводит к созданию 0755. Эти арифметические факты воспроизводимы, но для того, чтобы любое изменение сохранило рабочую нагрузку, требуются локальные доказательства, выходящие за рамки калькулятора и за пределами обычного битового пошагового руководства статьи 501.
Исключения и исправления требуют местного владения и подтверждения рабочей нагрузки.
Некоторые важные аспекты аудита отсутствуют. Маршрут не запрашивает записи ACL, возможности файлов, право собственности, компоненты пути, доступные для записи, поведение монтирования или обязательную политику. Он также не выполняет поиск, проверку PATH или обход хранилища. Таким образом, чистое преобразование говорит только о том, что указанное число и отображаемые буквы совпадают.
Держите эти границы видимыми в любом отчете. Запишите путь и метод сбора рядом с режимом декодирования, затем исследуйте идентификационные данные и дополнительные механизмы доступа с помощью соответствующих внешних инструментов. Калькулятор полезен для проверки записи, поскольку он отклоняет недопустимые восьмеричные цифры и предоставляет специальные биты; это не сканер файловой системы или механизм исправления.
Вывод: знайте свои записываемые и привилегированные файлы и используйте калькулятор Chmod для перевода каждого подозрительного режима, прежде чем его менять.
Полезный аудит разрешений отделяет обнаружение от интерпретации. Пусть внешний документированный процесс соберет возможные пути, а затем с помощью калькулятора преобразует каждый возвращенный режим в явные разрешения класса. Проверяйте дополнительную цифру специального бита так же внимательно, как и конечные три, поскольку 0755, 2755 и 4755 имеют обычные разрешения, но описывают разные двенадцатибитные значения.
Закончите с узким выводом: какие биты владельца, группы, другие и специальные биты содержит предоставленный режим. Не превращайте эту арифметику в необоснованное утверждение о рисках или требуемой политике. Калькулятор помогает рецензентам точно определить подозрительные режимы; действующая система должна предоставить доказательства владения, рабочей нагрузки и правоприменения, прежде чем кто-либо их изменит.