sábado, 10 de maio de 2008

Gerenciando Usuários

Não é novidade para ninguém que os sistemas Unix like são sistemas multiusuários. Esse é um recurso útil e atualmente indispensável para qualquer sistema moderno. Mesmo plataformas clássicamente monousuário, como os da Microsoft, se renderam aos últimos anos ao multiusuário.

A questão é que tal recurso exige um trabalho adicional do administrador de sistemas, que necessita conhecer cada uma das ferramentas utilizadas no processo de gerenciamento de contas e usuários.


Comandos para manipulação de usuários:


useradd, utilizado para adicionar novos usuários;

userdel, utilizado para apagar um usuário

passwd, utilizado para alterar a senha de um usuário;

vipw, utilizado para editar manualmente o arquivo de senhas;

pwconv, converte o arquivo de senhas para shadow;

pwunconv, converte o arquivo de shadow para passwd;

usermod, faz modificações nas configurações do usuário

chage, acerta configurações relativas a senha

chfn, utilizado para alterar a descrição de um usuário;

chsh, utilizado para alterar o shell de um usuário;

users, mostra os usuários logados;

su, comuta temporariamente para outro usuário;

logname, retorna o próprio login;

last, mostra o último login feito no sistema;

lastlog, mostra o log de logins;

finger, retorna informações sobre determinado usuário;

pwck, verifica a integridade do arquivo de senha;


Comandos de manipulação de grupos:

groupadd, adiciona um novo grupo;

groupdel, apagar um determinado grupo;

newgrp, altera o grupo de determinado usuário;

vigr, edita manualmente o arquivo de senhas;

id, retorna grupos e números de identificação;

groups, retorna os grupos de um usuário;

sg, comuta temporariamente para outro grupo;

grpck, verifica a integridade do arquivo de senha;


Arquivos alterados:

/etc/passwd, arquivo de senhas contendo (permissão 644);

/etc/shadow, arquivo contendo as senhjas shadow (permissão 640);

/etc/skel, diretório contendo um modelo a ser copiado no diretório home dos usuários recém criados;

/etc/profile, variáveis e configurações comuns a todos os usuários;

/etc/login.defs, configurações de segurança dos logins do sistema;

/etc/groups, arquivo de senhas dos grupos do sistema;

/etc/gshadow, arquivo shadow dos grupos do sistema;


Opções dos programas


passwd

-l bloquear usuários

-u desbloquear usuários

-x configurar validade da senha

-n dias mínimos para se mudar a senha

-w dias para alamar o vencimento da senha

-i dias após a senha expirar que a conta continuará válida

-s visualiza uma conta


adduser

-c insere comentário (nome real)

-d path para o diretório home do usuário

-g GID do grupo principal

-G grupos adicionais

-u UID do usuário

-s shell padrão do usuário

-p senha do usuário

-e data/período de validade da conta

-k copia o diretório modelo

-m cria o diretório padrão

-K permite a alteração de variáveis do login.defs

-D permite a atualização de certos dados, como: -b diretório home, -e data de validade, -f conta inativa, -g GID principal e –s que é o shell


chage

-m mínimo de dias para modificar a senha

-M máximo de dias para modificar a senha

-d dias a partir de 01/01/1970 que a senha foi modificada

-E dias em que a conta não mais estará disponível

-I tolerância de dias após a senha se expirar

-W dias anteriores para aviso do fim da validade da senha


usermod

-c comentários / nome real do usuário

-d diretório

-e validade da conta

-f número de dias para bloquear a conta após o fim da validade da senha

-g grupo principal

-G grupos adicionais

-l login

-p password

-u UID do usuário

-s shell padrão

-L bloqueia a conta

-U desbloqueia a conta


vipw

-s abre para edição o arquivo shadow


vigw

-s abre para edição o arquivo gshadow


groupmod

-g altera o GID do grupo

-n altera o nome do grupo


Os arquivos possuem a seguinte a seguinte estrutura:


/etc/passwd


login:senha:UID:GID:descrição:shell


onde:

UID é o número de identificação único de cada usuário

GID é o número de identificação único do grupo principal do usuário

descrição normalmente é utilizado para armazenar o nome real do usuário.


/etc/shadow


login:password:last:min:max:warn:inactive:expire


onde:

login é o nome do usuário;

password é a senha criptografada do usuário;

last é a data da última mudança de senha;

min é o número mínimo de dias entre uma troca de senha e outra;

max é o número máximo de dias em que a senha permanecerá válida;

warn, é o número de dias em que o usuário será alertado a trocar a senha antes que a mesmo expire;

inactive, número de dias após expirar a senha que o login será desabilitado.

expire, data ou período em que a senha irá expirar;


/etc/group


grupo:password:GID:usuario1,usuario2,usuarion


GID: é o número de identificação do usuário

usuario1,usuario2,usuarion: lista dos usuários pertencentes ao grupo.


Desabilitando o acesso de um usuário ao sistema:


1) Usando passwd –l

2) editando o arquivo /etc/shadow e colocando no campo de data de expiração como a data da última troca menos 1 dia.

3) Usando usermod –L para bloquear a conta.


Habilitando login por dial-up


Em /etc/login.defs existe a pção DIALUPS_CHECK_ENAB que caso seja configurado para yes irá permitir a conexão por dialup. Nesse caso serão necessários a existência de outros dois arquivos:

/etc/dialups, contendo a lista das portais seriais onde se encontram os modens e os usuários disponíveis

/etc/d_passwd contém a senha dos usuários mencionados no arquivo anterior.

quarta-feira, 7 de maio de 2008

Entendendo o Sistema de Permissões no Linux

No Linux, assim como em outros sistemas operacionais, os arquivos podem possuir determinados atributos, ou permissões. Na época do DOS, até mais ou menos o Windows Me, os sistemas da Microsoft (que rodavam em partições FAT16 ou FAT32) trabalhavam apenas com dois atributos: oculto e somente-leitura, podiam ter valor de 0 ou 1.

Nos sistemas Microsoft da família NT (onde entram inclusive o XP e o Vista) temos um sistema de permissões próximo ao que trabalhamos no Linux, que são pemissões de leitura, escrita e execução, que podem ser configuradas em um arquivo, para serem inerentes ao dono do arquivo, ao grupo dono do arquivo e a outros usuários.

Normalmente as permissões nos arquivos são configuradas através do comando chmod permissões arquivo, onde permissões podem ser 1 para execução, 2 para escrita e 4 para leitura, ou uma combinação destes.

Exemplos?

Suponhamos que temos o arquivo programa, que pode ser executado/lido/escrito pelo seu dono e seu grupo, mas não pode ser acessado por outros usuários, devemos então usar o comando

Chmod 770 programa

