Em qual usuário um script / aplicativo Linux é executado?

1

CentOS aqui, mas eu não acho que isso importe, porque isso deve ser uma questão central do Linux (methinks). Ao tentar instalar o & Para executar o Apache Kafka (um executável Java) em uma caixa do CentOS, pensei em uma questão que se aplica ao Linux em geral.

Quando você executa um script de shell ou um executável nativo (como java ), o script / executável determina qual usuário é executado ou o SO determina qual usuário o script / executável é executado (ou seja, qual sempre usuário está executando o script / executável)?

É possível e / ou típico para os processos ditarem com qual usuário eles são executados? Significado pode um script / aplicativo especificar que ele deve ser executado como usuário root ou como algum outro tipo específico de usuário?

De qualquer forma, por que há uma advertência geral sobre a execução de processos como root ao executá-los como usuários não privilegiados?

    
por smeeb 28.09.2016 / 16:43

2 respostas

4

Resposta curta: ambos.

Resposta mais longa (e muito mais útil): por padrão, o programa será executado como o usuário que o lançou. No entanto, um programa pode, se for escrito para fazer isso e receber as permissões corretas, assumir privilégios de root e / ou retornar a um usuário de "sistema" para executar a si mesmo como. Essa capacidade deve ser explicitamente concedida ao programa, seja por meio do processo de empacotamento e instalação ou por meio de ações realizadas pelo administrador dessa máquina.

A advertência geral está presente porque a experiência histórica no UNIX e no Linux mostrou que, com bastante frequência, programas que usam privilégios elevados (ou seja, raiz) de que não precisam geralmente fazem coisas ruins ao sistema. Isso pode ser de corrupção de dados, a processos descontrolados que tornam o restante do sistema inutilizável / sem resposta, a processos que inadvertidamente permitem que invasores acessem seu sistema de maneiras que você não deseja que eles façam.

    
por 28.09.2016 / 17:06
0

Quando um 'shell script' é executado, ele é executado com as permissões do usuário que executou esse script. A maioria dos serviços (kafka, redis, nginx, etc) instalados usando um gerenciador de pacotes (yum, apt, etc) instalam scripts de ajuda para facilitar o controle desses serviços e criam usuários exclusivos associados a esses serviços (apache, redis, nginx, etc) Quase todos esses scripts auxiliares são executados como root inicialmente e, em seguida, descartam privilégios para um usuário de serviço atribuído a esse serviço. Isso garante que apenas usuários autorizados (por exemplo, usuários autorizados a executar o "serviço sudo kafka start") possam controlar efetivamente esses serviços. Isso significa que sysadmin Sally pode iniciar, parar e reiniciar o kafka e o nginx, enquanto o desenvolvedor Jim pode estar restrito a apenas iniciar e parar o kafka (ou algo assim). Embora um usuário java possa ser criado pelo administrador, não é algo que eu visto na prática, mais do que um usuário ruby ou um usuário python. Em vez disso, a propriedade do serviço é mais frequentemente atribuída a um usuário do serviço relacionado a esse serviço específico.

Alguns processos dependem de serem executados como root (geralmente o daemon do servidor ssh é executado como root.) Outros processos se recusarão a iniciar como root (postgresql é um deles).

Se você revisar um script de ajuda para um serviço em /etc/init.d/someservice (ou /etc/init/someservice.conf), o script real que causa o escalonamento ou as interrupções de privilégios é codificado lá. Alternativamente, se você estiver logado como usuário stephan, e executar algo como / usr / sbin / redis-server -c /etc/redis.conf, então verifique o processo a partir de outra janela, você verá que os redis são de propriedade por stephan.

Espero que ajude.

    
por 28.09.2016 / 22:21