Professional Documents
Culture Documents
RAID
RAID
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
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
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
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
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”.
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
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