Ou suponhamos o arquivo tabela, que não será executado, mas será lido e escrito por seu dono e será apenas lido por quaisquer outros usuários, um exemplo

Chmod 644 planilha

Simples, não? Muitas pessoas, porém não entendem o porquê do uso dessa numeração. A explicação é bem simples, e ajuda bastante a entender uma parte fundamente de funcionamento do sistema e ajuda a se familiarizar com o processo.

Dando um ls –l em um determinado diretório, temos o seguinte retorno

drwxrwxrwx diretório
-rwxrwx--- programa
-rw-r-—r-- planilha


Essa informação retornada antes do nome dos arquivos, são as permissões que os mesmos possuem. As permissões são salvas em uma área especial de metadados da partição (isso varia de partição para partição. Lendo meu post sobre ReiserFS você pode ver que no caso desta partição eles ficam salvos nas folhas da árvore, junto com os inodes diretos), sendo uma seqüência de 9 bits, que podem assumir 0 ou 1.

No caso do retornado pelo ls –l, ele ainda nos mostra um primeiro caracter, que pode assumir determinados valores que podem variar de vazio, para arquivos, d, para diretórios, l, para links simbólicos entre outros. Olhando para as permissões em si, tomemos como exemplo as do arquivo planinha

+------+-------+--------+
rw- r-- r—-
+------+-------+--------+
dono grupo outros
+------+-------+--------+


São portanto 3 permissões, para 3 “entidades” distintas: usuário, grupo e outros; cada permissão dessa pode assumir valor sim ou não, ou 0 e 1. Vamos então pegar os valores acima e substituir as letras por números:

+------+-------+--------+
110 100 100
+------+-------+--------+
dono grupo outros
+------+-------+--------+


Convertendo binário para decimal temos:

Permissão para o dono do arquivo: 110 (binário) ou 6 (decimal)
Permissão para o grupo do arquivo: 100 (binário) ou 4 (decimal)
Permissão para outros usuários: 100 (binário) ou 4 (decimal)


Opa! 644 não são os valores que nós definimos para esse arquivo pelo chmod???

É isso mesmo, os números 1, 2 e 4, são na verdade representações decimais para os valores binários das permissões.

Execução => 1 => 001
Escrita => 2 => 010
Leitura => 4 => 100

Adaptando isso para determinadas permissões

Em linguagem humana:
Execução/Leitura/Escrita-Execução/Leitura-Execução

Em decimal:
751

Em binário;
111101001

Fácil não?

Entendendo o ReiserFS ou Reiser3

Falarei hoje sobre o que é o ReiserFS, criado por Hans Raiser e mantido durante muito tempo por sua empresa, a Namesys. O ReiserFS, também chamado de Reiser3, possui uma atualização chamada Reiser4, com aprimoramento das características que falarei adiante, porém o mesmo não é suportado oficialmente pelo kernel do Linux.


A questão é que o ReiserFS é um dos sistemas de arquivos mais interessantes já lançados, não é a toa que o mesmo conseguiu uma grande abrangência poucos anos após seu lançamento, sendo inclusive adotado como filesystem padrão de algumas grandes distribuições, como a SuSE, durante algum tempo. Dentre essas características podemos citar logo de cara que o ReiserFS é um sistema jornalado, ou com suporte a journaling, ou loggin. Isso significa que antes de se realizar uma modificação em um arquivo no disco rígido, o Reiser escreve a alteração em um arquivo de log, para em seguida fazer a alteração no arquivo para só após o ok apagar o log. Isso garante a integridade dos dados em casos de, por exemplo, uma falta de luz.

Outro ponto positivo do sistema ReiserFS é a alocação dinâmica de blocos; enquanto em outros sistemas de arquivos (como o todo poderoso NTFS) o tamanho dos blocos é fixo, no reiser os mesmos são dinâmicos. Isso significa que, se em uam partição NTFS você salva um arquivo de 8K em uma partição com blocos de 64K, o arquivo ocupará 64K, já no reiser ele ocupará apenas os seus 8K.

Suporte a partições de 16 TiB, diferente de sistemas como ext3 que acima dos 8 TiB começam a apresentar problemas de performance.

Outra característica bem interessante do ReiserFS é a sua organização em árvore, chamada B+ Tree. Nessa organização, os dados são armazenados em folhas em sub-árvores, chamadas ponteiros, que por sua vez são ligados a raiz, ou árvore principal

Dentro dessa estrutura encontramos os dados, que são classificados como diretórios, dados diretos, dados indiretos e inodes. Os inodes são os metadados dos arquivos armazenados, os mesmos ficam armazenados junto as folhas, com os dados diretos, que são os arquivos de pequeno tamanho. Os arquivos de grande tamanho, por sua vez, são chamados de dados indiretos e são localizados fora da árvore através dos ponteiros.

Essa estrutura permite uma localização muito rápida de arquivos pequenos (como os usados pelo sistema) porém possuem como risco a fragmentação, que pode acabar por exigir uma maior processamento por parte do computador. Em linhas gerais, testes de performance feitos entre ReiserFS e ext3 sempre apontam por uma melhor performance do sistema Reiser.

Hoje o desenvolvimento do ReiserFS anda meio sombrio, devido ao fato de seu criador ter sido preso em meados de 2007, sob suspeita de assassinato da própria esposa. Apenas de curiosidade, esse é um caso deveras confuso, pois ao que parece a mulher possuía um amante que era assassino confesso de 8 pessoas, mas que negava veemente ter matado a mulher, enfim uma zona de pessoas suuuuper legais :S

Páginas de Referência:
http://www.guiadohardware.net/dicas/recuperando-arquivos-particoes-reiserfs.html
http://www.infowester.com/reiserfs.php
http://homes.cerias.purdue.edu/~florian/reiser/reiserfs.php
http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=2119&pagina=7
http://en.wikipedia.org/wiki/ReiserFS

terça-feira, 6 de maio de 2008

Entendo Security SHell: SSH e OpenSSH

O Security SHell (ou SSH) é uma ferramenta de acesso remoto largamente utilizada nos sistemas Unix. Sua implementação nos sitemas GNU/Linux é chamado OpenSSH.

O OpenSSH não é a única opção de acesso remoto disponível para sistemas NIX, podemos citar outras como telnet, rlogin rcp etc, porém apenas o OpenSSH trabalha de modo seguro, utilizando chaves o sistemas de chaves pública x chave privada de tamanho variável, podendo ser tanto RSA, protocolo primário ou DSA. Além disso o procolo trabalha com pacotes TCP e sua conexão normalmente ocorre na porta 22.

O pacote do OpenSSH é composto de diversos programas, que são:

sshd, o daemon responsável por gerenciar as conexões ao sistema.

ssh, programa cliente para conexões a outros sistemas.

scp, programa que permite a cópia de arquivos diretamente entre um sistema e outro.

