Execução de jobs upstart como usuários não privilegiados

139

Qual é a maneira canônica de um trabalho inicial mudar seu ID de usuário e executar o script como um usuário sem privilégios?

Obviamente, pode-se usar su ou sudo , mas isso parece hacky (e pode gerar linhas de log desnecessárias).

    
por aaronsw 11.03.2009 / 15:26

8 respostas

108

Com o upstart v1.4, o setuid e o setgid são suportados nativamente no arquivo de configuração.

    
por 09.09.2012 / 13:26
85

Perguntando sobre o canal #upstart na freenode, o assunto oficial é:

A future release of Upstart will have native support for that, but for now, you can use something like:

exec su -s /bin/sh -c 'exec "$0" "$@"' username -- /path/to/command [parameters...]
    
por 18.01.2011 / 02:41
17

Que tal usar start-stop-daemon?

exec start-stop-daemon --start --chuid daemonuser --exec /bin/server_cmd

De Livro de receitas do Upstart :

The recommended method for Debian and Ubuntu systems is to use the helper utility start-stop-daemon. […] start-stop-daemon does not impose PAM ("Pluggable Authentication Module") limits to the process it starts.

Nota: start-stop-daemon não é suportado no RHEL.

    
por 23.12.2010 / 16:11
13

Existem várias maneiras de fazer isso, todas com semântica um pouco diferente, particularmente relacionadas à associação ao grupo:

  • setuidgid colocará você no grupo que você especificar.

    • O daemontools original ' setuidgid colocará você somente nesse grupo, para que você não possa acessar arquivos pertencentes a outros grupos dos quais você é membro.
    • Os setuidgid do daemontools-encore e o setuidgid do conjunto de ferramentas ambos têm uma opção -s (aka --supplementary ) que o colocará nesse grupo, e também coloque você em todos os grupos suplementares para o usuário que você especificar.
  • Usar newgrp depois de se tornar o usuário com menos privilégios adicionará um único grupo ao seu groupset, mas também criará um novo subshell, dificultando o uso dentro de scripts.

  • start-stop-daemon preserva sua participação no grupo e faz muito mais do que apenas setuid / setgid.

  • chpst -u username:group1:group2:group3... commandname permitirá que você especifique exatamente quais membros do grupo adotar, mas (no Ubuntu ) ele só vem com o pacote runit , que é uma alternativa para upstart .

  • su -c commandname username seleciona todos os membros do grupo de nome de usuário, assim como sudo -u username commandname , então eles provavelmente são o caminho para o menor espanto.

por 24.12.2010 / 01:00
8

Use setuidgid do pacote daemontools .

Documentação aqui: link

    
por 11.03.2009 / 16:50
4

Em uma instância do Ubuntu 10.10 no Amazon EC2, tive mais sorte com o comando start-stop-daemon .

Eu também lutei com algumas das outras sub-inscrições . Eu estou chamando um aplicativo python com um virtualenv específico e alguns parâmetros para o meu programa executado.

O seguinte é o que funcionou para mim.

script
  export PYTHONPATH=.:/home/ubuntu/.local/lib/python2.7/site-packages/:/home/ubuntu/python/lib/python2.7/site-packages/
  exec start-stop-daemon --start  --chuid ubuntu --exec /home/ubuntu/python_envs/MyProj/bin/python /home/ubuntu/www/MyProj/MyProj.py -- --config-file-dir=/home/ubuntu/www/MyProj/config/ >> /home/ubuntu/startup.log 2>&1 &
end script

O PYTHONPATH é obter alguns pacotes instalados da origem para o caminho do módulo PYTHON quando esse trabalho de inicialização é executado. Eu tive que fazer tudo em caminhos absolutos porque a estrofe chdir não parecia funcionar.

    
por 06.01.2012 / 20:52
3

Eu estava usando o CentOS 6, e não consegui que o hack recomendado (para o Upstart 0.6.5) funcionasse para mim, nem o truque 'su' porque o número de garfos envolvidos (4 eu acho) não foi rastreado por 'esperar garfo' ou 'esperar daemon'.

Eu acabei de fazer

chown user:group executable
chmod +s executable

(ou seja, defina o bit setuid e mude a propriedade).

Pode não ser o método mais seguro, mas para um projeto interno de P & D, não importava em nosso caso.

    
por 27.08.2014 / 23:56
0

Existe uma terceira possibilidade, dependendo do que você está tentando realizar. Você pode ser capaz de afrouxar os controles de acesso nos arquivos / dispositivos em questão . Isso pode permitir que um usuário sem privilégios monte ou acesse itens aos quais normalmente não seria permitido. Apenas tenha certeza de que você não está dando as chaves para o reino no processo.

Você também pode alterar o tempo limite do cache de senha sudo . Mas eu não recomendo a menos que sua máquina seja fisicamente segura (ou seja, você acredita que é improvável que um transeunte tente obter acesso ao sudo).

Há uma boa razão para que haja poucas maneiras de realizar ações privilegiadas e que elas executem o logging desnecessário necessário . Restrições frouxas seriam um risco à segurança do seu sistema, e a falta de registro significaria que não há como saber o que aconteceu quando você foi comprometido.

Se o tamanho de seus arquivos de log é uma preocupação, então algo provavelmente está errado. O Sudo gera apenas uma linha por uso em condições normais.

    
por 11.03.2009 / 18:07