Devo usar o sudo em um script ou sudo um script inteiro?

1

Eu corro um pequeno grupo de máquinas macOS para os alunos (digamos 20) e todos eles precisam ser configurados com coisas como homebrew e outros pacotes e aplicativos. Eu estou escrevendo um script bash para instalar automaticamente todas as coisas necessárias em cada computador. Alguns dos comandos que vou usar requerem que sejam executados como root, mas não a maioria deles.

Eu queria saber se seria melhor usar individualmente cada um desses comandos no script ou deixar o sudo fora do script e sudo o script inteiro. Eu gostaria de saber qual deles será mais seguro (segurança), e melhor para minha situação. Eu prefiro não ser solicitado por uma senha em todo o script, mas também não quero executar todas as linhas do script como raiz, pois não é seguro.

    
por James C. 02.10.2017 / 22:14

4 respostas

2

Seguindo o princípio do menor privilégio, corra o mínimo que puder como root. Portanto, sudo de dentro do script.

Observe que na primeira vez que há um comando que precisa do sudo, você pode ser solicitado. (Isso não será verdade se você usar o NOPASSWD em / etc / sudoers, que é uma técnica que muitas pessoas evitarão como insegura.) No entanto, quando você executar o sudo e fornecer uma senha, o sudo se lembrará do sucesso de um período de tempo. Por padrão, esse período de tempo é de cinco minutos. Então, se você executou "sudo echo hi", digitou sua senha e depois executou o script, o script não seria sudo. Mais realisticamente, se você simplesmente executar o script, você provavelmente será solicitado a sudo uma vez ... presumindo que o script leva menos que dar minutos para concluir as tarefas restantes.

Eu não posso me preocupar com alguns comandos echo , mas se houver conteúdo significativo que pode ser feito sem permissões extras, então, por segurança, geralmente gosto de maximizar o quanto é feito com o mínimo de elevação.

Como exemplo de como minimizar permissões, deixe-me mostrar outro cenário de amostra. Em vez de: sudo -c "sample-command >> /var/log/output.txt"

Eu gosto de usar:
sample-command | sudo tee -a /var/log/output.txt >> /dev/null

Ao fazer isso, o comando inteiro é executado sem o sudo, e a única parte que acaba tendo permissões aprimoradas é a parte que precisa de permissões aprimoradas, que é a parte que grava no arquivo.

Claramente, meu objetivo aqui é minimizar o quanto é feito elevado. Da mesma forma, se todo o seu script não requer elevação, a abordagem preferida (de uma perspectiva de segurança) é minimizar o quanto é feito elevado.

    
por 15.01.2018 / 02:55
0

Depende de quais são os comandos. Para o comando que baixar da internet, é melhor não executá-los como root. Mas o outro comando deve estar ok para ser executado como root. O que eu faria é separar o comando em dois scripts: um para comandos não-root e outro para comandos root

Talvez eu possa ajudar mais se conseguir a lista de comandos.

    
por 02.10.2017 / 22:45
0

Normalmente, (eu suponho) você gostaria que o script fosse tratado como qualquer outro comando / aplicativo / utilitário. Nesse caso, você normalmente não seria solicitado a fornecer uma senha para escalonar seus privilégios; você seria negado e receberia um erro. Algo como:
Permission denied ou Operation not permitted .

Mas você mencionou especificamente que você: "... não deseja executar todas as linhas do script como root ..."
Então, eu realmente não vejo uma alternativa para explicitamente, e exclusivamente invocando sudo nas / das linhas específicas de código onde é relevante.

Você também mencionou que gostaria de: "... em vez disso, não ser solicitada uma senha em todo o script ..."
E as chances são que você não vai. Você não será avisado toda vez que o sudo for invocado, a menos que uma quantidade significativa de tempo passe entre as operações.

    
por 15.01.2018 / 02:14
0

Eu usei isso em todos os meus scripts quando queria que alguns comandos fossem executados como root e outros não

echo $admpass | sudo -S *COMMAND*
    
por 14.06.2018 / 16:09

Tags