sftp-server, servidor de ftp seguro

sftp, cliente de ftp seguro

ssh-keygen, programa utilizado para gerar chaves de acesso em cliente. (ver abaixo sobre arquivo authorized_keys)

ssh-agent, agente de autenticação;

ssh-add, adiciona chaves de autenticação ao programa de autenticação;

ssh-keyscan, busca chaves públicas em um determinado servidor;

ssh-keysign, assistente para criação de autenticação baseada em hosts;

Os arquivos de configuração do servidor ficam salvos em /etc/ssh e o referente ao cliente podem ficar tanto nesse diretório quanto em ~/.ssh. No caso dos arquivos presentes em etc, salvo quando mencionado o contrário, os arquivos pertencerão ao root e possuirão permissão 644. Enfim, os arquivos são:

/etc/ssh/sshd_config, arquivo de configuração do daemon do ssh;

/etc/ssh/ssh_config, arquio de configuração do cliente ssh;

~/.ssh/config, arquivo de configuração pessoal dos clientes de ssh de cada usuário.;

/etc/ssh_know_hosts, chave pública de servidores válidas para todos os usuários;

~/.ssh/know_hosts, armazena as chaves públicas válidas para um determinado usuário;

~/.ssh/authorized_keys, arquivo opcional que evita a digitação senha em determinados servidores, nele são armazenadas as senhas geradas pelo ssh-keygen;

/etc/ssh/ssh_host_dsa_key, arquivo onde fica armazenada a chave DSA privada do servidor, somente o root possui acesso a esse arquivo (permissão 600);

/etc/ssh/ssh_host_rsa_key, arquivo onde fica armazenada a chave RSA privada do servidor, somente o root possui acesso a esse arquivo (permissão 600);

/etc/ssh/ssh_host_dsa_key.pub, arquivo onde fica armazenada a chave DSA pública do servidor;

/etc/ssh/ssh_host_rsa_key.pub, arquivo onde fica armazenada a chave RSA pública do servidor;

Assim como outros serviços de rede, o acesso via ssh pode ser permitido ou negado através de TCPWrappers e o login a usuários não root pode ser negado pela existência do arquivo /etc/nologin.

Fontes de Pesquisa:

SIQUEIRA, Luciano Antonio. Certificação LPI-1. São Paulo: Linux New Media, 2007.

http://www.openssh.org/manual.html

http://focalinux.cipsga.org.br/guia/avancado/ch-s-ssh.html

segunda-feira, 5 de maio de 2008

Registrando informação: Logs, Syslog, Syslogd, Logrotate, logger e dmesg

Uma das ferramentas mais importantes de um bom administrador de sistemas são os seus registros de eventos passados ocorridos no sistema: os logs, como são mais comumente chamados.

Os sistemas GNU/Linux armazenam seus logs principais em /var/log e são eles:

Messages: contém as mensagens do kernel.

Secure: contém todas as alterações relativas a usuários e segurança do sistema, incluindo avisos de logins mal sucedidos.

Mail: contém mensagens do serviço de e-mail.

Cron: contém mensagens relativas ao serviço do cron.

Apesar de esses quatro arquivos serem os mais comuns na maioria das distribuições, sua presença não é obrigatória já que sua existência depende de um programa: syslogd.

Syslogd é um programa de gerenciamento e armazenamento de logs. Sua configuração resite em /etc/syslog.conf, portanto a existência dos arquivos anteriormente mencionados depende de tal configuração existir nesse conf.

A estrutura de syslog.conf é simples, consistindo em basicamente de várias linhas no formato:

Origem.prioridade destino

Onde origem pode ser qualquer uma entre: auth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, syslog, user, uucp, local0, local1, local2, local3, local4, local5, local6 e local7.

Algumas dessas origens são auto-explicativas, as demais são:


Auth, mensagens de segurança/autorização (nível de segurança: médio) authpriv, mensagens de segurança/autorização (nível de segurança: médio – mais indicado)
Cron, mensagens do cron, at, anacron e etc
Daemon, determinados daemons do sistema, otimiados para uso com o syslogd.
ftp, servidor de ftp.
Kern, Mensagens do kernel.
Lpr, sistema de impressão.
Local, Uso local.
Mail, serviço de e-mail.
News, serviço de newsSubsistema de notícias da USENET.
Security, Mensagens de segurança/autorização (nível de segurança: baixo – evite utilizar)
Syslog, Mensagens internas geradas do programa.
User, Mensagens genéricas de operações com usuários.
Uucp, Mensagens sobre troca de arquivos usando UUCP.

Com relação a prioridade, as mesmas podem ser: debug, info, notice, warning, err, crit, alert, emerg e none, onde:

Debug, Mensagens relativas a atividades de debug
Info, Mensagens Informativas
Notice, Mensagens observativas
Warning, Avisos
Err, Mensagens de erros
Crit, Mensagens críticas
Alert, Mensagens de alerta
Emerg, Mensagens de Emergência
None, Mensagens sem qualquer classificação

Por fim temos o campo destino, onde pode ser especificado um caminho de um arquivo de log, ou de um console, ou pode ser feito um pipe para outros programas.

Você pode utilizar alguns metacaracteres no arquivo de configuração do syslog, como por exemplo: * (asterisco) para indicar que a regra vale para todas origens e/ou prioridades pode usar , (vírgula) para separar mais de uma origem ou prioridade, = (igual) pode ser utilizado para definir uma prioridade para o evento e ! (exclamação) para excluir aquele evento de uma regra geral.

É preciso lembrar que após editar o arquivo de configuração do syslog é vital reiniciar o mesmo para que as alterações sejam efetuadas.

Você como administrador pode desejar incluir algumas linhas de informação no log do sistema, ou mesmo você pode querer que um determinado script escreva mensagens nesse log. Para isso você pode utilizar o programa logger, com a sintaxe logger mensagem. Anexando a opção –p você pode especificar um origem.prioridade para a mensagem que for ser adicionada.

Em servidores que trabalham com muitos acessos e operações em tempo real, o tamanho dos logs pode crescer para níveis astronômicos em pouco tempo. Para manter um controle e configurar a rotatividade dos logs, foi criado o programa logrotate, que se encarrega de gerenciar os logs dentro de regras estabelecidas em /etc/logrotate.conf. Esse gerenciamento pode variar do simples apagar, a criação de um arquivo comprimido, envio para outros servidores e várias outras opções.

Por fim, um programa que não está ligado diretamente a criação de logs, mas sim a sua exibição, é o dmesg, que retorna na tela todas as mensagens registradas no boot do sistema. Esse programa faz parte do apcote do syslog e não exige maiores configurações.

sábado, 3 de maio de 2008

Simulados LPI

