Вопрос: Имеется Astra Linux 1.6 с настроенной системой разграничения мандатных прав доступа. В ней создан пользователь teacher, который должен работать на уровне секретности 2. Вопрос в том, можно ли изменить файл в мандатном каталоге данного пользователя от пользователя root через команду sed?
Ответ: да, можно.
Если надо изменить файл:
/home/.pdp/teacher/l2i0c0x0t0x0/.fly/theme/current.themerc
То перед изменением файла внутри директории, в которой он находится, надо поставить на директорию мандатные права с флагом ccnr. Флаг ccnr позволяет находиться внутри директории файлам, мандатная метка которых ниже чем мандатная метка самой директории:
pdpl-file 2:0:0:ccnr /home/.pdp/teacher/l2i0c0x0t0x0/.fly/theme/
Это нужно из-за того, что директория в рамках мандатной модели считается контейнером. А при изменении файла через команду sed в режиме inplace, в данном каталоге должна существовать возможность создавать временный файл, который будет иметь мандатную метку 0:0:0.
Далее можно поменять содержимое файла через sed.
После изменения файла надо выполнить следующие команды:
1. Так как файл был отредактирован и по сути создан заново через временный файл, у него мандатная метка 0:0:0, и ее надо "поднять" до мандатной метки 2:0:0. Если этого не сделать, то невозможно будет убрать флаг ccnr.
pdpl-file 2:0:0 /home/.pdp/teacher/l2i0c0x0t0x0/.fly/theme/current.themerc
2. У директории надо убрать флаг ccnr через команду "вычитания" мандатных прав:
pdpl-file -s 2:0:0:ccnr /home/.pdp/teacher/l2i0c0x0t0x0/.fly/theme/
Судя по рекомендациям поддержки, данную команду можно заменить следующей командой прямой установки мандатных прав, с нулевым флагом (четвертое поле мандатных прав):
pdpl-file 2:0:0:0 /home/.pdp/teacher/l2i0c0x0t0x0/.fly/theme/
В результате и файл и директории примут такое же состояние мандатных меток, которое было до изменения.