Se eu sudo executar um arquivo de script Bash, todos os comandos dentro do script Bash serão executados também como sudo?

27

Eu quero escrever um script de pós-instalação automatizado no Bash (chamado post-install.sh , por exemplo). O script irá automaticamente adicionar e atualizar repositórios, instalar e atualizar pacotes, editar arquivos de configuração, etc.

Agora, se eu executar este script, por exemplo com sudo post-install.sh , serei solicitado apenas uma senha sudo ou será necessário inserir a senha sudo em cada chamada de um comando dentro da script, que precisa de sudo permission? Em outras palavras, os comandos dentro do script bash 'herdam' as permissões de execução, por assim dizer?

E, se eles realmente fizerem , ainda há uma possibilidade de que as permissões sudo expirem (se, por exemplo, um comando específico demorar o suficiente para exceder o tempo limite sudo )? Ou será que a entrada inicial da senha sudo durará por toda a duração do script inteiro?

    
por Decent Dabbler 15.02.2014 / 02:01

3 respostas

36

Q#1: Will I only be prompted for a sudo password once, or will I need to enter the sudo password on each invocation of a command inside the script, that needs sudo permission?

Sim, uma vez, durante a execução do seu script.

NOTA: Quando você fornece credenciais para sudo , a autenticação normalmente é válida por 5 minutos no shell em que você digitou a senha. Além disso, qualquer processo filho executado a partir desse shell ou qualquer script executado no shell (seu caso) também será executado no nível elevado.

Q#2: is there still a possibility that the sudo permissions will time out (if, for instance, a particular command takes long enough to exceed the sudo timeout)? Or will the initial sudo password entrance last for the complete duration of whole script?

Não, eles não terão tempo limite no script. Somente se você estivesse interativamente digitando-os no shell em que as credenciais foram fornecidas. Toda vez que sudo é executado dentro deste shell, o timeout é resetado. Mas no seu caso, as credenciais permanecerão enquanto o script estiver sendo executado e executando comandos de dentro dele.

trecho da página man do sudo

This limit is policy-specific; the default password prompt timeout for the sudoers security policy is 5 minutes.

    
por 15.02.2014 / 02:15
17

bash e todos os seus processos filhos serão executados com permissões de superusuário. Portanto, você não precisará inserir novamente uma senha para os comandos no seu script bash.

O tempo limite sudo aplica-se apenas à invocação separada (mais recente) de sudo . Isso não afetaria seu processo bash já em execução ou qualquer um de seus descendentes.

    
por 15.02.2014 / 02:15
3

Essas respostas provavelmente estão corretas. No entanto, essa não é a maneira geralmente usada (até onde eu sei) para criar scripts bash que exigem sudo de permissões. Geralmente, na parte superior do script, você assume que ele não foi executado com sudo permissões e, em vez disso, chama sudo -v yourself (que solicita ao usuário a senha) para 'configurar' uma sudo 'session' . Você pode echo algum texto explicativo antes do prompt ou substituir o próprio prompt de sudo pela -p , para permitir que o usuário saiba que você precisa de sudo access para alguns comandos.

Então, no seu script, você deve estar certo em chamar sudo nos comandos que o requerem (e apenas nos comandos que o exigem) sem solicitações adicionais de senha. Se você acha que um determinado grupo de comandos que são executados juntos em seu script (independentemente do uso de sudo ) se estenderá além do tempo limite do sudo, você pode chamar sudo -v no meio para emitir uma espécie de 'keep -alive 'a sessão sudo '.

Se a sudo 'sessão' expirar durante o script, o usuário será simplesmente perguntado por sua senha na próxima vez que você emitir um comando sudo no script.

    
por 16.02.2014 / 16:15