Abaixo algumas dicas de sites que oferecem simulados gratuitos para as provas da LPI:

http://www.certificacaolinux.com.br
[em português]

http://www.penguintutor.com/certification.php
[em inglês]

http://www.linux-praxis.de/lpisim/lpi.html
[em inglês]

http://www.penguinbrain.com/
[em inglês]

LPI 102 e os Melhores Sites da Internet para Administradores de Sistemas

Uma das questões da prova 102 da LPI que me deixaram mais, como direi, confuso, foi: quais os sites que um bom administrador de sistemas deve visitar diariamente?


A primeira impressão que eu tive é de que essa era uma daquelas perguntas joke, que não se ganha nem perde pontos. Na hora eu fiquei meio perdido sobre o que responder e, como de praxe nessas provas, fiquei sem saber se acertei ou errei a mesma.

Para ajudas vocês resolvi compilar uma lista de sites que eu considero serem a resposta a qualquer questão semelhante. Segue abaixo:

http://www.linuxquestions.org
http://www.sourceforge.net
http://www.segfault.org
http://www.linux.com (sítio real do newsforge.net e .com)
http://www.linuxsecurity.com
http://www.tldp.org
http://www.lpi.org
http://www.slashdot.org
http://www.linuxtoday.com
http://www.freshmeat.net
http://www.tuxmachines.org
http://www.linux-tutorial.info
http://www.tuxnews.com (atalho para o slashdot, segfault e frashmeat)

Linux: lista de comandos comuns (e normalmente cobrados na LPI)

Segue abaixo uma pequena lista dos comandos mais utilizados em sistemas Unix-like. Para maiores informações sobre cada um deles você pode consultar a página man correspondente no seu sistema ou visistar sites como tldm ou guia foca.
Uma pequena observação é que a maioria desses comandos são cobrados nas provas da LPI. Por isso muita atenção no uso e sintaxe de cada um.
bg: deixa um processo executando em background.
chattr: modifica atributos de arquivos e diretórios. Não é referente a permissão de acesso.
chfn: muda a saída do comando finger.
chkconfing: configura a inicialização automática de daemons.
clear: limpa a tela.
cmp: comparação binária entre dois arquivos.
cut: mostra determinado trecho de linha/coluna de um arquivo.
date: visualiza/modifica data e hora do sistema.
depmod: verifica a dependência de determiando módufo.
df: espaço ocupado/disponível dos dispositivos de armazenamento montados.
diff: comparação texto entre dois arquivos.
dig: ferramente de lookup para servidores DNS.
dirname: obtém o nome do diretório.
dmesg: mostra as mensagens da inicialização do sistema.
dnsdomainname: mostra o nome do domínio do sistema.
du: mostra espaço ocupado dentro do diretório atual.
echo: mostra mensagens.
edquota: edita configurações de cota de disco.
expand: subsitui TABs por espaços simples.
find: faz uma busca no sistema.
finger: mostra detalhes sobre os usuários do sistema.
fg: pega um processo em bacvkground e o deixa em foreground.
fmt: formata a sa´dia para determinado número de caracteres por linha.
free: mostra espaço disponível de memória.
grep: buscar uma sequência de caracteres.
groupadd: adiciona um grupo no sistema.
groupdel: remove um grupo do sistema.
groups: mostra o nome dos grupos cadastrados.
halt: atalho para desligar imediatamente o sistema.
head: mostra as linhas iniciais de um arquivo.
hexdump: visualizados de arquivos binários em hexa.
host: ferramente de lookup para servidores DNS.
hostname: mostra/altera o nome do computador.
id: retorna informações sobre o usuário.
insmod: carrega módulos do kernel sem checar as dependências.
join: concatena arquivos baseado em campos.
kmod: carrega módulos automaticamente pela demanda.
last: mostra o histórico de logins e logouts no sistema.
lastlog: mostra o último login no sistema.
less: paginação de arquivos ou da entrada padrão.
ldconfig: cria links necessários e cache das bibliotecas encontradas no sistema.
logname: mostra o login.
ln: cria links no sistema.
logger: permite que scripts adicionem entradas em arquivos no /var/log.
lpc: contra a fila de impressão.
lpq: mostra o estado da fila de impressão.
lpr: envia um arquivo para fila de impressão.
lprm: remove um trabalho da fila de impressão.
lsattr: visualiza atributos de arquivos e diretórios: Não é referente a permissão de acesso.
lsmod: lista os módulos carregados pelo kernel.
mesg: permite a comunicação através do talk.
modconf: interface que facilitar o carregar de módulos.
modinfo: exibe informações sobre determinado módulo incluindo opções de configuração.
modprob: carrega módulos do kernel checando as dependências.
more: paginação de arquivos ou da entrada padrão.
netstat: mostra conexões, roteamento estatisticas e etc.
newgroup: altera a identificação do grupo de um determinado usuário.
nl: numera as linhas de um arquivo. Equivale cat -b.
nohup: inicia um programa e o joga para background caso o usuário se deslogue.
passwd: modifica a senha de um usuário.
paste: concatena arquivos lado a lado.
ping: envia pacotes ICMS para outro host da rede.
pwd: mostra o diretório atual.
quota: monitoração e controle das cotas.
quotacheck: estatísticas de uso das cotas de disco.
reboot: atalho para reiniciar imediatamente o sistema.
repquota: gerador de relatórios sobre as cotas.
rmmod: remove módulos carregados pelo kernel.
runlevel: mostra o runlevel anterior e atual.
seq: imprime uma seqüência de números.
shutdown: desligamento e reinicio do computador imediatamente ou de maneira programa.
sort: organiza conteúdo de arquivos ou a entrada padrão do programa.
su: permite uma "troca rápida de usuários".
sg: permite uma "troca rápida de grupo".
sync: grava dados na memória ram ao invés do cache de disco, deixando para faze-lo em caso de ociosidade do sistema.
tail: mostra as linahs finais de um arquivo. inverso do comando head.
talk: inicia uma conversa com outro usuário logado.
tee: lê uma entrada e redireciona para uma ou mais saída.
telinit: modifica o runlevel atual do sistema.
time: mostra tempo gasto para execução de um processo do sistema.
touch: cria arquivos vazios e muda data/hora de arquivos existentes.
tr: modifica ou deleta caracteres.
uname: retorna nome e versão do sistema.
unexpand: subsitui espaços simples por TABs.
uniq: exibe um arquivo texto suprimindo linhas seqüênciais repetidas.
uptime: mostra a quanto tempo o sistema está ligado.
useradd: adiciona um usuário no sistema.
userdel: remove um usuário do sistema.
users: mostra o nome dos usuários cadastrados.
vigr: abre uma seção do vi apropriada para edição do arquivo /etc/group.
w: mostra quem está logado no sistema e o que está fazendo.
wall: envia uma mensagem a todos os usuários logados no sistema.
wc: contado de palavras, bytes e linhas de um arquivo ou da entrada padrão.
which: mostra a localização de um arquivo binário que esteja no PATH do sistema.
who: mostra em questá logado no sistema.
whoami: mostra o seu usuário.

