Devo usar 'sudo' ou 'su' em um script de inicialização?

5

Eu tenho um programa pessoal, que tem um design de servidor / cliente.

O servidor daemon parte dele, deve ser executado como seu próprio usuário limitado, e o programa não foi projetado para abandonar seus privilégios de root (se iniciados como root) como alguns programas Linux fazem.

Então, minha pergunta, em seu script de inicialização em /etc/init.d/ , devo usar sudo ou su para executar esse daemon como outro usuário? Isso faz diferença? Qualquer um dos dois funcionará? Algo mais?

O sistema operacional é um GNU / Linux customizado, construído usando instruções "Linux From Scratch", e ambos os programas rodam corretamente.

    
por Waleed Hamra 19.02.2013 / 14:46

4 respostas

2

Se você pode facilmente alterar o programa para que ele descarte seus privilégios, essa é a melhor abordagem. Mudar o ID do usuário nos scripts de inicialização é pouco inteligente e bastante inflexível, mesmo que "funcione".

    
por 19.02.2013 / 18:32
3

Dos dois, eu usaria su para essa finalidade, porque é menos configurável e, portanto, mais previsível. Se você usar sudo em seu script de init e (acidentalmente ou intencionalmente) remover a entrada root ALL=(ALL) ALL em /etc/sudoers , seu script de inicialização irá quebrar misteriosamente.

Além disso, eu usaria o seguinte formulário para reduzir ainda mais a pegada de configuração:

su -s /bin/sh -c "my_program my_args etc" my_user

A opção -s significa que você pode alterar o shell padrão do usuário para / bin / false ou / sbin / nologin ou algo sem quebrar o script. Você também pode redirecionar a E / S padrão para /dev/null ou algum outro local adequado, se o seu programa ainda não lidar com isso.

    
por 19.02.2013 / 15:42
3

Em termos de conveniência, sugiro que você analise o programa chpst da pilha de supervisor runit. É muito conveniente e evita que alguém mexa com os parâmetros de linha de comando que escapam, o que é um problema com sudo / su .

Se você quiser executar o programa como outro usuário, você o chamará assim:

chpst -u my_user /path/to/program

Ele faz setsid , setgid , execve no seu programa, isso é tudo (tem muitos outros recursos interessantes).

Se a sua distribuição inclui busybox , você também pode verificar se ela tem chpst applet compilado, você pode já ter e não precisa de um pacote separado.

    
por 19.02.2013 / 21:17
2

Tecnicamente, ambos devem funcionar bem, mas você provavelmente desejará seguir as convenções aqui. Sudo é geralmente usado para elevar a raiz para executar um único comando, enquanto su é geralmente usado para mudar para um novo usuário e, em seguida, executar comandos como esse novo usuário:

Dito isso, há algumas visões sobre o sudo vs su, se você fizer uma pesquisa rápida no Google:

por 19.02.2013 / 14:55