Sobre a única coisa que é garantidamente ser (um pouco) a mesma em todas as instalações do Linux é o kernel, porque o kernel é o que faz dele o Linux.
O kernel tem um parâmetro de linha de comando init
que especifica o caminho e o nome do binário que é responsável por inicializar o ambiente userspace após a inicialização do kernel estar completa. Normalmente, /sbin/init
é usado para esse propósito, no entanto, ele pode ser substituído por qualquer outro binário que você goste (junto com as bibliotecas necessárias, arquivos de configuração, etc.) disponíveis no sistema de arquivos raiz.
No entanto, provavelmente não é o que você deseja.
Praticamente tudo o que você faz além disso dependerá, de alguma forma, do comportamento do software instalado. Não há qualquer garantia de que o binário do init viverá em / sbin / init.
A maioria dos softwares que enfrenta este problema trabalha em torno dele, fornecendo várias configurações de init possíveis, e possui um script de instalação (ou possui o administrador) para escolher o apropriado para o sistema em questão; se nenhuma configuração apropriada for fornecida, espera-se que o administrador redija suas próprias informações.
Infelizmente, esta é a desvantagem da versatilidade que a maioria das distribuições Linux oferece. No Windows, há apenas uma maneira de fazê-lo (bem, existem alguns, mas eles são especificamente definidos pela Microsoft e você não pode realmente fazer nada para mudá-los, mesmo como um administrador competente em programadores).
The problems stem from not wanting to run as root (I want the files generated to be user-accessible)
Se esse foi seu único problema, no entanto, a solução mais fácil seria simplesmente alterar a propriedade do arquivo imediatamente após criá-lo. Ou faça o que a maioria dos daemons faz : inicie como root, então abandone os privilégios e mude para uma conta sem privilégios depois de fazer qualquer inicialização que precise ser feita como root (por exemplo, abrir sockets para escutar portas privilegiadas, ler arquivos de configuração protegidos na memória, etc.).
Eu imagino que o usuário logado pode ser programaticamente determinado, mas você precisa ser bem mais específico do que exatamente o que você quer dizer com 'usuário logado'. Detectar quais contas de usuários (se houver) estão / estão executando um determinado binário é bastante trivial, varrendo a árvore de processos, e você pode chegar perto o suficiente do que você está tentando alcançar. Depois de saber qual conta de usuário você deseja segmentar, você pode alternar seu contexto de segurança para essa conta ou iniciar um processo separado como esse usuário (semelhante a como o sudo faz seu trabalho pesado).