Entendo o FHS: Filesystem Hierarchy Standard

Meu primeiro post de hoje será sobre o FHS ou Filesystem Hierarchy Standard, um assunto que também é bastante abordado nas provas da LPI (principalmente na prova 101). Mas afinal, o que seria isso? FHS é um padrão criado em 1996 como uma forma e padronizar a estrutura hierárquica das distribuições Unix-Like, de em foco um objetivo claros: o de possibilitar que usuários e programas possam prever a localização dos arquivos instalados.


Atualmente o FHS se encontra na versão 2.3, tendo sido atualizado pela última vez no dia 29 de janeiro de 2004 e tendo sido editado por Rusty Russell, Daniel Quinlan e Christopher Yeoh. Essa última versão, assim como as anteriores, se encontram disponíveis em http://www.pathname.com/fhs/

Tal documento não é uma matriz obrigatória que todos os sistemas operacionais devem seguir. A grande maioria deles segue o FHS em linhas gerais porém acabam, por apresentar pequenas variações. Outros, como por exemplo, o GoBoLinux, apresentam uma organização completamente distinta.

Os métodos seguidos pelo FHS para que os objetivos propostos possam ser alcançados consistem em básicamente 4 diretrizes:

Especificação do índice de cada área do sistema de arquivos;
Especificação do número mínimo de arquivos e diretórios;
Enumeração das exceções;
Enumeração dos casos de conflito e legado.

Abaixo vou descrever os principais diretório e expor uma breve explicação sobre cada um. Todo este material se encontra em concordância com a versão 2.3 da FHS e para maiores informações eu recomendo a você uma lida neste documento aqui.

/ ou root ou ainda partição raiz do sistema, será aquela onde se encontra o sistema operacional com os programas básicos necessários para iniciar (boot), restaurar, recuperar e reparar outros sistemas de arquivo.

/bin, armazena comandos básicos para a inicialização do sistema e de execução de scripts. Pode ser acessados por administradores e usuários comuns e deve estar localizado na partição raiz.

/boot, armazena todos os arquivos de configuração necessários para a inicialização (boot) do sistema, além disso é o local onde fica armazenado o kernel do sistema.

/dev, nesse diretório ficam os arquivos relativos aos dispositivos no computador.

/etc, armazena todos os arquivos de configuração

/home, armazena arquivos dos usuários assim como seus arquivos de configuração particulares.

/lib, armazena as bibliotecas compartilhadas básicas assim como os módulos do kernel.

/media, contém subdiretórios utilizados como ponto de montagem para disquetes, pendrivers, cds e outras partições. Substitui as montagens em diretórios diretamente em / e em /mnt, por questões de legado com programas que montagem dispositivos diretamente nesse diretório.

/mnt, serve como ponto de montagem temporário mantido apenas por legado.

/opt, é reservadp para a instalação de plugins e aplicativos específicos. Pode estar localizado em um file system diferente do root.

/sbin, é o diretório onde são armazenados programas essenciais para administração do sistema, o que inclui o processo de inicialização, restauração, recuperação e reparo do sistema, em conjunto com os programas de /bin, com a diferença de que esses programa são para uso exclusivo de administradores. Essa definição se estente a outros diretórios sbin como /usr/sbin e /usr/local/sbin.

/srv, armazenas dados relativos aos serviços providos pelo sistema. Exemplo em um servidor de páginas, as mesmas ficariam armazenadas em /srv/www/htdocs.

/tmp, diretório para armazenamento de dados temporários.

/var, serve para o armazenamento de dados variáveis como ubdiretórios de spool, arquivos de log, arquivos temporários e etc. A diferença básica entre o conteúdo do /var e do /tmp é a sua criticidade e tempo de vida, pois os arquivos de /var são importantes e apesar de possuir tempo de vida contado, esse normalmente é bem maior que os de /tmp. Pode estar localizado em um file system diferente do root.

/proc, é um diretório “virtual”, no sentido de que não ocupa espaço no sistema de arquivos. É utilizado pelo kernel do Linxu para exibir dados e informativos sobre o estado do sistema.

/usr, é um diretório compartilhável, porém como somente-leitura, que fornece uma segunda estrutura semelhante as estrutura principal, contendo um subdiretório bin, sbin, lib, include (utilizado para o armazenamento de headers), share (utilizado para o armazenamento de dados não binários), src (para o armazenamento de fontes) e local (que contém uma terceira hierarquia, semelhante a esta, para o armazenamento de programa não usados pelos demais computadores da rede). Pode estar localizado em um file system diferente do root.

Inicialização de um Sistema Linux: Init, Inittab, Sysvinit. (LPI Prova 102)

O processo de inicialização (boot) do Linux costuma ser um item certo de cair na LPI (principalmente na prova 102), por esse motivo é preciso ter pleno conhecimento de como esse processo ocorre e principalmente é preciso conhecer o seu principal integrante que é o programa init.

Init é primeiro processo/programa a ser executado pelo sistema, logo após o carregamento do kernel pelo gerenciador de boot (lilo, grub, etc). Sua primeira tarefa será ir até o seu arquivo de configuração, normalmente /etc/inittab, e verificar qual o script mestre de inicialização, normalmente /etc/rc.d/rc.sysinit.

É preciso lembrar que nem todas as distribuições utilizam esse nome para o script mestre. O SuSE por exemplo chama o /etc/init.d/boot. Para que possamos verificar ou configurar qual será o script, basta ir no arquivo /etc/inittab verificar a linha:

si::sysinit:/etc/rc.d/rc.sysinit

O script mestre sysinit carregará então os itens básicos do sistema como seu nome, logs, data/hora, periféricos de entrada principal(teclado), fonte, partições de swap e dispositivos de armazenamento.

O próximo passo do init consiste em iniciar os itens referentes ao runlevel padrão do sistema. Como todos sabem os sistemas unix-like são multi-usuário e multi-tarefa, ou seja isso nos possibilita diferentes modos de execução, chamados run level, que são identificados por número:

0 – desligamento do sistema

1 – mono usuário

2 – multi usuário sem serviço de rede

3 – multi usuário com serviço de rede

4 – não especificado

5 - multi usuário com serviço de rede e login gráfico.

6 – reinicialização do sistema.

Apenas os níveis 0, 1 e 6 são padronizados. Os demais podem variar de distribuição para distribuição. Cada um desses níveis possui um script de inicialização no init próprio, portanto logo após a execução do script mestre o init executará o script referente ao runlevel padrão.

