Limitando usuários com o PAM PDF Imprimir E-mail
Escrito por cristhian   
Seg, 27 de Dezembro de 2010 03:05

2. Limitação dos usuários

Sabendo que cada módulo pode ser responsável por algum tipo de recurso para os logins no PAM, vamos trabalhar alguns módulos que produzem limitações aos usuários no sistema. Estes módulos são: pam_limits, para limites dentro de uma sessão; e pam_time para restrição de logins em certos períodos.

2.1. Configuração Inicial

Para que tanto o pam_limits, quanto o pam_time funcionem, eles precisam estar habilitados na sua distribuição e configuração do PAM. Geralmente o pam_limits já vem por padrão na grande maioria das distribuições, mas o pam_time nunca vem habilitado por padrão.

A configuração do PAM não é tão simples assim como a gente gostaria que fosse, então vou explicar aqui apenas o básico para aprendermos à habilitar as funcionalidades que queremos.

Todas as configurações do PAM estão contidas no diretório /etc/pam.d. Dentro deste diretório, cada arquivo representa o que um programa vai utilizar de mecanismo PAM. Por exemplo, o arquivo /etc/pam.d/su vai ser utilizado pelo programa su para saber como ele vai autenticar os usuários.

Para facilitar um pouco a vida dos usuários, as distribuições unificam as configurações comuns em apenas alguns arquivos. Em sistemas baseados em Red Hat EL / Fedora, este arquivo será o /etc/pam.d/system-auth, enquanto que em sistemas baseados em Debian, são 4 arquivos: common-account, common-auth, common-password e common-session, todos dentro do diretório /etc/pam.d.

Vamos aos exemplos, em um sistema Fedora, no system-auth vai ter a linha:

session     required      /lib/security/pam_limits.so

O que significa que o pam_limits já está sendo carregado cada vez que o usuário inicie uma sessão. Para habilitar o pam_time, precisamos adicionar uma linha:

account     requisite     /lib/security/pam_time.so
account     required      /lib/security/pam_unix.so

A segunda linha (pam_unix) já existia. A primeira linha habilita o pam_time, ou em outras palavras, torna a execução do pam_time obrigatória na hora que o usuário for acessar a conta (antes de se logar).

Agora em um sistema Debian, pode-se colocar as duas linhas (do pam_limits e do pam_time) nos arquivos common-session e common-account respectivamente, que isso irá se aplicar para tudo que utiliza o PAM, assim como fizemos com o system-auth no Fedora. Ou você também pode utilizar o arquivo /etc/pam.d/login, que é responsável pelos logins locais no sistema.

Dentro do /etc/pam.d/login no Debian você já poderá encontrar várias linhas pré-definidas e comentadas. Se procurar pelo pam_limits, vai ver que a linha:

session    required   pam_limits.so

Está lá. Se procurar pelo pam_time, vai ver que a linha está comentada:

# account    requisite  pam_time.so

Então para habilitar basta descomentar e salvar o arquivo.

Com estas duas linhas configuradas no PAM, os limites para os usuários já podem ser configurados!

3. Limitando por Hora

Habilitado o pam_time, podemos configurá-lo através do arquivo /etc/security/time.conf. Dentro deste arquivo, cada linha vai ser uma restrição para os usuários. Como o próprio arquivo diz, a sintaxe das linhas é:

serviços;ttys;usuários;horas

Sendo que:

  • serviços significa o nome do serviço PAM para se restringido. Exemplos: samba, su, login. Use * para restringir para tudo.
  • ttys significa em quais terminais a restrição será feita. Exemplo: terminais locais seriam tty*. Use * para restringir para tudo.
  • usuários significa uma lista dos usuários para a restrição. Múltiplos usuários podem ser feitos com: “fulano|cicrano|beltrano” que significa fulano OU cicrano OU beltrano. O * também pode ser utilizado para restringir a todos.
  • horas é a faixa de horas e datas para a restrição. Melhor entendendido nos exemplos.

Para aprender melhor, vamos aos exemplos:

sshd:*:teste:Mo2100-2200

Na linha acima, o usuário teste poderá acessar o sshd das 21:00 até as 22:00 na Segunda-Feira. A linha:

