Единственное, что гарантированно будет (в некоторой степени) одинаковым во всех установках Linux, - это ядро, потому что ядро - это то, что делает его Linux.
В ядре есть параметр командной строки init
который указывает путь и имя двоичного файла, который отвечает за загрузку среды пользователя после завершения инициализации ядра. Обычно /sbin/init
используется для этой цели, однако его можно заменить любым другим двоичным файлом, который вам нравится (который вместе с необходимыми библиотеками, файлами конфигурации и т.д.) Доступен в корневой файловой системе.
Однако, это, вероятно, не то, что вы хотите.
Практически все, что вы делаете помимо этого, каким-то образом зависит от поведения установленного программного обеспечения. Нет даже гарантии, что двоичный файл init будет жить в /sbin /init.
Большинство программ, которые сталкиваются с этой проблемой, обходят ее, предоставляя несколько возможных конфигураций инициализации и имея сценарий установки (или администратор), выбирающий тот, который подходит для рассматриваемой системы; если не предоставлена соответствующая конфигурация, администратор должен написать свою собственную.
К сожалению, это является недостатком универсальности, которую обеспечивает большинство дистрибутивов Linux. В Windows есть только один способ сделать это (ну, есть несколько, но они специально определены Microsoft, и вы не можете ничего сделать, чтобы изменить их, даже будучи опытным администратором-программистом).
Проблемы возникают из-за нежелания работать от имени пользователя root (я хочу, чтобы сгенерированные файлы были доступны пользователю)
Однако, если это была ваша единственная проблема , простым решением было бы просто сменить владельца файла сразу после его создания. Или сделайте то, что делает большинство демонов: запустите от имени пользователя root, затем отбросьте привилегии и переключитесь на непривилегированную учетную запись после выполнения любой инициализации, которая должна быть выполнена от имени пользователя root (например, открытие сокетов для прослушивания привилегированных портов, чтение защищенных файлов конфигурации в память, так далее.).
Я полагаю, что вошедший в систему пользователь может быть определен программно, но вам нужно быть гораздо более конкретным, чем то, что именно вы подразумеваете под «зарегистрированным пользователем». Определить, какие учетные записи пользователя (или учетные записи) (если таковые имеются) работают / работают с конкретным двоичным файлом, довольно тривиально, отсканировав дерево процессов, и может просто приблизить вас к тому, чего вы пытаетесь достичь. Как только вы узнаете, какую учетную запись пользователя выбрать, вы можете либо переключить контекст безопасности на эту учетную запись, либо запустить отдельный процесс в качестве этого пользователя (аналогично тому, как sudo выполняет свою грубую работу).