Como faço para impedir que o Ubuntu inicie daemons que não pedi explicitamente para executar?

8

Um dos princípios básicos da segurança do computador é nunca executar o que você não precisa.

Eu estava pgrepde ping para um processo de hoje, quando notei que a minha 9,04 (desktop) máquina Ubuntu foi a execução de um daemon servidor git. Após um rápido juramento, descobri que o git-daemon-runpacote havia sido (provavelmente inadvertidamente) instalado, e a remoção dele eliminou esse processo (e garantiu que não seria reiniciado mais tarde).

Mas em outros casos, quero que o pacote do servidor seja instalado, mas não quero que o daemon do servidor esteja em execução. Por exemplo, eu uso lighttpdpara testes internos (é iniciado por scripts de teste específicos para alguns aplicativos e escuta apenas no host local nessas configurações), mas não quero que ele escute conexões externas com algum arquivo de configuração aleatório. (Se eu quisesse executar uma escutando conexões externas, eu mesma a configuraria e executaria.)

Realmente não gosto de executar todos os tipos de servidores aleatórios de que não preciso em máquinas expostas à Internet, pois quem sabe que brechas de segurança eles abrem. E prefiro não ter que mexer com firewalls, já que essa é outra fonte potencial de erros e configurações incorretas que podem abrir brechas na segurança. Não é tão difícil ter máquinas Unix configuradas para não iniciar nenhum servidor, a menos que seja solicitado especificamente pelo administrador; O NetBSD (e o OpenBSD, também, acho) vem dessa maneira por padrão.

Como configuro meus sistemas Ubuntu para nunca iniciar qualquer tipo de daemon de servidor, a menos que eu diga especificamente que quero que ele seja iniciado?

(No meu livro, pedir para instalar um pacote não é pedir para iniciar um servidor. Se deveria ser, é uma péssima interface do usuário, pois muitas instalações de pacotes nem sequer têm um servidor para iniciar, por isso é muito fácil iniciar inadvertidamente um servidor sem perceber que você o fez.)

Edição: Apenas para deixar claro, o problema não é que eu quero poder parar os servidores existentes. O problema é que eu não quero que novos servidores sejam iniciados sem uma solicitação explícita. Isso significa que eu devo ser capaz de executar qualquer tarefa sysadmin, como instalar um pacote, e ter certeza de que nenhum servidor foi iniciado. A maioria das respostas não aborda esse ponto.

cjs
fonte
3
Examinei os pacotes .deb por cerca de 10 minutos. Eles incluem um script "postinst" que é executado após a instalação do pacote. O último comando executado é geralmente "invoke-rc.d <servicename> start", que faz com que o serviço seja iniciado automaticamente. A chamada para invoke-rc.d geralmente é feita sem fio, sem nenhuma verificação de uma variável de configuração global para controlar se realmente deve ou não iniciar o serviço. Assim, caberia a invoke-rc.d tomar uma decisão sobre iniciar o serviço. Foi aí que minha investigação terminou.
Barry Brown
2
como Barry explicou, o Ubuntu claramente não é para você. Desculpe, mas você precisa 1) alterar a distribuição ou 2) ficar de olho no que quer que o ubuntu esteja fazendo.
22610 elcuco
A razão pela qual o Ubuntu / Debian difere do Fedora nesse aspecto: o Debian instala apenas o que você pede, enquanto o Fedora instala a pia da cozinha. Portanto, no Fedora, é comum ter um pacote instalado que você não solicitou, então o padrão é não estar em execução. No Debian, você instalou explicitamente o pacote, portanto, espera-se que você queira que o servidor seja executado imediatamente.
TRS-80
quaisquer atualizações. Qual você tentou? e o que funcionou? a
Nandhini Anand
É triste dizer que parece não haver outra solução senão "verifique cuidadosamente o software que está sendo executado no seu sistema após qualquer alteração de pacote", claramente um processo propenso a erros.
CJS

Respostas:

