xinetd

O xinetd (eXtended inetd) é denominado super-servidor.

Este super-servidor está continuamente a correr e à escuta de conexões com as portas TCP ou UDP associadas a cada serviço (estas portas estão definidas em /etc/services). Sempre que um pedido de conexão ocorrer numa dessas portas, o super-servidor lança o servidor respectivo (ex. rlogind é o servidor do serviço rlogin) e o pedido é-lhe enviado para processamento.

Foi desenvolvido como um substituto seguro do inetd e tcp_wrappers.

tcp_wrapping é um mecanismo que possibilita alguma protecção ao servidor pois antes do serviço do servidor ser lançado, quando um pedido chega a uma das portas de rede "escutadas" pelo super-servidor, a mensagem é enviada para o tcpd, que decide o que fazer com o pedido em função de restrições definidas em /etc/hosts.allow e /etc/hosts.deny.

O xinetd pode ser combinado com tcp_wrapers tal como é representado na figura seguinte:

No entanto o xinetd vai muito para além das potencialidades suportadas por tcp_wrappers. Nomeadamente:

Para além do acréscimo de segurança que este mecanismo permite ao servidor, é benéfico para a administração do sistema:

A relação entre as portas e o servidor é configurado a partir de /etc/xinetd.conf, que define também as restrições/atributos por omissão.

# 
# Simple configuration file for xinetd 
# 
# Some defaults, and include /etc/xinetd.d/ 

defaults 
{ 
	instances = 60
	log_type = SYSLOG authpriv
	log_on_success = HOST PID
	log_on_failure = HOST RECORD
}

includedir /etc/xinetd.d

É comum este ficheiro recorrer a ficheiros para a configuração individual para cada serviço, localiazados num ou mais directórios (ex. includedir /etc/xinetd.d).

Seja através de ficheiros de configuração seja no próprio ficheiro xinetd.conf, cada serviço é configurado através de da seguinte estrutura de informação:

service <service_name>
{
	<attribute> <assign_op> <value> <value> ... 
	...
}

Um exemplo deste tipo de configuração é apresentado a seguir, referente ao serviço/servidor de rlogin.

service rlogin
{
	socket_type = stream 
	wait = no 
	user = root 
	log_on_success += USERID 
	log_on_failure += USERID 
	server = /usr/sbin/in.rlogind 
}

Alguns os atributos mais relevantes no que respeita às restrições de acesso são:


Última actualização: 31 Outubro 2005