O nível padrão é configurado no /etc/inittab pela linha:

id:5:initdefault:

Os scripts referentes a cada runlevel por sua vez são configurados nas linhas:

l0:0:wait:/etc/rc.d/rc 0

l1:1:wait:/etc/rc.d/rc 1

l2:2:wait:/etc/rc.d/rc 2

l3:3:wait:/etc/rc.d/rc 3

l4:4:wait:/etc/rc.d/rc 4

l5:5:wait:/etc/rc.d/rc 5

l6:6:wait:/etc/rc.d/rc 6

Onde cada linha segue o padrão:

id:runlevel:ação:processo

A configuração da famosa combinação CTRL + ALT + DEL também é feita no arquivo /etc/inittab pela linha:

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

Por fim, o init irá executar um programa de emulação de terminal ou de login para que agora o usuário, com o sistema todo iniciado no runlevel desejado, possa acessar o sistema.

É preciso lembrar que todos os passos mostrados aqui não representam um caminho único. Esse processo de inicialização é chamado de SysVInit. Existem outros padrões de inicialização do init (o Ubuntu mesmo utiliza um bem distinto) como o SysIIIInit, BSDInit, porém para as questões da LPI é preciso ter bem em mente como é o funcionamento do padrão que já foi um dos mais difundidos entre as grandes distribuições.

Agendamento de Tarefas No Linux: at, cron e anacron

Imaginemos uma situação onde um administrador de sistemas precisasse realizar um determinado processo as 0h de sábado para domingo. Imaginemos ainda que esse processo não fosse nada interativo, fosse apenas questão de nosso amigo iniciar o mesmo e depois ir embora. Você concordam que não faz sentido o administrador ficar horas lá parado em frente ao seu terminal apenas esperando dar a hora de iniciar o processo?


Para situações como essa o Linux nos oferece algumas opções de agendamento de tarefas. No caso da situação mostrada acima, o administrador poderia configurar um trabalho e o agendador se encarregaria de iniciar o processo e em caso de falha alertar o administrador por e-mail, sms ou outro meio.

Basicamente são 3 os agendadores disponíveis para sistemas Linux: at, cron e anacron. A segui eu falarei mais especificamente sobre cada um deles.

Agendamento de Tarefas No Linux: Usando o At

At é o sistema de agendamento mais simples disponível. Seu processo de agendamento é feito via console através da sintaxe:
# at momento comando
Onde:

at é o nome do programa propriamente dito

comando é o comando que vc deseja que seja executado. Caso não seja especificado nenhum comando, será aberto um pequeno prompt do at onde você poderá entrar com os comandos a serem executados. Após inserir o último basta apertar CTLR + D para salvar e sair.

momento seria a data e hora em que o comando será executado, que pode ser escrito das seguintes maneiras:

Midnight: meia noite
Noon: meio dia
Teatime: 16 horas

Ou você pode especificar uma hora personalizada no formato HH:MM, que pode ser acompanhado dem AM e PM e ainda ser acompanhada de data nos formatos MMDDYY ou MM/DD/YY ou ainda DD.MM.YY. Você também pode juntar a palavra tomorrow para que a tarefa seja executada no dia seguinte.

Outra possibilidade é a de se especificar um momento no futuro a partir do presente usando now + contador unidade onde contador vai ser o período e unidade pode ser minutes, hours, days e weeks. Ou mesmo você também pode especificar uma hora depois desse tempo colocando uma hora seguido de am ou pm no lugar do now.

Alguns exemplos:
# at 4pm + 3 days /usr/bin/programa.bin

# at 20:00 /usr/bin/programa2.bin

# at 10am Jul 31 /usr/bin/programa3.bin

# at 1am tomorrow /usr/bin/programa
Você pode incluir os comandos a serem executados em um script e carregar o mesmo através do comando:
# at –f script.sh noon
Além da opção –f, o at possui outras opções, que são:

-c: exibe o conteúdo para uma tarefa
-m: envia um email ao fim da tarefa (exige a instalação do sendmail)
-v: mostra a hora em que o trabalho será executado

O comando at possui outros 3 associados, que são:

atq, equivale a at –l, permite visualizar a lista de trabalhos pendentes
atrm, equivale a at –d, permite remover trabalhos da lista
batch, executa um trabalho somente quando o load average do sistema abaixa.

O at possui os seguintes arquivos associados:

/etc/at.allow : caso esse arquivo existe, apenas os usuários indicados no mesmo poderão inserir novos jobs.
/etc/at.deny: caso o arquivo at.allow não exista, apenas os usuários não especificados aqui poderão agendar tarefas.
/var/spool/cron/atjobs
/var/spool/cron/atspool

Agendamento de Tarefas No Linux: Usando o cron

Mais robusto do que o at, o Cron se resumo a um daemon, o crond, que a todo minuto verifica um arquivo, o /etc/crontab ou em /var/spool/cron/tabs em busca de novos trabalhos. O arquivo crontab é editável através do comando crontab –e (que edita o arquivo dentro do /var, separado por usuário),que não é recomendado por algumas distribuições como a SuSE ou a edição direta do /etc/crontab


Ao executar o crontab –e o editor de textos padrão do sistema (o vi ou vim) será aberto já no crontab. No final da edição, basta você salvar e sair do vi da maneira tradicional. Dentro do arquivo encontraremos os trabalhos agendados escritos de maneira semelhante ao exemplo abaixo:

1 12 1 1 * /usr/local/bin/programa.bin
Essa linha segue a seguinte máscara

minuto hora dia mês dia-da-semana executável-com-path-completo

Substituindo as máscaras pelo escopo de valores possíveis nós temos:
0-59 0-23 0-31 1-12 0-6 executável-com-path-completo
Um ponto a ser chamado atenção é o fato do executável (programa/comando) ter a necessidade de estar descrito com seu path completo isso porque durante a execução de um programa pelo cron as únicas variáveis disponíveis são $USER, $HOME e $SHELL.

No caso do primeiro exemplo, o mesmo significa que o programa programa.bin localizado em /usr/local/bin seria executado ao primeiro minuto das 12 horas do primeiro dia do mês janeiro. O campo relativo ao dia da semana foi substituído por um asterisco de modo que ele seria executado independente de qual fosse o dia da semana.

Podemos substituir qualquer opção por asterisco, como nos exemplos abaixo:
* * * * * /usr/bin/meuprog.bin
Nesse exemplo, meuprog.bin em /usr/bin seria executado a todo minuto, de toda hora, de todo dia de todo mês.

Um detalhe curioso a respeito do campo de dia da semana: as compilações mais novas possuem um range de 0 a 7, onde o 0 e o 7 representam o domingo.

É possível definir vetores dentro dos campos, usando - , /. [traço, vírgula, barra]. Veja os exemplos:

*/5 * * * * /root/backup.sh

Essa linha executaria o script backup.sh a cada 5 minutos

* 9-18 * * * /root/backup.sh

Essa linha executaria o script backup.sh das 9 as 18 horas

* 9,11 * * * /root/backup.sh

Essa linha executaria o script backup.sh as 9 e as 11 horas.

No caso de sistemas como o Suse, onde o uso do Crontab é desaconselhado você pode editar o arquivo /etc/crontab e inserir tais linhas com a opção de colocar antes do comando o nome do usuário como o qual aquele comando será executado.

* * * * * root /root/backup.sh

Esse comando executaria o script.backup.sh a todo minuto com os privilégios de root. Outra opção é criar um arquivo de texto com a seguinte linha e salvar o mesmo dentro do /etc/cron.d

Além do comando –e, o crontab outras opções como –r que remove todo o conteúdo, o –l que lista o conteúdo atual e o –u que troca de usuário.

Assim como com o comando at, o arquivo /etc/cron.allow, caso exista, irá conter o nome dos usuários autorizados a utilizar o cron. Caso o arquivo cron.allow não existe mas o arquivo /etc/cron.deny exista, apenas os usuário fora dele poderão utilizar o cron. Caso nenhum dos dois exista todos poderão utilizar o cron.

Outra ferramente disponível semelhante ao cron é o anacron, que funciona de maneira separada porém sem assumir que o sistema funcione 24 horas/dia. O anacron lê seus trabalhos em /etc/anacrontab, verifica de quantos em quantos dias o mesmo deve ser executado. Caso o limite tenha sido extrapolado anacron o executa.

Teclas de Atalho do BASH

Embora muitos usuários não saibam, o bash possui algumas teclas de atalho bem interessantes. Deixo aqui uma pequena lista com as mais usadas.

Ah sim, algumas teclas, principalmente as ligada a parte de histórico, costumam ser cobradas na LPI-102.

  • Histórico:
CTRL + P: equivale a seta para cima
CTRL + N: equivale a seta para baixo
CTRL + R: Busca por uma linha de forma descendente
CTRL + S: Busca por uma linha de forma ascendente
CTRL + J: Finaliza busca
CTRL + G: Aborta a busca e retorna a linha original
ALT + CTRL + Y: Mostra argumentos do último comando
ALT + .: Mostra o último argumento do último comando
ALT + _: Mostra o último argumento do último comando
ALT + >: Busca pelos últimos argumentos
ALT + < + >: "Cola o último argumento buscado e inicia nova busca
!$: imprime na tela a última palavra do comando anterior
!!: equivale ao CTRL + P +

  • Movendo o cursor:
CTRL + B: um caracter para esquerda
CTRL + F: um caracter para direita
ALT + B: uma palavra para esquerda
ALT + B: uma palavra para direita
CTRL + A: início da linha
CTRL + E: fim da linha
CTRL + X + X: se estiver no inicio vai para o fim e vice versa
  • Apagando Caracteres
CTRL + D: equivale a tecla DEL
CTRL + U: todos a esquerda do cursor
CTRL + K: todos a direita do cursor
ALT + D: a primeira palavra a direita do cursor
CTRL + W: a primeira palavra a esquerda do cursor
CTRL + Y: cola a última palavra apagada
ALT + Y: cola a penúltima palavra apagada
  • Completando linha:
ALT + ?: Equivale ao TAB
ALT + *: Equivale ao TAB porém escreve as opções na tela.
ALT + /: Equivale pobremente ao TAB
  • Outras funções do TAB
: Completa nomes
/: Mostra a estrutura de diretório
*: Mostra os sub-diretórios
~: Mostra os usuários cadastrados em /etc/passwd
$: Mostra as variáveis do sistema
@: Mostra as entradas em /etc/hosts

  • Outros
CTRL + _: Desfaz o último comando
CTRL + X: Desfaz o último comando
CTRL + U: Desfaz o último comando
ALT + R: Desfaz todos os comandos
CTRL + L: Limpa a tela
CTRL + I: Limpa a tela imprimindo o último comando no topo
CTRL + T: Troca a posição de 2 caracteres anteriores ao cursor
ALT + T: Troca a posição das 2 palavras anteriores

Documentação no Linux: Entendendo as Páginas Man

Presente em vários sistemas operacionais Unix-like, as páginas man representam um conjunto de documentação centralizado e organizado de todas as aplicações instaladas no sistema e do próprio. Como a abreviação mesmo diz, eles são verdadeiros manuais mostrando todas as opções disponíveis e imagináveis de uso e configuração.


Diz o ditado que “apenas o man sabe tudo sobre o bash” o que não deixa de ser verdade (embore Júlio Neves venha a descordar dessa frase :D), pois muitas vezes a quantidade de opções disponíveis nesses sistema torna a tarefa de decorar todas as opções um tanto árdua, por isso mesmo os melhores administradores tendem a vez ou outra ir lá caçar aquela opção obscura dentro das páginas man.

O programa man é composto de dois programas básicos. O man propriamente dito e o mamdb. As páginas man se encontram compactadas em determinados diretórios, no geral /usr/man ou /ush/share/man (mais comumente este). A existências de outros diretórios, adicionais ou não a esses, pode ser especificada através da variável de sistemas MANPATH ou no arquivo de configuração do man, localizado em /usr/lib/man.conf ou /etc/man.conf ou ainda no caso do Ubuntu /etc/manpath.config.

Voltando aos programas. O mamdb verifica quais paths as páginas man se encontram armazenadas e gera um índice de palavras-chaves encontradas nas mesmas, de modo que no momento em que o administrador do sistema precise recorrer ao man a sua pesquisa seja a mais rápida possível.

O arquivo man por sua vez, é o responsável por abrir a página solicitada, na seção solicitada e mostra-la ao usuário. Sua sintaxe básica é

# man item_a_ser_procurado

Como eu disse, a página man não apenas mostra o documento solicitado, mas também na seção desejada. As seções existem com o objetivo de agregar as páginas não somente por comando mas também por função. Temos normalmente 9 seções, que segue abaixo:

Seção 1: programas e comandos
Seção 2: sistema
Seção 3: bibliotecas
Seção 4: dispositivos
Seção 5: convenções e formatos de arquivo.
Seção 6: jogos
Seção 7: outros
Seção 8: procedimentos administrativos
Seção 9: kernel

Alguns comandos podem e normalmente possuem 2 ou mais seções de páginas manual. Um exemplo o comando crontab, cuja página man pode ser chamada das seguintes maneiras:

# man crontab

