Product SiteDocumentation Site

3.5. Rode o mínimo de serviços necessários

Serviços são programas como servidores ftp e servidores web. Uma vez que eles tem que estar escutando por conexões que requisitem o serviço, computadores externos podem conectar-se a eles. Serviços algumas vezes são vulneráveis (i.e. podem estar comprometidos sobre um certo ataque) e oferecem risco a segurança.
Você não deve instalar serviços que não são necessários em sua máquina. Todo serviço instalado pode introduzir novos, talvez não óbvios ou conhecidos, buracos de segurança em seu computador.
As you may already know, when you install a given service the default behavior is to activate it. In a default Debian installation, with no services installed, the number of running services is quite low and the number of network-oriented services is even lower. In a default Debian 3.1 standard installation you will end up with OpenSSH, Exim (depending on how you configured it) and the RPC portmapper available as network services[4]. If you did not go through a standard installation but selected an expert installation you can end up with no active network services. The RPC portmapper is installed by default because it is needed for many services, for example NFS, to run on a given system. However, it can be easily removed, see Seção 5.13, “Tornando serviços RPC mais seguros” for more information on how to secure or disable RPC services.
Quando você instala um novo serviço de rede (daemon) em seu sistema Debian GNU/Linux ele pode ser habilitado de duas maneiras: através do superdaemon inetd (uma linha será adicionada ao /etc/inetd.conf) ou através de um programa que serve de interface. Estes programas são controlados pelos arquivos /etc/init.d, que são chamados no momento da inicialização através do mecanismo SysV (ou outro alternativo) pelo uso de symlinks em /etc/rc?.d/* (para mais informações de como isto é feito leia /usr/share/doc/sysvinit/README.runlevels.gz).
If you want to keep some services but use them rarely, use the update-* commands, e.g. update-inetd and update-rc.d to remove them from the startup process. For more information on how to disable network services read Seção 3.5.1, “Desabilitando daemons de serviço”. If you want to change the default behaviour of starting up services on installation of their associated packages[5] use policy-rc.d, please read /usr/share/doc/sysv-rc/README.policy-rc.d.gz for more information.
invoke-rc.d support is mandatory in Debian, which means that for Debian 4.0 etch and later releases you can write a policy-rc.d file that forbids starting new daemons before you configure them. Although no such scripts are packaged yet, they are quite simple to write. See policyrcd-script-zg2.

3.5.1. Desabilitando daemons de serviço

Disabling a daemon service is quite simple. You either remove the package providing the program for that service or you remove or rename the startup links under /etc/rc${runlevel}.d/. If you rename them make sure they do not begin with 'S' so that they don't get started by /etc/init.d/rc. Do not remove all the available links or the package management system will regenerate them on package upgrades, make sure you leave at least one link (typically a 'K', i.e. kill, link). For more information read http://www.debian.org/doc/manuals/reference/ch-system.en.html#s-custombootscripts section of the Debian Reference (Chapter 2 - Debian fundamentals).
You can remove these links manually or using update-rc.d (see update-rc.d(8)). For example, you can disable a service from executing in the multi-user runlevels by doing:
  # update-rc.d name stop XX 2 3 4 5 .
Observe que, se você não está usando file-rc, update-rc.d -f _service_ remove não trabalhará apropriadamente, pois embora todos links sejam removidos, após reinstalação ou upgrade do pacote estes links serão regenerados (provavelmente não é o que você quer). Se pensa que isto não é intuitivo você provavelmente está certo (veja http://bugs.debian.org/67095). Texto da manpage:
  Se qualquer arquivo /etc/rcrunlevel.d/[SK]??name já existe então 
  update-rc.d não faz nada. É desta maneira que o administrador do sistema pode
  reorgananizar os links, contanto que eles deixem pelo menos um link remanescente, 
  sem ter sua configuração reescrita.
Se você está usando file-rc, toda informação sobre serviços é manipulada por um arquivo de configuração comum e é mantida mesmo se os pacotes forem removidos do sistema.
You can use the TUI (Text User Interface) provided by sysv-rc-conf to do all these changes easily (sysv-rc-conf works both for file-rc and normal System V runlevels). You will also find similar GUIs for desktop systems. You can also use the command line interface of sysv-rc-conf:
  # sysv-rc-conf foobar off
The advantage of using this utility is that the rc.d links are returned to the status they had before the 'off' call if you re-enable the service with:
  # sysv-rc-conf foobar on
Other (less recommended) methods of disabling services are:
  • Removing the /etc/init.d/service_name script and removing the startup links using:
      # update-rc.d name remove
  • Move the script file (/etc/init.d/service_name) to another name (for example /etc/init.d/OFF.service_name). This will leave dangling symlinks under /etc/rc${runlevel}.d/ and will generate error messages when booting up the system.
  • Remove the execute permission from the /etc/init.d/service_name file. That will also generate error messages when booting.
  • Edit the /etc/init.d/service_name script to have it stop immediately once it is executed (by adding an exit 0 line at the beginning or commenting out the start-stop-daemon part in it). If you do this, you will not be able to use the script to startup the service manually later on.
Nevertheless, the files under /etc/init.d are configuration files and should not get overwritten due to package upgrades if you have made local changes to them.
Infelizmente, diferente de outros sistemas operacionanais tipo UNIX, os serviços no Debian não podem ser desabilitados pela modificação dos arquivos em /etc/default/_servicename_.
FIXME: Adicione mais informação sobre manipulação de daemons usando file-rc

3.5.2. Desabilitando o inetd ou seus serviços

Você deve checar se realmente precisa do daemon inetd. Inetd sempre foi uma maneira de compensar deficiências do kernel, mas estas deficiências foram corrigidas. Existe possibilidade de ataques DoS (Denial of Service) contra o inetd, então é preferível usar daemons individuais do que rodar um serviço do inetd. Se você ainda quer rodar algum serviço do inetd, então no mínimo alterne para um daemon mais configurável como xinetd, rlinetd ou openbsd-inetd.
You should stop all unneeded Inetd services on your system, like echo, chargen, discard, daytime, time, talk, ntalk and r-services (rsh, rlogin and rcp) which are considered HIGHLY insecure (use ssh instead).
Você pode desabilitar os serviços editando o arquivo /etc/inetd.conf diretamente, mas o Debian fornece uma alternativa melhor: update-inetd (o qual comenta os serviços de modo que eles possam facilmente ser reativados). Você pode remover o daemon telnet para alterar o arquivo de configuração e reiniciar o daemon (neste caso o serviço telnet é desabilitado):
  /usr/sbin/update-inetd --disable telnet
Se você quer um serviço, mas não o quer disponível para todos os IP do seu host, você deve usar um recurso não documentado no inetd (substitua o nome do serviço por serviço@ip) ou use um daemon alternativo como xinetd.


[4] The footprint in Debian 3.0 and earlier releases wasn't as tight, since some inetd services were enabled by default. Also standard installations of Debian 2.2 installed the NFS server as well as the telnet server.
[5] This is desirable if you are setting up a development chroot, for example.