[DEV] setuid/setgid executable loading
Created by: MeerkatBoss
Поскольку при загрузке исполняемого файла с выставленным setuid
или setgid
битом должен обновляться effective user id (EUID) или effective group id (EGID) загруженного процесса, предлагается делегировать загрузку и выставление EUID/EGID файловой системе (в противном случае процессы смогли бы произвольно менять свои привилегии).
Помимо этого, процессы, у которых EUID или saved user id (SUID) не совпадает c real user id (RUID), должны быть недоступны для редактирования через системные вызовы SYS_map_region
, SYS_alloc_region
, SYS_unmap_region
и SYS_set_trapframe
для предотвращения подмены исполняемого кода процесса, имеющего повыышенные привилегии. Аналогично следует поступить с процессами имеющими EGID или saved group id (SGID), отличный от real group id (RGID).
Для реализации изменений нужно преобразовать библиотечную функцию spawn
в RPC вызов сервера файловой системы.