(que equivale a #man 1 crontab)
Será exibida a página man do programa crontab, responsável por carregar a tabela de trabalhos do cron

# man 5 crontab

Irá mostrar as opções de configuração do arquivo crontab, o arquivo de configuração do cron.

Outros dois programas auxiliares são utilizados em conjunto com o man:

O primeiro é o apropos. Digitando apropos seguido por um termo qualquer, este irá procurar por todas as páginas man e retornará na tela aquelas que possuem referência ao termo solicitado. Esse comando pode ser substituído pelo próprio comando man com a opção –k.

Outro comando é o whatis, que irá retornar a descrição básica do programa/comando/biblioteca/etc solicitado e todas as seções de páginas man relacionadas. O programa utiliza a mesma base criada pelo programa mandb.

por Tales de Azevedo (hailtales@gmail.com)

Controle de Serviços de Rede: Inetd, Xinetd e TCPWrappers

É inegável que classicamente o campo de atuação mais forte dos sistemas Unix-like foram os servidores de rede. Servidor no sentido exato de servir, prover, oferecer um determinado serviço como e-mail, páginas, etc, serviços que sabemos bem são compostos por programas executados no sistema.


Classicamente, se você gostaria de manter um serviço de telnet rodando, você simplesmente o deixava ligado escutando a porta 23 e respondendo a eventuais solicitações. Esse método funciona, porém dessa maneira, além de você estar consumindo processamento com um programa que muitas vezes poderia nem estar sendo executado você ainda ficava sem qualquer controle sobre quem estava acessando tal serviço.

O daemon inet.d (e seu sucesso xinet.d) tomam para si essa tarefa: eles monitoram todas as portas do sistema e acionam os serviços conforme a demanda, além de trabalhar em conjunto com o daemon tcpd, que fornecer um sistema eficaz de autorização/negação de serviços a determinados clientes da rede.

No caso do inetd, o seu arquivo de configuração fica localizado em /etc/inetd.conf, onde os serviços disponíveis são listados linha a linha e seguem a lógica:

serviço socket protocolo flags usuário.grupo executável opções

O que resultaria, no caso de utilizarmos por exemplo o inetd para gerenciar o nosso servidor de telnet uma linha como essa abaixo:

telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd

Repare que na linha acima o service tcpd foi especificado com o objetivo de controlarmos o acesso ao nosso servidor.

Caso estivéssemos utilizando o xinetd, nossa configuração seria ligeiramente diferente. Embora o mesmo possua um arquivo de configuração, /etc/xinetd.conf, onde as configurações de todos os serviços possam estar especificadas, o usual é que esse arquivo contenha apenas as seguintes linhas:

# Simple configuration file for xinetd
#
defaults
{

# Please note that you need a log_type line to be able to use log_on_success
# and log_on_failure. The default is the following :
# log_type = SYSLOG daemon info

}

includedir /etc/xinetd.d


O primeiro detalhe a se notar é formato do arquivo, que difere bastante do inetd por não ser organizado linha a linha e sim por seção. Nesse arquivo, retirado do Ubuntu Server, existe apenas uma única seção sem qualquer configuração, apenas uma chamada para um diretório, /etc/xined.d.

#
# xinetd.conf
#
# Copyright (c) 1998-2001 SuSE GmbH Nuernberg, Germany.
# Copyright (c) 2002 SuSE Linux AG, Nuernberg, Germany.
#

defaults
{
log_type = FILE /var/log/xinetd.log
log_on_success = HOST EXIT DURATION
log_on_failure = HOST ATTEMPT
# only_from = localhost
instances = 30
cps = 5000 10

#
# The specification of an interface is interesting, if we are on a firewall.
# For example, if you only want to provide services from an internal
# network interface, you may specify your internal interfaces IP-Address.
#
# interface = 127.0.0.1

}

includedir /etc/xinetd.d

Esse outro arquivo foi retirado do SuSE 10. nele podemos encontrar algumas opções deifinas como log, instâncias, mas ainda assim nenhuma relativa diretamente a algum serviço. No final do arquivo também encontramos a referência ao diretório /etc/xinetd.d. Olhando em ambas distribuições nesse diretório iremos encontrar vários arquivos, com o nome de cada serviço disponível na máquina, contendo as seguintes intruções:

service telnet
{
flags = REUSE NAMEINARGS
protocol = tcp
socket_type = stream
wait = no
user = telnetd
server = /usr/sbin/tcpd
server_args = /usr/sbin/in.telnetd
}

Esse seria o conteúdo do arquivo telnet, serviço utilizado em nosso exemplo. As informação são basicamente as mesmas. Protocolo, o uso do tcpd. O que diferencia mais uma vez é a divisão em seção e não por linha. Essas informações, assim como as informações presentes nos demais arquivos referentes aos demais serviços, poderiam estar todas presentes no /etc/xinetd.conf, porém dessa maneira o trabalho de localizar, habilitar e desabilitar serviços fica bem mais simples.

Em ambos os casos nossos falamos sobre controle de acesso através do tcpd. Esse controle é chamado TCPWrappers e sua configuração ocorre em dois arquivos /etc/hosts.allow e /etc/hosts.deny. A entrada em ambos é simples:

serviço : ip/range

Podendo ser usado o coringa ALL tanto como substiuição para o nome do serviço quanto para o ip dos clientes. Por exemplo:

# cat /etc/hosts.allow

# Permite acesso ao FTP para clients locais
ftp: LOCAL

ou

# cat /etc/hosts.allow

# Permite acesso a todos os clientes a todos os servidores
ALL: ALL

Outra sintaxe que pode ser utilizada é:

# cat /etc/hosts.allow

# permite acesso a todos

# permite acesso a todos os usuários locais a todos os serviços
ALL : localhost
# permite acesso ao telnet vindos do dominio empresa.com ou do IP especificado
telnetd : .empresa.com, 192.168.17.24
# permite acesso vindo do subdomínio e dos ranges de IP especificados
ftpd : gerents.empresa.com, 192.168.39., 10.162.23.0/255.255.255.0

Procurando na internet, você pode encontrar o mesmo arquivo anterior escrito da seguinte maneira:

ALL : localhost : allow
telnetd : .empresa.com, 192.168.17.24 : allow
ftpd : gerentes.empresa.com, 192.168.39., 10.162.23.0/255.255.255.0 : allow
ALL : ALL : deny

Embora tal configuração já seja ultrapassada. Tais utilizações podem ser utilizadas para configuração do arquivo /etc/hosts.deny. A regra geral é: se existir allow apenas os clientes especificados nele poderão utilizar os serviços mencionados. Caso não exista allow mas exista deny, apenas os clientes fora dele poderão acessar os serviços.

Após você configurar os arquivos /etc/hosts.allow e hosts.deny é recomendável que você execute o programa tcpdchk para verificar se as configurações escritas são válidas. Outra boa opção também é utilizar o programa tcpdmatch para simular o acesso de clientes remotos aos serviços da máquina.