LINUX.ORG.RU

История изменений

Исправление 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 символов один раз, а потом попадаешь на нужную ветку или обламываешься сразу. А так тебе стопицот правил с одинаковым префиксом просматривать надо.

Ну, если не регексы, то префиксные деревья, тоже не сахар.