12

Instale o sysv-rc-conf e simplesmente desative os serviços que você não deseja executar.

sudo apt-get install sysv-rc-conf
DESCRIÇÃO: sysv-rc-conf fornece uma interface fácil de usar para gerenciar "/etc/rc{runlevel}.d/" links simbólicos.

texto alternativo

Jindrich
fonte
Como isso impede que novos servidores sejam ativados pelo sistema de empacotamento?
CJS
Por favor, leia o comentário de Barry Brown, que explica por que esta resposta é obsoleta.
22410 elcuco
8

Como alguém com um problema semelhante, eu me sinto muito fortemente que é não razoável para um daemon presumir que o usuário quer que começou por padrão: Há muitos casos de uso perfeitamente válidos onde este não é o caso. (Sem mencionar que nem sempre é claro quais instalações realmente incluem um daemon.) O daemon pode estar desativado por padrão, o usuário pode ser explicitamente consultado ou pode haver uma configuração central. Qualquer outra coisa é o raciocínio da Microsoft totalmente indigno do Linux.

Além disso, acho que vários dos comentários acima ao pôster original são rudes, condescendentes e sem construtividade. Sugerir, por exemplo, que ele aceite o comportamento padrão ou altere a distribuição é realmente notável. Em primeiro lugar, nenhuma distribuição será perfeita, e é improvável que saltar para uma nova distribuição com trabalho extra associado seja uma solução realista sobre essa única coisa. Em segundo lugar, usuários proficientes de Linux / Unix são usados ​​para todos os comportamentos serem alteráveis: um problema pode demorar duas horas após a escavação, mas é corrigido. A coisa natural para esse usuário, quando os padrões são inadequados, é assumir a existência de uma solução alternativa e tentar descobrir o que é. Em terceiro lugar, na etiqueta do código-fonte aberto e do software livre, If you don't like it, then patch the source code!'' is an acceptable response; however,..., então faça uma caminhada! '' Não é.


fonte
5

A expectativa do sistema de empacotamento é que, quando você instala um pacote de servidores, deseja executar esse servidor. É uma expectativa razoável.

Como configurar meus sistemas Ubuntu para nunca iniciar nenhum tipo de servidor, a menos que eu 
diga especificamente que eu quero um servidor iniciado? 

Roy respondeu a esta pergunta para você. Ao instalar um novo pacote de servidores, você para o servidor e, em seguida, usa uma ferramenta como sysv-rc-conf para impedir que o servidor seja iniciado na próxima reinicialização ou alteração no nível de execução. Sim, você precisa trabalhar um pouco, e isso é razoável, porque você está configurando seu sistema de maneira diferente para a maioria das pessoas que usam o Ubuntu.

Por exemplo, eu uso o lighttpd para testes internos (ele é iniciado por scripts de teste específicos 
para alguns aplicativos e ouve apenas no host local), mas geralmente não o quero 
escutando conexões externas.

Você deve investir algum tempo para aprender como configurar o lighttpd para que ele seja configurado permanentemente para ouvir apenas no host local. Então, quando você inicia o servidor, sabe que ele já está configurado ao seu gosto.

Condenar
fonte
3
Primeiro, não acho que seja uma expectativa razoável; O fato de eu ter instalado um binário lighttpd não significa que quero executar um servidor público. Segundo, nem sempre sei que instalei um pacote de servidor; eles às vezes são atraídos por outros pacotes que eu instalei.
CJS
11
Ah, e eu sei como configurar o lighttpd para escutar apenas no host local, e geralmente tenho meia dúzia ou mais de checkouts de projetos em qualquer sistema específico que o faça.
CJS
5

Achei o seguinte útil para instalar o Ubuntu em ambientes chroot, como desbootar novos convidados xen. Na verdade, o crédito vai para os scripts xen-tools por me ensinar isso:

echo '#! / bin / sh'> /usr/sbin/policy-rc.d

echo 'exit 101' >> /usr/sbin/policy-rc.d

