Quão seguro é manter scripts de propriedade não raiz no /etc/init.d?

15

Eu tenho um aplicativo que é executado como um daemon e é controlado por um script no /etc/init.d
Às vezes, precisamos alterar alguns parâmetros de inicialização / controle desses scripts e reiniciar o daemon. Esses scripts só têm permissão de gravação para o usuário root, portanto, ao editar esses scripts, preciso de privilégios de root.

O que eu pensava é que eu deveria tornar um usuário não root o proprietário desses scripts. Dessa maneira, somente o usuário root e um usuário especial podem editar esses scripts.

É aceitável manter alguns arquivos de propriedade não raiz nos diretórios /etc/init.d?
Ou é absurdo, perturbando a ordem natural do sistema?

Akaks
fonte
1
má ideia, não.
precisa saber é o seguinte

Respostas:

17

O que imediatamente vem à mente é um usuário desprivilegiado, capaz de executar as coisas na inicialização como root , o que é desejável para os crackers que:

  • Deseja escalar privilégios de outras contas
  • Deseja usar seu servidor para hospedar um serviço não autorizado
  • Deseja iniciar os robôs de IRC / Spam se o servidor reiniciar
  • Deseja fazer ping em uma nave-mãe para dizer "Estou de novo" e talvez fazer o download de uma nova carga útil
  • Deseja limpar suas trilhas
  • ... outra maldade.

Isso é possível se o usuário menos privilegiado estiver comprometido de alguma forma, talvez por outro serviço (http / etc). A maioria dos atacantes executa rapidamente tudo lsou findparte de tudo, /etcapenas para ver se essas possibilidades existem, existem shells escritos em vários idiomas que eles simplificam.

Se você gerenciar o servidor remotamente, principalmente via SSH, há uma chance muito boa de que você nem veja isso a menos que inspecione o script init, porque não verá a saída na inicialização (no entanto, você deve usar algo que verifica os hashes desses scripts em relação aos hashes conhecidos para ver se algo mudou ou o software de controle de versão etc.)

Você definitivamente não quer que isso aconteça, o root realmente precisa possuir esse script init. Você pode adicionar o usuário de desenvolvimento à lista de sudoers para que seja conveniente o suficiente para atualizar o script, mas eu aconselho a não permitir acesso de gravação sem privilégios a qualquer coisa no init.d

Tim Post
fonte
5
tl; dr : Se você fizer isso, o usuário não root será tão bom quanto root na próxima inicialização. Você está implorando para ser pwned.
Warren Young
9

Além dos pontos muito bons apresentados por Tim Post, eu acrescentaria que, para uma configuração em que várias pessoas precisam poder enviar alterações para um servidor, considere usar algum tipo de sistema de gerenciamento de configuração.

Se, por exemplo, você usar fantoche, chef ou cfengine, os usuários relevantes poderão editar os arquivos localmente e enviar as alterações com o gerenciamento de configuração. A maneira exata de configurar isso variará, é claro, dependendo do sistema que você está usando, mas a configuração adequada incluirá o software de controle de versão, facilitando a reversão para uma versão anterior de um arquivo de configuração quando (nota: quando , não se !) alguém cometeu um erro. Também facilitará a cópia da configuração para um sistema de teste separado etc.

Jenny D
fonte
Manter os scripts e até os arquivos de dados de configuração com versão em um sistema de gerenciamento de configuração / versão é uma excelente idéia, mesmo sem considerar se um sistema pode estar comprometido.
ChuckCottrill
Na verdade - usei-o para corrigir erros sobre algumas magnitudes com mais freqüência do que para corrigir um sistema comprometido.
Jenny D
Muito obrigado . Como aqui, na maioria das vezes, um usuário dedicado usa esse aplicativo, o sudo está quase funcionando e é isso que eu fazia há muito tempo. Mas estou realmente muito interessado no sistema de gerenciamento de versões para as configurações. Querida Jenny, você pode me fornecer alguma referência para fazer isso OU QUALQUER EXEMPLO !! :).
Akaks
1
Se você não quiser seguir a rota completa de marionetes / chef / cfengine etc., eu pessoalmente usaria www.perforce.com. Usamos isso para ~ 100 servidores no período anterior à existência do fantoche e sua licença de avaliação é suficiente para um servidor. A principal vantagem é que você pode fazer o check-out dos arquivos VC para qualquer local no sistema de arquivos, em vez de se limitar a um subcaminho. Outras opções são joeyh.name/code/etckeeper ou usar qualquer VC combinado com scripts para mover arquivos para o diretório apropriado.
Jenny D