sshd:*:teste:!Mo2100-2200

O usuário teste poderá acessar o sshd toda hora, exceto Segunda-Feira das 21:00 até as 22:00. A exclamação inverteu totalmente o caso.

No campo da faixa de tempo, podemos usar as abreviações:

  • Su: Domingo
  • Mo: Segunda
  • Tu: Terça
  • We: Quarta
  • Th: Quinta
  • Fr: Sexta
  • Sa: Sábado
  • Wk: Finais de semana (Sábado e Domingo)
  • Wd: Dias da semana (Segunda à Sexta)
  • Al: Todos os dias

E como horários, basta usar faixas de horas como 2100-2200 (21 horas até 22 horas), ou 1732-1915 (17:32 até as 19:15).

Mais exemplos:

sshd:*:hugo:Wd0800-1800

O usuário hugo só poderá acessar o sshd em horário comercial, ou seja, de Segunda à Sexta das 08:00 da manhã até as 18:00.

*:*:silvia|lisa:!Al1200-1800

As usuárias silvia e lisa não vão poder acessar nada durante todos os dias, das 12:00 às 18:00.

samba:*:guest:We1200-1201

O usuário guest só vai poder acessar o serviço PAM samba na quarta-feira das 12:00 as 12:01! Boa sorte pra ele!

Lembre-se, a partir do momento que você salva o arquivo de configuração time.conf as configurações já estarão funcionando.

4. Limitando recursos

Agora é a vez do pam_limits. 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 é chegado, 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 dalí. O soft então serve apenas para um “aviso” amigável, então na dúvida o hard é quem manda!

O recurso e o valor do limite são os importantes aqui. Alguns dos recursos:

  • core – Limite do tamanho do arquivo coredump (em KB). É a mesma configuração que obtemos com o comando “ulimit -c” da 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 compatilhada (em KB). Também: ulimit -m.
  • 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.

Agora vamos entender melhor com os exemplos:

teste      hard     fsize    100

O usuário teste não pode criar arquivos maiores que 100KB (fsize 100). Testando:

$ dd if=/dev/zero of=arquivo bs=1024 count=100
100+0 records in
100+0 records out
102400 bytes (102 kB) copied, 0.0011873 s, 86.2 MB/s

Ele deixou criar um arquivo de 100KB. Agora vou criar um de 105!

$ dd if=/dev/zero of=arquivo bs=1024 count=105
File size limit exceeded

Outro exemplo:

teste     hard    nproc  5

O usuário teste só poderá executar 5 processos. Tenha em mente que os processos do bash por exemplo também contam. Então colocar 1 não é uma boa idéia assim se seu usuário tiver executando uma shell interativa.

@teste     hard     maxlogins     1

Todo mundo do grupo teste só pode se logar uma vez no sistema.

dumau           hard    memlock          20000

O usuário dumau só pode usar 20MB de memória no sistema.

@users    hard    priority    19

Todos os usuários do grupo users vão executar seus processos automaticamente com prioridade mais baixa do sistema.

4.1. Boas práticas de limites de recursos

Para ter um sistema um pouco mais seguro se você tiver muitos acessos externos, imponha limites tais como:

  • memlock: Coloque um número legal para os programas de shell funcionarem bem, mas não um número tão alto, assim seus usuários não vão conseguir acabar com toda a memória do seu sistema.
  • nproc: Coloque um número mediano, para que seus usuários possam executar todas suas ferramentas shell mas não consigam, por exemplo, fazer um fork bomb e explodir sua máquina abrindo processos infinitamente.
  • fsize: Coloque um número consideravelmente inferior ao tamanho do seu HD/sistema de arquivos.

5. Conclusão

Com o PAM podemos ter um controle maior sobre o que os usuários fazem dentro de um sistema. Em servidores, por exemplo, isso é mais do que essencial!

Se aparecer qualquer outro exemplo, não deixe de me contactar para que eu adicione no artigo.

 

Comentários  

 
0 #1 Robert Luiz Vilvert 16-03-2012 18:57
Muito bom artigo, já usava o pam, mas, não conhecia esses recursos.
Parabéns
Citar
 

Adicionar comentário


Código de segurança
Atualizar