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".
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.
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.
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.
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: