You are on page 1of 20

Linux Network

Linux Network

 Objetivos
 Entender a configuração do “PAM”;
 Conhecer e aplicar seus “módulos” e “controles”;
 Aplicar checagem de “logs” e conhecer parâmetros de alguns arquivos;
 Impedir “login” de super usuário via console.
Linux Network

 Introdução teórica
A cada dia, mais e mais mecanismos de autenticação diferentes surgem no mercado. Imagine que
para cada método de autenticação, fosse necessário rescrever aplicações como “FTP”, “Apache”,
“SSH” e o sistema de “login” via console e gráfico do Gnu/Linux?
Foi pensando neste tipo de esforço que foi criado o mecanismo de autenticação PAM - Pluggable
Authentication Modules, que oferece uma camada de abstração para autenticação em sistemas “nix”.
Assim, se quisermos adicionar um novo modelo de autenticação via leitor de digitais, por exemplo,
basta apenas instalar o módulo do “PAM” que ofereça essa funcionalidade e configurar as aplicações
para trabalhar com este módulo, sem a necessidade de recriar ou reimplementar funções no aplicativo.
Além disso, com o “PAM” é possível controlar horários e terminais disponíveis para “logins”, quais serão os
usuários que podem efetuar um “su” no sistema operacional, autenticar em bases de dados diferentes,
além de diversos outros módulos que estão disponíveis no seguinte endereço:
http://www.kernel.org/pub/linux/libs/pam
Linux Network

 Módulos
O PAM trabalha com módulos e controles, e cada tipo de módulo provê uma funcionalidade diferente
dentro do sistema. Vamos comentar primeiro os seguintes módulos:
account: Verifica se a conta é valida no sistema, se a senha do usuário expirou e se o usuário realmente
tem direitos de acessar aquele serviço.
authentication: Verifica questões de autenticação, seja por senhas ou impressões digitais (quando falamos
de biometria). É o módulo “authentication” que oferece a flexibilidade do PAM, já que, para cada método
de autenticação criado, existe uma biblioteca que será adicionada à este módulo.
password: Este módulo é responsável por cuidar dos aspectos relacionados a tarefas envolvendo senhas,
como atualização e solicitação de nova senha de acesso no caso da troca da mesma.
session: Responsável por tarefas pós autenticação, como montar um compartilhamento de arquivos
remotos que contém o diretório “/home” do usuário em questão, por exemplo.
Linux Network

 Controles
Além dos módulos, existem também os controles, os quais comentaremos a seguir:
required: Checa a existência do módulo solicitado. Caso esse módulo falhe, somente depois de verificar
se todos os módulos do mesmo tipo estão disponíveis é que o usuário será avisado.
requisite: Checa a existência do módulo solicitado e avisa o usuário imediatamente caso este módulo
falhe.
sufficient: Somente a verificação do módulo é suficiente para a autenticação, desde que nenhum
módulo marcado como required falhe.
optional: O sucesso
Linux Network

Como descobrir se sua aplicação tem suporte no PAM?


