Práticas recomendadas para evitar o erro de Jenkins: sudo: no tty present e nenhum programa askpass especificado

5

Ao executar qualquer comando sudo do Jenkins, recebo o seguinte erro:

sudo: no tty present and no askpass program specified

Entendo que posso resolver isso adicionando uma entrada NOPASSWD ao meu arquivo /etc/sudoers , o que permitirá ao usuário jenkins executar comandos sem precisar de uma senha. Eu posso adicionar uma entrada como esta:

%jenkins ALL=(ALL)NOPASSWD:/home/vts_share/test/sudotest.sh

... mas isso leva ao seguinte problema: como evitar a especificação do caminho completo no arquivo sudoers?

Eu posso adicionar uma entrada como esta:

%jenkins ALL=NOPASSWD: ALL

... mas isso permite que o usuário jenkins evite a solicitação de senha para todos os comandos, o que parece um pouco inseguro. Estou apenas curioso sobre quais são minhas opções aqui, e se há alguma prática recomendada que eu deva considerar.

    
por s g 02.07.2013 / 21:21

2 respostas

5

Acredito que você esteja procurando por essa opção em man sudoers

   requiretty      If set, sudo will only run when the user is logged in to a real tty.  When this flag     
                   is set, sudo can only be run from a login session and not via other means such as        
                   cron(8) or cgi-bin scripts.  This flag is off by default.     

aqui estão minhas recomendações na ordem das mais seguras para as menos seguras:

1) não deixe Jenkins sudo em tudo. Se você estiver fazendo construções de pacotes, procure em fakeroot . Jenkins não precisa de raiz para construir software.

2) se você fizer precisar que o jenkins tenha raiz, considere restringir as habilidades do sudo com as opções sudoers Cmnd .

3) execute jenkins em uma VM descartável. se alguém o criar, reconstrua-o e reavalie suas escolhas de segurança. Eu também recomendaria rodar jenkins como um serviço de intranet, acessível apenas via LAN ou VPN. não esqueça de incluir a autenticação!

    
por 03.07.2013 / 07:14
5

Se você executar um sudo como usuário do Jenkins como parte de um script, precisará de duas coisas.

  1. cópia exata do comando .. como / bin / chown www-data / var / www

  2. comando sudo -n ex

o -n dirá para não solicitar um aviso se for um NOPASSWD.

isso me consertou para executar o sudo em um script que o jenkins chama

    
por 20.05.2014 / 18:33