Sobre a única coisa que é garantida (de alguma forma) a mesma em todas as instalações Linux é o kernel, porque é o kernel que o torna Linux.
O kernel possui um parâmetro de linha de comando init
que especifica o caminho e o nome do binário responsável por inicializar o ambiente do espaço do usuário após a inicialização do kernel. Normalmente /sbin/init
é usado para esse fim, no entanto, pode ser substituído por qualquer outro binário que você queira (que junto com as bibliotecas necessárias, arquivos de configuração etc.) está disponível no sistema de arquivos raiz.
No entanto, provavelmente não é isso que você deseja.
Praticamente tudo o que você faz além disso depende, de alguma forma, do comportamento do software instalado. Não há nenhuma garantia de que o binário init fique em / sbin / init.
A maioria dos softwares que enfrentam esse problema trabalha com isso, fornecendo várias configurações possíveis de inicialização e possui um script de instalação (ou o administrador) escolhe o apropriado para o sistema em questão; se nenhuma configuração apropriada for fornecida, o administrador deverá escrever sua própria.
Infelizmente, essa é a desvantagem da versatilidade que a maioria das distribuições Linux fornece. No Windows, existe apenas uma maneira de fazê-lo (bem, existem alguns, mas eles são definidos especificamente pela Microsoft e você não pode realmente fazer nada para alterá-los, mesmo como um administrador competente para programadores).
Os problemas decorrem de não querer executar como root (quero que os arquivos gerados sejam acessíveis pelo usuário)
Se esse era seu único problema, no entanto, a solução mais fácil seria simplesmente mudar a propriedade do arquivo imediatamente após a sua criação. Ou faça o que a maioria dos daemons faz: inicie como root, abandone privilégios e mude para uma conta sem privilégios depois de fazer o que a inicialização precisa ser feita como root (por exemplo, abrir soquetes para ouvir portas privilegiadas, ler arquivos de configuração protegidos na memória, etc.)
Eu imagino que o usuário conectado possa ser determinado de forma programática, mas você precisa ser muito mais específico do que exatamente você quer dizer com 'usuário conectado'. Detectar quais contas de usuário (se houver) está / está executando um binário específico é bastante trivial, varrendo a árvore de processos e pode levá-lo perto o suficiente do que você está tentando alcançar. Depois de saber qual conta de usuário segmentar, você pode alternar seu contexto de segurança para essa conta ou iniciar um processo separado como usuário (semelhante à forma como o sudo funciona).