История изменений
Исправление gns, (текущая версия) :
Есть у тебя правила примерно как в аппарморе:
/{usr/,}bin/sh rmix,
/{usr/,}bin/bash rmix,
/{usr/,}bin/dash rmix,
/{usr/,}bin/rm rmix, #deleting /tmp/psp1534203998 (printing to file)
/usr/bin/bluetooth-sendto rmPUx,
/usr/bin/lpr rmPUx,
/usr/bin/paperconf rmix,
/usr/bin/gpgconf rmix,
/usr/bin/gpg rmCx -> gpg,
/usr/bin/gpgsm rmCx -> gpg,
/usr/bin/gpa rix,
/usr/bin/seahorse rix,
/usr/bin/kgpg rix,
/usr/bin/kleopatra rix,
И нужно проверить, open c такими флагами может открыть файл или -EACESS сразу?
Там идея в том, что бы все стопицот путей с масками доступа объединить в один регекс алгоритмом Томсона, потом преобразовать это все в один автомат и валидировать пути максимально быстро. Как это делается в Драгонбуке написано, но придется делать примерно как ты сказал. Есть еще засада типа /home/me/* — все на один уровень и /home/me/** — на всю глубину.
В твоей схеме все неплохо, хуже когда есть куча путе типа /usr/lib/lib<что-то>.so.<сколько-то>. Если есть один объединенный регекс, то ты просматриваешь первые 12 символов один раз, а потом попадаешь на нужную ветку или обламываешься сразу. А так тебе стопицот правил с одинаковым префиксом просматривать надо.
Ну, если не регексы, то префиксные деревья, тоже не сахар.
Исходная версия gns, :
Есть у тебя правила примерно как в аппарморе:
/{usr/,}bin/sh rmix,
/{usr/,}bin/bash rmix,
/{usr/,}bin/dash rmix,
/{usr/,}bin/rm rmix, #deleting /tmp/psp1534203998 (printing to file)
/usr/bin/bluetooth-sendto rmPUx,
/usr/bin/lpr rmPUx,
/usr/bin/paperconf rmix,
/usr/bin/gpgconf rmix,
/usr/bin/gpg rmCx -> gpg,
/usr/bin/gpgsm rmCx -> gpg,
/usr/bin/gpa rix,
/usr/bin/seahorse rix,
/usr/bin/kgpg rix,
/usr/bin/kleopatra rix,
Там идея в том, что бы все стопицот путей с масками доступа объединить в один регекс алгоритмом Томсона, потом преобразовать это все в один автомат и валидировать пути максимально быстро. Как это делается в Драгонбуке написано, но придется делать примерно как ты сказал. Есть еще засада типа /home/me/* — все на один уровень и /home/me/** — на всю глубину.
В твоей схеме все неплохо, хуже когда есть куча путе типа /usr/lib/lib<что-то>.so.<сколько-то>. Если есть один объединенный регекс, то ты просматриваешь первые 12 символов один раз, а потом попадаешь на нужную ветку или обламываешься сразу. А так тебе стопицот правил с одинаковым префиксом просматривать надо.
Ну, если не регексы, то префиксные деревья, тоже не сахар.