chmod 755 /usr/sbin/policy-rc.d

Com esse script, o apt não iniciará os serviços após a instalação. No entanto, isso é apenas metade do seu problema, porque os links simbólicos ainda são criados, os serviços serão iniciados após a próxima inicialização. Não sei como parar automaticamente isso :(


fonte
11
ele pode quebrar nginx logrotation porque o uso /etc/logrotate.d/nginx do Ubuntu invoke-rc.d nginx rotatena seção postrotate Eu estou usando a versão que é ligeiramente diferente gist.github.com/hostmaster/7c25ef4e1e47bc3e2d71
hostmaster
Também impede que o daemon pare quando os pacotes são excluídos do sistema. Isto não é bom.
hostmaster
4

Barry Brown, em um comentário sobre a pergunta, fornece uma pista para uma possível resposta.

O sistema de empacotamento usa o invoke-rc.dprograma para iniciar o servidor após a instalação do pacote. [1] Este programa será executado /usr/sbin/policy-rc.dpara determinar a política de inicialização desse servidor.

O pacote policyrcd-script-zg2inclui o policy-rc.dscript, que é executado /etc/policy-rc.dcom seus parâmetros, se presente, e sai com o código de erro desse script ou com 0 (êxito), caso contrário. A interface que policy-rc.dse espera oferecer é documentada brevemente no invoke-rc.dgerenciamento, e muito mais extensivamente no /usr/share/doc/sysv-rc/README.policy-rc.d.gz.

O próximo passo, suponho, é para eu testar isso.

Itens restantes a serem respondidos:

[1] Que outras partes do sistema usam invoke-rc.d? [2] Isso realmente funciona?

cjs
fonte
3

Que tal assistir nos diretórios em que os scripts init estão localizados? Você provavelmente pode tornar esses diretórios inalteráveis ​​com o comando chatr.

ojblass
fonte
Hum. Eu me pergunto por que este foi votado abaixo? É um truque, mas pelo menos trata do meu problema, ao contrário da maioria das respostas aqui.
Cjs #
Votei isso de positivo porque é a solução mais próxima que você provavelmente obterá com o Ubuntu, embora eu ache que tornar os diretórios init modificáveis ​​é uma péssima ideia (imagine tentar instalar um serviço que você deseja iniciar). Eu sei que find pode ser usado para monitorar alterações em arquivos e diretórios, embora eu não esteja familiarizado o suficiente com a ferramenta para fornecer um comando exato. Eu pediria a um dos gurus um comando que funcionasse, colaria em um script bash e o executaria após cada instalação e, em seguida, usaria o sysv-rc-conf para desativar manualmente os serviços que você não deseja.
2174 Babu
2

Idealmente, isso é uma questão de post-instscripts. No início do projeto Ubuntu, foi feito um esforço intencional para forçar padrões sãos aos scripts de configuração do dpkg, para que você e eu não tenhamos que responder a todas as malditas perguntas que possam surgir ou perder tempo pesquisando as opções. Agora que o Ubuntu configurou isso, muitas pessoas não sabem que ele existe. Deve ser possível fazer uma pergunta sobre a instalação ou não de um daemon, mas não vejo essas perguntas nos poucos pacotes que verifiquei.

Talvez você deva se envolver com a Equipe do Servidor Ubuntu e talvez até com a Política Debian para melhorar as coisas.

jldugger
fonte
1

Você pode tentar criar um script que verifique a lista de serviços instalados e verifique-os em alguma lista de serviços permitidos. Se o serviço não estiver na lista, o script o desativará. O script deve ser executado no início antes dos serviços comuns. E talvez execute como daemon para fechar serviços recém-instalados. Ou, se possível, seja executado automaticamente após cada instalação para verificar novos serviços.

PS: Posso pensar em duas causas possíveis de início dos serviços após a instalação do pacote. Esse é o recurso do pacote ou o recurso do gerenciador de pacotes. Se esse for o recurso do pacote, não acho que haja alguma maneira de alterar o comportamento do serviço. Se esse for o recurso do gerenciador de pacotes, talvez haja alguma opção de configuração para impedir o início do serviço após a instalação. Eu não sei agora, apenas jogando idéias.

Lissome
fonte
1

Se você configurar o iptables com uma política padrão de DROP para a cadeia INPUT, não precisará se preocupar tanto com as portas de atendimento porque elas serão bloqueadas pelo iptables. O servidor Ubuntu vem com uma interface amigável para o iptables, se você é novo no iptables.

Do seu post, parece-me que você pode estar mais feliz com uma distribuição Linux diferente, como o CentOS. O processo de instalação padrão do CentOS permitirá que você instale diferentes meta-pacotes e, ao selecionar nenhum, você poderá ficar mais feliz com a instalação básica.

Além disso, acho que sua pergunta pode ter sido um pouco mais clara se você substituir 'serviço' ou 'daemon' pela palavra 'servidor' quando se refere a algo que é executado em um servidor. As pessoas tendem a usar 'servidor' para se referir a uma caixa física ou VM. Embora eu acho que não é tecnicamente incorreto.

Kyle Brandt
fonte
0

Dê uma olhada em qual nível de execução você está com o comando 'runlevel' e remova todos os links simbólicos em / etc / rc <runlevel> .d /. Você provavelmente vai querer alguns daemons em execução, mas a maioria provavelmente pode ser removida.

Você pode adicioná-los novamente com um link simbólico do script em /etc/init.d.

Eu acho que existe um comando que fará o mesmo truque e adicionará todos os links simbólicos para todos os níveis de execução, mas eu apenas o faço manualmente.

ressonador
fonte
O problema é que não sei quando os links simbólicos podem ser adicionados. Preciso impedir o que está adicionando links simbólicos e iniciar servidores (o sistema de empacotamento, principalmente, ao que parece), a menos que eu tome alguma ação que solicite especificamente.
Cjs #
Provavelmente mais fácil e mais confiável para apenas configurar um firewall. Talvez crie um script para pegar uma porta e um protocolo como argumento para adicionar / excluir regras de firewall para facilitar as coisas.
Resonator
ou execute sua máquina no modo de usuário único ... Isso pode gerar mais problemas do que salvar.
Resonator
Eu sou novo no Ubuntu, sendo um usuário antigo do Fedora / RedHat. Essa é uma coisa do Ubuntu que me parece estranha: os serviços estão ativados por padrão. No Fedora, os serviços estão desativados por padrão.
Barry Brown
A execução de uma máquina ou servidor de desktop no modo de usuário único não é muito prática.
CJS
0

Como alternativa, você pode usar o update-rc.dcomando

Para desativar o apache2serviço

# update-rc.d [-f] apache2 remove

EDITAR:

Isso significa que eu devo ser capaz de executar qualquer tarefa sysadmin, como instalar um pacote, e ter certeza de que nenhum servidor foi iniciado.

Esse comportamento é controlado por scripts dentro de pacotes .deb. Quando você instala um pacote, esse script é executado automaticamente. IIRC, não podemos ignorar este script.

Arie K
fonte
0

Basicamente, você não pode.

Se você instalar um pacote e ele iniciar um serviço, é isso que acontece. Se você não gostar, registre um bug em https://launchpad.net/ .

Você não deve mexer com os pacotes deb. Esse tipo de coisa pode voltar e morder sua bunda mais tarde.

Se você quiser 'nada rodando por padrão' no estilo OpenBSD, execute o OpenBSD. Nem toda distribuição combina com todos. É provável que existam coisas no Ubuntu que você não gosta. Se você ainda deseja executar o ubuntu, precisará verificar os serviços em execução e desativar as coisas.

Rory
fonte
-2

Você pode ativar e desativar alguns serviços no menu Sistema> Serviços no GNOME

dmityugov
fonte