q
1 Capaz de iniciar vários serviços de modo dinâmico. 1 Configurado pelo inetd.conf.
1 Formato das linhas:
<porta> <socket> <protocolo> <wait/nowait> \ <usuário[.grupo]> <programa> <opções do \ programa>
1 Exemplo:
smtp stream tcp nowait mail /usr/sbin/exim \ exim -bs
O inetd é um daemon especial, porque, ao contrário dos outros, não oferece um serviço específico. Ele pode ser configurado para escutar em determinadas portas e iniciar outros programas quando uma conexão é iniciada em uma dessas portas.
Em geral, o inetd é utilizado em serviços com uma taxa de solicitação baixa, para evitar que os daemons ou processos desses serviços sejam mantidos em memória o tempo todo. Por uma questão de desempenho, não se recomenda a utilização do inetd nos serviços que recebem muitas solicitações em intervalos curtos de tempo, já que para cada solicitação o inetd atenderá à requisição e chamará o programa para atender ao serviço, criando uma carga adicional e desnecessária de trabalho.
O daemon inetd é configurado através do arquivo /etc/inetd.conf. Cada linha desse arquivo (exceto as linhas vazias e de comentários) descreve um serviço e possui o seguinte formato:
Figura 5.2
Utilizando o rcconf.
Nos sistemas baseados na distribuição Debian, o administrador poderá utilizar o comando
rcconf para selecionar
os serviços que devem ser iniciados durante a inicialização do sistema. O padrão do rcconf é alterar os serviços apenas para o run-level atual (normalmente o run-level 3).
Ca pí tu lo 5 - S eg ur an ça – I nt ro du çã o
<porta> <tipo de socket> <protocolo> <wait/nowait> < usuário[. grupo]> <programa> <opções do programa>
1 O parâmetro <porta> indica em que porta esse serviço será executado; é possível usar um valor numérico ou o nome do serviço, desde que ele esteja descrito no arquivo /etc/services; 1 O <tipo de socket> pode ser stream, dgram, raw, rdm ou seqpacket. Em geral, é utilizado
o tipo stream para serviços que usam o protocolo TCP e o dgram para serviços que uti- lizam o UDP;
1 O campo “<protocol>” indica o tipo de protocolo de transporte;
1 O campo seguinte pode conter os valores wait ou nowait e indica se o daemon inetd deve continuar escutando nessa porta ou se deve esperar a finalização da conexão em andamento;
1 O inetd pode executar processos com permissões de outro usuário ou grupo;
1 Por fim, os dois últimos campos indicam o programa que deve ser executado e as opções que devem ser passadas para ele.
O exemplo a seguir configura o serviço de e-mail (porta 25) com o programa exim: smtp stream tcp nowait mail /usr/sbin/exim exim –bs
Para desabilitar um serviço no inetd, basta remover ou comentar sua linha no arquivo
/etc/inetd.conf e reiniciar o inetd (/etc/init.d/inetd restart).
Veremos a seguir como controlar o acesso de máquinas a um serviço.
tcpwrapper
q
1 Duas formas: daemon tcpd e biblioteca libwrap. 1 tcpd + inetd.
1 smtp stream tcp nowait mail \ /usr/sbin/tcpd /usr/sbin/exim exim -bs 1 Daemon sshd: “linkado” com a libwrap.
1 Controle de acesso é feito pelos arquivos hosts.allow e hosts.deny. 1 hosts.allow:
2 Lista o que pode ser acessado e é consultado primeiro. 1 hosts.deny:
2 Lista o que deve ser negado e é consultado após o hosts.allow. Cada linha tem a forma:
1 <daemon>: <hosts / redes>
Nos itens anteriores vimos apenas como executar ou não um serviço, mas não como sele- cionar quem pode ter acesso ao serviço. Para resolver esse problema, foi criado o tcpwrapper. Existem duas formas de utilização:
1 O programa tcpd é chamado antes do programa que atenderá a requisição (por exemplo, no inetd);
1 O tcpwrapper é utilizado através da compilação dos daemons “linkados” com a biblio- teca libwrap.
Ad m in is tr aç ão d e S is te m as L in ux : R ed es e S eg ur an ça
Tomando o exemplo do item anterior, para controlar o acesso com o tcpwrapper ao serviço de e-mail utilizando o inetd, basta escrever a seguinte linha no inetd.conf:
smtp stream tcp nowait mail /usr/sbin/tcpd /usr/sbin/exim exim -bs
Para os daemons que não utilizam o inetd, mas são “linkados” com a libwrap, não é neces-inetd, mas são “linkados” com a libwrap, não é neces-, mas são “linkados” com a libwrap, não é neces-libwrap, não é neces-, não é neces-
sário utilizar o programa tcpd. Basta utilizar o comando ldd </caminho/binario_daemon> para verificar se um daemon foi “linkado” com a libwrap. O exemplo a seguir mostra que o daemon sshd foi “linkado” com a libwrap:
# ldd /usr/sbin/sshd
linux-gate.so.1 => (0x00156000)
libwrap.so.0 => /usr/lib/libwrap.so.0 (0x007c3000) <——- libpam.so.0 => /lib/libpam.so.0 (0x007b9000)
libdl.so.2 => /lib/libdl.so.2 (0x007b3000) [...]
Em ambos os casos de utilização (via libwrap ou tcpd), o controle de acesso aos serviços é configurado através dos arquivos /etc/hosts.allow e /etc/hosts.deny.
/etc/hosts.allow e hosts.deny
O arquivo /etc/hosts.allow lista os hosts que podem acessar determinados serviços prote- gidos pelo tcpwrapper. Cada linha de configuração tem a forma:
<serviço>: <hosts e/ou redes>.
O exemplo a seguir permite o acesso ao daemon SSH para os hosts 192.168.0.1 e 10.0.0.2: sshd: 192.168.0.1 10.0.0.2
De maneira análoga, o arquivo /etc/hosts.deny nega o acesso de hosts a serviços e a sua sintaxe é igual à sintaxe do arquivo /etc/hosts.allow.
Ambos os arquivos aceitam algumas palavras-chave com significados especiais, sendo as principais as palavras ALL, que significa qualquer serviço ou qualquer host, e EXCEPT, para excluir algum serviço ou algum host. Segue um exemplo utilizando essas palavras:
ALL: 127.0.0.1
ALL EXCEPT sshd: 192.168.0. 10.0.0.0/255.255.255.0 EXCEPT 10.0.0.1 Observe que foram utilizadas duas formas de designar redes: a primeira simples- mente terminando a rede com “.”; e a segunda, usando uma máscara de rede. O tcpwrapper consulta primeiro o arquivo /etc/hosts.allow e, em seguida, o arquivo
/etc/hosts.deny. Para uma configuração bem restritiva, poderíamos colocar somente os ser-
Ca pí tu lo 5 - S eg ur an ça – I nt ro du çã o
Exemplo de configuração
q
sshd: 192.168.0.1 10.0.0. Palavras-chaves especiais: 1 ALL, EXCEPT 1 ALL: 127.0.0.11 ALL EXCEPT sshd: 10.0.0. EXCEPT 10.0.0.1 1 ALL: ALL
Como liberar o SSH e negar todos os outros serviços? Testando a configuração:
1 tcpdmatch e tcpdchk 2 tcpdchk –v
2 tcpdmatch sshd 192.168.0.3