R: Basta utilizar o comando “ldd
Veja as linhas:
libpam.so.0 => /lib/libpam.so.0 (0xb7f53000)
# ldd /bin/login
libpam_misc.so.0 => /lib/libpam_misc.so.0 (0xb7f4f000)
linux-gate.so.1 => (0xb7f8b000)
Portanto o “login” utiliza bibliotecas do “PAM”.
libpam.so.0 => /lib/libpam.so.0 (0xb7f53000)
libpam_misc.so.0 => /lib/libpam_misc.so.0
(0xb7f4f000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6
(0xb7df0000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2
(0xb7dec000)
/lib/ld-linux.so.2 (0xb7f71000)
Linux Network

Qual seria outra maneira? Consultando o diretório “/etc/pam.d”:


# ls -l /etc/pam.d

Vamos olhar dentro do diretório do “PAM” procurando por arquivos de configuração para os programas
instalados:
# ls /etc/pam.d
Para entendermos como o “PAM” funciona, vamos ativar um módulo simples que serve para bloquear usuários
comuns. Edite o arquivo “/etc/pam.d/login” e visualize o módulo “pam_nologin.so”:
# vim /etc/pam.d/login
auth requisite pam_nologin.so
Para esse “plugin” funcionar ele necessita que o arquivo “nologin” esteja criado dentro do diretório /etc. Crie o
arquivo nologin dentro do diretório /etc:
# touch /etc/nologin
Com isso tente logar com um usuário comum em outro terminal.
Linux Network

 Como eu bloquearia o login do root em terminais de modo texto sem o uso do PAM? Veja abaixo:
# vi /etc/securetty
Tty1
.
.
# tty2
# tty3
# tty4
# tty12
Basta apenas comentar a linhas do arquivo. Deixe pelo menos um terminal permitindo o root. Agora, tente logar-se com
o usuário root em um terminal, como, por exemplo, tty2, tty3 etc.
Linux Network

Uma maneira prática de usar o “PAM” é fazermos com que o usuário root não tenha acesso direto
ao login, forçando a logar com usuário comum e depois executar “su” para virar root.
Para isso acontecer, editamos o arquivo e descomentamos a regra abaixo:
# vim /etc/pam.d/login
account requisite pam_time.so

Edite o arquivo “/etc/security/time.conf” e acrescente na última linha:


# vim /etc/security/time.conf
login;*;root;!Al0000-2359
Linux Network

 Os campos acima são:


Th - Quinta-feira
 login - Serviço que irá ser controlado
Fr - Sexta-feira
 * - Terminal Sa - Sábado
 root - Usuário Su - Domingo
 Al0000-2359 - Dias e horários de filtragem. Wk - Somente sábado e domingo (fim de
semana)
 O dia da semana é especificado em duas
letras, em inglês: Wd - Segunda a sexta-feira
 Mo - Segunda-feira Al - Todos os dias
O sinal "!" especifica uma exceção.
 Tu – Terça-feira
A faixa de horas é especificada após o dia
 We - Quarta-feira no formato HHMM-HHMM.
Linux Network

Efetue login com o usuário root em outro terminal e veja que não será possível efetuar o login.
Com o PAM, podemos limitar quais usuários poderão ter acesso a utilizar o comando “su”. Para isso, crie
um grupo chamado “admins” para os usuários que poderão ter acesso a fazer o “su”.
Adicione o grupo onde os usuários que poderão executar “su”:
# groupadd admins

Agora vamos adicionar o usuário aluno ao grupo admins:


# gpasswd -a aluno admins

Crie uma política que não possibilite o uso de “su”, exceto pelos usuários do grupo “admins”:
# vim /etc/pam.d/su
auth required pam_wheel.so group=admins
Linux Network

Para fazer o teste, logue-se como o usuário que pertence ao grupo “admins” e tente virar root usando o “su”.
Em seguida tente com um usuário que não pertence ao grupo “admins”:
$ su -
Edite o arquivo “/etc/login.defs” e descomente a seguinte linha:
SULOG_FILE /var/log/sulog
Configure para ver o conteúdo do arquivo de log em tempo real no terminal 12:
# tail -f /var/log/sulog > /dev/tty12 &
Agora, utilize o comando “su” para alternar entre um usuário e outro:
# su - aluno
Veja o conteúdo do arquivo de log no terminal 12:
CTRL+ALT+F12
Linux Network

Insira um novo usuário chamado “caio” para nossos testes:


adduser caio
Como permitir acesso a grupos extras como, por exemplo, “audio”, “floppy”, “cdrom”, etc? Veja:
login;tty*;caio;Al0800-1900;floppy
Essa sintaxe quer dizer que o usuário caio só pode ter acesso ao grupo “floppy” se efetuar o login
entre 08:00 da manha e 19:00 da noite.
Outro exemplo:
login;tty*;*;SaSu0000-2400;audio games

Essa sintaxe quer dizer que todos os usuários podem ter acesso ao grupo “games” e “audio” aos
sábados e domingos.
Linux Network

Como limitar quais usuários podem logar? Edite o arquivo “/etc/pam.d/login” e ative o módulo
“pam_listfile.so” da seguinte maneira:
# vi /etc/pam.d/login
auth required pam_listfile.so item=user sense=allow file=/etc/usuarios onerr=fail

Agora crie o arquivo “/etc/usuarios” e coloque os nomes dos usuários que podem fazer login:
# vi /etc/usuarios
# Usuários que podem fazer login
aluno
caio
Linux Network

Faça um teste, veja se o usuário “caio” pode logar e depois faça outro teste com um usuário
comum.
Podemos utilizar algum módulo do “PAM” para limitar horários de acesso ao “SSH”? Como posso
fazer isso?
R: Sim. Podemos utilizar o módulo “pam_time.so” para limitar horários de acesso ao “SSH”.

Primeiro edite o arquivo “/etc/pam.d/sshd” e adicione o módulo:


# vi /etc/pam.d/sshd
account required pam_time.so
Linux Network

 Possibilite acesso via “ssh” somente no horário das 8:00 às 18:00:


# vi /etc/security/time.conf
sshd;*;aluno;Al0800-1800
Vamos falar agora sobre o “pam_limits”! Esse é um excelente recurso para limitar praticamente todos os recursos
da máquina a cada usuário. Pode-se inclusive determinar o tempo de consumo de CPU e memória RAM. Confira a
seguir.
O arquivo de configuração do “pam_limits” é o “/etc/security/limits.conf”. Dentro dele, as linhas serão configuradas
da seguinte forma:
<usuario/grupo> <tipo_de_limite> <recurso> <valor_do_limite>
Em usuário/grupo, podemos colocar um * para especificar todos os usuários, colocar um nome de usuário
qualquer ou um nome de grupo, começando com “@”. No tipo de limite, existem dois tipos possíveis: “soft” e “hard”.
Quando o limite do tipo “soft” é alcançado, o sistema avisa que chegou no limite mas não restringe nada. Se o
limite for do tipo “hard”, o sistema simplesmente restringe o recurso e não deixa passar. O “soft” então serve apenas
para um “aviso” amigável, então na dúvida o “hard” é quem manda!
Linux Network

 core - Limite do tamanho do arquivo coredump (em KB). É a mesma configuração que obtemos
com o comando “ulimit -c” do shell.
 data - Tamanho máximo de segmento de dados que um programa pode usar. Também como:
“ulimit -d” no bash.
 fsize - Tamanho máximo de algum arquivo que o usuário possa criar. Também: “ulimit -f”.
memlock - Tamanho de memória alocada que os programas podem usar (em KB). Também:
“ulimit -l”.
 nofiles - Número máximo de arquivos abertos ao mesmo tempo.
Também: “ulimit -n”.
 rss - Tamanho máximo de memória compartilhada (em KB).
Também: “ulimit -m”.
Linux Network

 stack - Valor máximo de um processo executado (em KB).


 Também: “ulimit -s”.
 cpu - Tempo máximo em minutos de uso da CPU. Também: “ulimit -t”.
nproc - Número máximo de processos executados ao mesmo tempo. “Também: ulimit -u”.
 as - Limite em KB de espaço de endereçamento.
 maxlogins - Número máximo de logins para esse usuário
 maxsyslogins - Número máximo de logins no sistema
priority - Em qual prioridade padrão os processos desse usuário devem rodar.
 locks - Número máximo de arquivos de “locks” que podem ser gerados pelo usuário. Também: “ulimit -x”.
nice - Número máximo de prioridade que o usuário pode setar, entre -20 (máxima prioridade) e 19 (mínima
prioridade). Também: “ulimit -e”.
Fique atento, a prova do LPI pode cobrar as opções que encontramos dentro do arquivo “limits.conf”. Conhecer
todas estas opções, e seu pleno entendimento são tarefas essenciais para ser um Administrador de Sistemas
GNU/Linux.
Linux Network

 Como limitar que um usuário possa utilizar somente dois terminais consecutivos? Vá até o diretório “/etc/security”, edite o
arquivo “limits.conf” e insira a seguinte linha:
aluno hard maxlogins 2
Dessa forma, limita-se o usuário aluno para utilizar somente dois terminais consecutivos.
 Limitando o tamanho máximo de um arquivo criado pelo usuário aluno:
aluno hard fsize 1000
 Logado com o usuário aluno, perceba que ele não pode criar arquivos maiores que 1000KB (fsize 1000).
$ dd if=/dev/zero of=arquivo bs=1024 count=1000
1000+0 records in
1000+0 records out
1024000 bytes (1,0 MB) copied, 0.00291367 s, 351 MB/s
 Ele deixou criar um arquivo de 1000KB. Agora vamos criar um de 1001!
$ dd if=/dev/zero of=arquivo bs=1024 count=1001
File size limit exceeded
Obrigado a todos

You might also like