Nome
hosts_access - formato de arquivos de controle do Linux de acesso ao host.
Descrição
Esta página de manual descreve o Linux como uma linguagem de controle de acesso simples baseada nos padrões do cliente (nome / endereço do host, nome do usuário) e servidor (nome do processo, nome do host / endereço). Exemplos são dados no final. O leitor impaciente é incentivado a pular para a seção Exemplos para uma introdução rápida. Uma versão estendida da linguagem de controle de acesso é descrita no hosts_options (5) documento. As extensões são ativadas no tempo de compilação do programa construindo com -DPROCESS_OPTIONS.
No texto a seguir, daemon é o nome do processo de um processo de daemon de rede e cliente é o nome e / ou endereço de um host que está solicitando o serviço. Os nomes do processo do daemon de rede são especificados no arquivo de configuração do inetd.
Arquivos de Controle de Acesso
O software de controle de acesso consulta dois arquivos. A pesquisa pára no primeiro jogo.
O acesso será concedido quando um par (daemon, cliente) corresponder a uma entrada no /etc/hosts.allow Arquivo.
Caso contrário, o acesso será negado quando um par (daemon, cliente) corresponder a uma entrada no /etc/hosts.deny Arquivo.
Caso contrário, o acesso será concedido.
Um arquivo de controle de acesso inexistente é tratado como se fosse um arquivo vazio. Assim, o controle de acesso pode ser desativado, fornecendo nenhum arquivo de controle de acesso.
Regras de Controle de Acesso
Cada arquivo de controle de acesso consiste em zero ou mais linhas de texto. Essas linhas são processadas em ordem de aparição. A pesquisa termina quando uma correspondência é encontrada.
Um caractere de nova linha é ignorado quando é precedido por um caractere de barra invertida. Isso permite que você divida as longas filas para facilitar a edição.
Linhas em branco ou linhas que começam com um caractere "#" são ignoradas. Isso permite inserir comentários e espaço em branco para facilitar a leitura das tabelas.
Todas as outras linhas devem satisfazer o seguinte formato, sendo que as coisas entre são opcionais:
daemon_list: client_list : shell_command
daemon_list é uma lista de um ou mais nomes de processos do daemon (valores argv 0) ou curingas (veja abaixo).
lista de clientes é uma lista de um ou mais nomes de host, endereços de host, padrões ou curingas (veja abaixo) que serão comparados com o nome ou endereço do host do cliente.
As formas mais complexas daemon @ host e usuário @ host são explicados nas seções sobre padrões de terminal do servidor e em pesquisas de nome de usuário do cliente, respectivamente.
Os elementos da lista devem ser separados por espaços em branco e / ou vírgulas.
Com exceção das pesquisas de grupo de rede NIS (YP), todas as verificações de controle de acesso não diferenciam maiúsculas de minúsculas.
Padrões
A linguagem de controle de acesso implementa os seguintes padrões:
Uma string que começa com um '.' personagem. Um nome de host é correspondido se os últimos componentes de seu nome corresponderem ao padrão especificado. Por exemplo, o padrão `.tue.nl 'corresponde ao nome do host` wzv.win.tue.nl'.
Uma string que termina com um `. ' personagem. Um endereço de host é correspondido se seus primeiros campos numéricos corresponderem à string dada. Por exemplo, o padrão `131.155. ' corresponde ao endereço de (quase) todos os hosts da rede da Universidade de Eindhoven (131.155.x.x).
Uma string que começa com um caractere @ @ é tratada como um nome de grupo de rede NIS (anteriormente YP). Um nome de host é correspondido se for um membro do host do netgroup especificado. Correspondências de Netgroup não são suportadas para nomes de processos do daemon ou para nomes de usuários do cliente.
Uma expressão da forma `n.n.n.n / m.m.m.m 'é interpretada como um par` net / mask'. Um endereço de host IPv4 é correspondido se `net 'for igual ao AND bit a bit do endereço e do` mask'. Por exemplo, o padrão net / mask `131.155.72.0/255.255.254.0 'corresponde a todos os endereços no intervalo` 131.155.72.0' até `131.155.73.255 '.
Uma expressão da forma `n: n: n: n: n: n: n: n / m 'é interpretada como um par` net / prefixlen'. Um endereço de host IPv6 é correspondido se os bits `prefixlen 'de` net' forem iguais aos bits `prefixlen 'do endereço. Por exemplo, o padrão net / prefixlen `3ffe: 505: 2: 1 :: / 64 'corresponde a todos os endereços no intervalo` 3ffe: 505: 2: 1 ::' até `3ffe: 505: 2: 1: ffff: ffff: ffff: ffff '.
Uma string que começa com um caracter `/ 'é tratada como um nome de arquivo. Um nome ou endereço de host é correspondido se corresponder a qualquer nome de host ou padrão de endereço listado no arquivo nomeado. O formato do arquivo é zero ou mais linhas com zero ou mais padrões de nome ou endereço de host separados por espaço em branco. Um padrão de nome de arquivo pode ser usado em qualquer lugar em que um nome de host ou padrão de endereço possa ser usado.
Curingas `* 'e`?' pode ser usado para corresponder nomes de host ou endereços IP. Este método de correspondência não pode ser usado em conjunto com a correspondência `net / mask ', a correspondência de nome de host começando com`.' ou correspondência de endereço IP que termina com `. '.
Curingas
O idioma do controle de acesso suporta caracteres curinga explícitos, incluindo:
'TODOS'
O curinga universal sempre corresponde.
'LOCAL'
Corresponde a qualquer host cujo nome não contenha um caractere de ponto.
'DESCONHECIDO'
Corresponde a qualquer usuário cujo nome é desconhecido e corresponde a qualquer host cujo nome ou endereço são desconhecidos. Esse padrão deve ser usado com cuidado: os nomes de host podem estar indisponíveis devido a problemas temporários do servidor de nomes. Um endereço de rede não estará disponível quando o software não conseguir descobrir com que tipo de rede está falando.
'CONHECIDO'
Corresponde a qualquer usuário cujo nome é conhecido e corresponde a qualquer host cujo nome e endereço são conhecidos.Esse padrão deve ser usado com cuidado: os nomes de host podem estar indisponíveis devido a problemas temporários do servidor de nomes. Um endereço de rede não estará disponível quando o software não conseguir descobrir com que tipo de rede está falando.
'PARANÓIDE'
Corresponde a qualquer host cujo nome não corresponda ao seu endereço. Quando o tcpd é construído com o -DPARANOID (modo padrão), ele elimina solicitações de tais clientes antes mesmo de examinar as tabelas de controle de acesso. Construa sem -DPARANOID quando quiser mais controle sobre tais solicitações.
'OPERADORES'
'EXCETO'
O uso pretendido é da forma: `list_1 EXCEPT list_2 '; esta construção corresponde a qualquer coisa que corresponda list_1 a menos que corresponda lista_2 . O operador EXCEPT pode ser usado em daemon_lists e em client_lists. O operador EXCEPT pode ser aninhado: se a linguagem de controle permitir o uso de parênteses, 'a EXCEPT b EXCEPT c' seria analisado como `(a EXCEPT (b EXCEPT c)) '.
Comandos da Shell
Se a regra de controle de acesso da primeira correspondência contiver um comando shell, esse comando estará sujeito a% de substituições (consulte a próxima seção). O resultado é executado por um / bin / sh processo filho com entrada, saída e erro padrão conectados a / dev / null . Especifique um `& 'no final do comando do terminal se não quiser esperar até que seja concluído.
Os comandos do shell não devem confiar na configuração PATH do inetd. Em vez disso, eles devem usar nomes de caminho absolutos ou devem começar com uma instrução PATH explícita = qualquer declaração.
o hosts_options (5) documento descreve um idioma alternativo que usa o campo de comando do shell de maneira diferente e incompatível.
% De expansões
As seguintes expansões estão disponíveis dentro dos comandos do shell:
% a (% A) - O endereço do host do cliente (servidor).
% c - Informações do cliente: usuário @ host, usuário @ endereço, um nome de host ou apenas um endereço, dependendo da quantidade de informações disponíveis.
% d - O nome do processo do daemon (valor argv 0).
% h (% H) - O nome do host ou endereço do cliente (servidor), se o nome do host não estiver disponível.
% n (% N) - O nome do host do cliente (servidor) (ou "desconhecido" ou "paranóico").
% p - O ID do processo do daemon.
% s - Informações do servidor: daemon @ host, daemon @ address ou apenas um nome de daemon, dependendo de quantas informações estão disponíveis.
%você - O nome de usuário do cliente (ou "desconhecido").
%% - Expande para um único caractere '%'.
Caracteres em% de expansões que podem confundir o shell são substituídos por sublinhados.
Padrões de Terminal do Servidor
Para distinguir clientes pelo endereço de rede ao qual eles se conectam, use padrões do formulário:
process_name @ host_pattern: client_list …
Padrões como esses podem ser usados quando a máquina possui endereços de Internet diferentes com diferentes nomes de host da Internet. Os provedores de serviços podem usar esse recurso para oferecer arquivos FTP, GOPHER ou WWW com nomes de internet que podem até pertencer a diferentes organizações. Veja também a opção `twist 'no documento hosts_options (5). Alguns sistemas (Solaris, FreeBSD) podem ter mais de um endereço de internet em uma interface física; com outros sistemas, você pode precisar recorrer a pseudo-interfaces SLIP ou PPP que residem em um espaço de endereço de rede dedicado.
O host_pattern obedece às mesmas regras de sintaxe que nomes de host e endereços no contexto client_list. Geralmente, as informações do terminal do servidor estão disponíveis apenas com serviços orientados à conexão.
Pesquisa de nome de usuário do cliente
Quando o host do cliente suporta o protocolo RFC 931 ou um de seus descendentes (TAP, IDENT, RFC 1413), os programas wrapper podem recuperar informações adicionais sobre o proprietário de uma conexão. As informações de nome de usuário do cliente, quando disponíveis, são registradas em conjunto com o nome do host do cliente e podem ser usadas para corresponder a padrões como:
daemon_list: … user_pattern @ host_pattern …
Os daemon wrappers podem ser configurados em tempo de compilação para executar pesquisas de nome de usuário orientadas por regras (padrão) ou para sempre interrogar o host do cliente. No caso de pesquisas de nome de usuário orientadas por regras, a regra acima causaria pesquisa de nome de usuário somente quando daemon_list e a host_pattern partida.
Um padrão de usuário tem a mesma sintaxe que um padrão de processo daemon, portanto, os mesmos curingas se aplicam (não há suporte para associação de netgroup). Não se deve se deixar levar pelas pesquisas de nome de usuário, no entanto.
As informações de nome de usuário do cliente não podem ser confiáveis quando são mais necessárias, ou seja, quando o sistema do cliente foi comprometido. Em geral, ALL e (UN) KNOWN são os únicos padrões de nome de usuário que fazem sentido.
Pesquisas de nome de usuário só são possíveis com serviços baseados em TCP e somente quando o host do cliente executa um daemon adequado; em todos os outros casos, o resultado é "desconhecido".
Um bug do kernel do UNIX bem conhecido pode causar perda de serviço quando as pesquisas de nome de usuário são bloqueadas por um firewall. O documento README do wrapper descreve um procedimento para descobrir se o seu kernel tem este bug.
Pesquisas de nome de usuário podem causar atrasos perceptíveis para usuários não-UNIX. O tempo limite padrão para pesquisas de nome de usuário é de 10 segundos: muito curto para lidar com redes lentas, mas tempo suficiente para irritar usuários de PC.
Pesquisas de nome de usuário seletivo podem aliviar o último problema. Por exemplo, uma regra como:daemon_list: @pcnetgroup ALL @ ALL
iria corresponder aos membros do netgroup pc sem fazer pesquisas de nome de usuário, mas iria realizar pesquisas de nome de usuário com todos os outros sistemas. Uma falha no gerador de números de sequência de muitas implementações de TCP / IP permite que intrusos facilmente personifiquem hosts confiáveis e invadam, por exemplo, o serviço de shell remoto.O serviço IDENT (RFC931 etc.) pode ser usado para detectar ataques de falsificação de endereços de host e de outros. Antes de aceitar uma solicitação do cliente, os wrappers podem usar o serviço IDENT para descobrir que o cliente não enviou a solicitação. Quando o host do cliente fornece o serviço IDENT, um resultado de pesquisa IDENT negativo (o cliente corresponde a UNKNOWN @ host ') é uma forte evidência de um ataque de falsificação de host. Um resultado de pesquisa IDENT positivo (o cliente corresponde a `KNOWN @ host ') é menos confiável. É possível que um intruso falsifique a conexão do cliente e a pesquisa IDENT, embora isso seja muito mais difícil do que falsificar apenas uma conexão do cliente. Também pode ser que o servidor IDENT do cliente esteja mentindo. Nota: Pesquisas IDENT não funcionam com serviços UDP. A linguagem é flexível o suficiente para que diferentes tipos de políticas de controle de acesso possam ser expressas com um mínimo de confusão. Embora a linguagem use duas tabelas de controle de acesso, as políticas mais comuns podem ser implementadas com uma das tabelas sendo trivial ou mesmo vazia. Ao ler os exemplos abaixo, é importante perceber que a tabela de permissões é verificada antes da tabela de negação, que a pesquisa termina quando uma correspondência é encontrada e que o acesso é concedido quando nenhuma correspondência é encontrada. Os exemplos usam nomes de host e de domínio. Eles podem ser aprimorados incluindo informações de endereço e / ou de rede / máscara de rede, para reduzir o impacto de falhas temporárias de pesquisa do servidor de nomes. Nesse caso, o acesso é negado por padrão. Somente hosts explicitamente autorizados têm permissão de acesso. A política padrão (sem acesso) é implementada com um arquivo de negação trivial: /etc/hosts.deny: ALL: ALL Isso nega todos os serviços a todos os hosts, a menos que eles tenham permissão de acesso por entradas no arquivo de permissão. Os hosts explicitamente autorizados são listados no arquivo de permissão. Por exemplo: /etc/hosts.allow: ALL: LOCAL @some_netgroupTODOS: .foobar.edu EXCEPT terminalserver.foobar.edu A primeira regra permite o acesso de hosts no domínio local (não `. 'No nome do host) e de membros do domínio. some_netgroup netgroup. A segunda regra permite o acesso de todos os hosts no foobar.edu domínio (observe o ponto principal), com a exceção de terminaiserver.foobar.edu . Aqui, o acesso é concedido por padrão; somente hosts especificados explicitamente são recusados. A política padrão (acesso concedido) torna o arquivo de permissão redundante para que possa ser omitido. Os hosts explicitamente não autorizados são listados no arquivo de negação. Por exemplo: /etc/hosts.deny: ALL: some.host.name, .some.domainTODOS EXCETO in.fingerd: other.host.name, .other.domain A primeira regra nega alguns hosts e domínios a todos os serviços; a segunda regra ainda permite solicitações de dedo de outros hosts e domínios. O próximo exemplo permite solicitações tftp de hosts no domínio local (observe o ponto principal). Solicitações de outros hosts são negadas. Em vez do arquivo solicitado, um probe finger é enviado para o host incorreto. O resultado é enviado para o superusuário. /etc/hosts.allow: in.tftpd: LOCAL, .my.domain/etc/hosts.deny:in.tftpd: ALL: spawn (/ algum / onde / safe_finger -l @% h | / usr / ucb / mail -s% d-% h raiz) &
O comando safe_finger vem com o wrapper tcpd e deve ser instalado em um local adequado. Isso limita possíveis danos de dados enviados pelo servidor de finger remoto. Dá uma melhor proteção do que o comando padrão do dedo. A expansão das seqüências% h (host do cliente) e% d (nome do serviço) é descrita na seção sobre comandos do shell. Aviso: Não armadilhe seu daemon de dedo, a menos que esteja preparado para loops de dedo infinitos. Em sistemas de firewall de rede, esse truque pode ser levado ainda mais longe. O firewall de rede típico fornece apenas um conjunto limitado de serviços para o mundo externo. Todos os outros serviços podem ser "grampeados" como no exemplo acima do tftp. O resultado é um excelente sistema de alerta antecipado. tcpd (8) programa de wrapper daemon tcp / ip.tcpdchk (8), tcpdmatch (8), programas de teste.
Importante: Use o homem comando ( % homem ) para ver como um comando é usado em seu computador particular. Detectando ataques de spoofing de endereço
Exemplos
Na maior parte fechado
Principalmente aberto
Armadilhas de Booby
Veja também




