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

8

Um dos princípios básicos da segurança de computadores é nunca executar algo que você não precise.

Eu estava pgrep ping para um processo hoje quando notei que minha máquina Ubuntu 9.04 (desktop) estava executando um daemon de servidor git. Depois de um rápido juramento, descobri que o pacote git-daemon-run tinha sido (provavelmente inadvertidamente) instalado, e removê-lo eliminou esse processo (e garantiu que ele não fosse reiniciado mais tarde).

Mas em outros casos, quero que o pacote do servidor seja instalado, mas não quero que o daemon do servidor seja executado. Por exemplo, eu uso lighttpd para testes internos (ele é iniciado por scripts de teste específicos para alguns aplicativos e ouve somente localhost 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 escuta de conexões externas, eu configuraria e executaria isso sozinho).

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

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

(Pedir para ter um pacote instalado não é, no meu livro, pedir para iniciar um servidor. Se é suposto ser, é uma interface de usuário péssima, já que 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ê fez isso.)

EDIT: Só para deixar claro, o problema não é que eu quero ser capaz de parar os servidores existentes. O problema é que não quero que novos servidores sejam iniciados sem uma solicitação explícita. Isso significa que eu deveria 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.

    
por Curt J. Sampson 22.06.2009 / 07:13

13 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
DESCRIPTION: sysv-rc-conf gives an easy to use interface for manag‐ ing "/etc/rc{runlevel}.d/" symlinks.

    
por 22.06.2009 / 07:39
8

Como alguém com um problema semelhante, sinto muito strongmente que não é razoável para um daemon presumir que o usuário quer que ele seja iniciado por default: Existem muitos casos de uso perfeitamente válidos onde esta não é a caso. (Sem mencionar que nem sempre é claro quais instalações realmente incluir um daemon.) O daemon pode estar desativado por padrão, o usuário poderia ser explicitamente consultado, ou poderia haver uma configuração central. Algo mais é o raciocínio Microsoftiano totalmente indigno do Linux.

Além disso, encontro vários dos comentários acima no pôster original para ser rude, paternalista e carente de construtividade. Para sugerir, por exemplo, que ele deve aceitar o comportamento padrão ou mudar a distribuição é verdadeiramente notável. Em primeiro lugar, nenhuma distribuição será um ajuste perfeito e saltará para uma nova distribuição com trabalho extra associado é improvável que seja um solução realista sobre essa coisa. Em segundo lugar, usuários Linux / Unix proficientes estão acostumados a todos os comportamentos serem mutáveis: um problema pode levar duas horas cavando, mas depois é consertado. A coisa natural para tal usuário fazer, quando os padrões são inadequados, é assumir a existência de uma solução alternativa e tente descobrir o que é. Em terceiro lugar, em código aberto e software livre etiqueta, If you don't like it, then patch the source code!'' is an acceptable response; however, ..., então faça uma caminhada! '' não é.

    
por 10.09.2009 / 19:55
5

A expectativa do sistema de empacotamento é que, ao instalar um pacote do servidor, você deseje executar esse servidor. É uma expectativa razoável.

How do I configure my Ubuntu systems never to start any kind of server unless I 
specifically tell it to I want a server started? 

Roy respondeu a esta pergunta para você. Quando você instala um novo pacote de servidor, pára esse servidor e, em seguida, usa uma ferramenta como sysv-rc-conf para impedir que esse servidor seja iniciado na próxima reinicialização ou mudança de nível de execução. Sim, você tem que fazer algum trabalho sozinho, e isso é razoável porque você está configurando seu sistema de forma diferente para a maioria das pessoas que usam o Ubuntu.

For example, I use lighttpd for internal testing (it's started by specific test scripts 
for some applications, and listens only on localhost) but I generally don't want it 
listening for outside connections.

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

    
por 22.06.2009 / 09:18
5

Eu achei o seguinte útil para instalar o Ubuntu em ambientes chroot, como o debootstrapping new xen guests. O crédito vai para os scripts xen-tools para 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 este script em vigor, o apt não iniciará serviços após a instalação. No entanto, isso é apenas metade do seu problema, porque os links simbólicos ainda são colocados, os serviços serão iniciados após a próxima inicialização. Eu não sei como parar isso automaticamente: (

    
por 11.07.2009 / 03:58
4

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

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

O pacote policyrcd-script-zg2 inclui o script policy-rc.d , que executa /etc/policy-rc.d com seus parâmetros, se presente, e sai com o código de erro desse script ou sai com 0 (sucesso) caso contrário. A interface que policy-rc.d deve oferecer está documentada brevemente no invoke-rc.d manage e muito mais em /usr/share/doc/sysv-rc/README.policy-rc.d.gz .

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

Coisas restantes para serem respondidas:

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

    
por 23.06.2009 / 12:47
3

Que tal assistir nos diretórios onde os scripts de inicialização estão localizados? Você pode provavelmente tornar esses diretórios inalteráveis com o comando chatr.

    
por 22.06.2009 / 10:39
2

Idealmente, isso é uma questão de post-inst scripts. No começo do projeto Ubuntu, um esforço intencional foi feito para forçar padrões sadios aos scripts de configuração do dpkg, para que você e eu não tenhamos que responder a todas as perguntas que possam surgir, ou perder tempo pesquisando as opções. Agora que o Ubuntu configurou isso, muitas pessoas não sabem que 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ê devesse se envolver com o Ubuntu Server Team e talvez até mesmo com o Debian Policy para melhorar as coisas.

    
por 22.06.2009 / 22:20
1

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

P.S. Eu posso pensar em duas possíveis causas de serviços iniciados após a instalação do pacote. Esse é o recurso de pacote, ou esse é o recurso do gerenciador de pacotes. Se isso é um recurso de pacote, eu não acho que há alguma maneira de mudar 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.

    
por 22.06.2009 / 09:01
1

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

A partir 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 selecionando nenhum, você pode estar mais feliz com a sua instalação básica.

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

    
por 22.06.2009 / 15:09
0

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

Você pode adicioná-los novamente com um symlink do script em /etc/init.d.

Eu acho que existe um comando que faz o mesmo truque, e adiciona todos os links simbólicos para todos os runlevels, mas eu faço isso manualmente.

    
por 22.06.2009 / 07:17
0

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

Para desativar apache2 service

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

EDITAR:

This means I should be able to do any sysadmin task, such as installing a package, and be confident that no servers have started.

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

    
por 22.06.2009 / 09:23
0

Basicamente, você não pode.

Se você instalar um pacote e iniciar um serviço, então é o que acontece. Se você não gostar, registre um bug no link .

Você não deve se preocupar com pacotes deb. Esse tipo de coisa pode voltar e te morder mais tarde.

Se você quiser que o estilo do OpenBSD 'nada seja executado por padrão', execute o OpenBSD. Nem toda distro é adequada a todos. É provável que existam coisas no Ubuntu que você não gosta. Se você ainda quer rodar o Ubuntu, então você terá que verificar os serviços em execução e desligar as coisas.

    
por 23.06.2009 / 13:02
-2

Você pode ativar e desativar alguns serviços no System > Menu Serviços no GNOME

    
por 22.06.2009 / 13:48