Как выполнить кросс-компиляцию ядра Linux?

Что изменилось, так это то, что /bin/shлибо стал bash, либо остался dash, который получил дополнительный флаг -p, имитирующий поведение bash.

Bash требует, чтобы флаг -pне сбрасывал привилегию setuid, как объяснено на его справочной странице :

If the shell is started with the effective user (group) id not equal to the real user (group) id, and the -p option is not supplied, no startup files are read, shell functions are not inherited from the environment, the SHELLOPTS, BASHOPTS, CDPATH, and GLOBIGNORE variables, if they appear in the environment, are ignored, and the effective user id is set to the real user id. If the -p option is supplied at invocation, the startup behavior is the same, but the effective user id is not reset.

Раньше dashне заботился об этом и разрешал выполнение setuid (, ничего не делая для его предотвращения ). Но на справочной странице Ubuntu 16.04 dashописана дополнительная опция, похожая наbash:

-p priv
Do not attempt to reset effective uid if it does not match uid. This is not set by default to help avoid incorrect usage by setuid root programs via system(3) or popen(3).

Этой опции не существовало в основной ветке разработки (, которая могла не реагировать на предложенный патч*)или в Debian 9, но присутствует в Debian buster, который получил патч с 2018 года.

ПРИМЕЧАНИЕ. :как объяснил Stéphane Chazelas, слишком поздно вызывать "/bin/sh -p"в system(), потому что system()запускает все, что передается через /bin/sh, поэтому setuid уже отброшен. Ответ derobert объясняет, как справиться с этим в коде до system().

*подробнее об истории здесь и там .

0
11.07.2021, 14:08
0 ответов

Теги

Похожие вопросы