[ previous ] [ Contents ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] [ next ]

Guia Foca GNU/Linux
Chapter 18 - Restrições de recursos/serviços


Este capítulo documenta diversos métodos de fazer restrições de contas, limitação de acesso interno/externo, de recursos por usuários/grupos, login, tempo máximo ocioso, e outros modos para limitar o uso de recursos do sistema. Também são descritos métodos para aumentar a segurança do acesso físico a seu servidor e maneiras de restringir o uso de serviços disponíveis no sistema.

Se você deseja restringir o acesso de máquinas na rede ou portas específicas em sua máquina, veja também .


18.1 Limitando recursos no bash


18.1.1 Uso do comando readonly para exportar variáveis

Variáveis exportadas na forma comum podem ser modificadas a qualquer momento pelo usuário, e isso pode trazer problemas de acordo com o tipo de sistema que administramos. A definição da variável como somente leitura (readonly) evita a maioria destes problemas:

     readonly TESTE="123"

A variável TESTE não poderá ser modificada ou excluída. Com isto o administrador pode "bloquear" a modificação de variáveis que controlam o funcionamento de determinados recursos do interpretador de comandos (alguns deles serão vistos ainda nesta seção).

OBS1: Algumas variáveis de controle de ambientes ambiente do interpretador de comandos já são iniciadas com valores somente leitura (como as variáveis EUID e PPID)

OBS2: Variáveis exportadas como somente leitura em shell scripts são mantidas até a finalização do script e depois liberadas.


18.1.2 Restrições nos diretórios de usuários e root

O controle de acesso a diretórios de usuários é importante quando desejamos que outras pessoas não tenham acesso ao diretório de outros usuários, violando a privacidade do mesmo e obtendo acesso a partes indesejáveis, principalmente do usuário root. É recomendado restringir o acesso somente ao dono e grupo do usuário, bloqueando o acesso a outros tipos de usuários:

     chmod 2750 /root
     chmod 2750 /home/usuario

O exemplo acima permitirá o acesso do diretório /root e /home/usuario somente ao usuário e grupo que pertencem. Este processo pode ser facilitado na criação dos diretórios de usuários em /home especificando a variável: DIR_MODE=0750 no arquivo /etc/adduser.conf.

OBS: Algumas distribuições de Linux garantem o acesso livre a diretórios de usuários por padrão pois alguns daemons que requerem acesso a diretório de usuários rodam sob outros usuários ao invés do root. Um bom exemplo é a utilização do recurso "UserDir" do Apache para servir requisições como http://servidor.org/~usuario.

A restrição de diretório home neste caso bloqueará o acesso do servidor web Apache ao diretório /home/usuario/public_html. Mesmo assim, uma alternativa para garantir a utilização da restrição é incluir o usuário do servidor web Apache (www-data) no grupo "usuario" (que possui acesso ao diretório /home/usuario):

     adduser www-data usuario

Isto garantirá que o servidor Apache continue servindo as requisições dentro do diretório /home/usuario, com acesso garantido via grupo. O mesmo principio pode ser aplicado em outros programas, apenas leve em consideração que se um cracker tomar conta do processo que tem acesso ao seu diretório home restrito, ele certamente também terá acesso.


18.1.3 Restrições básicas do shell bash com bash -r/--restricted, rbash

Quando o bash é iniciado com o parâmetro -r, --restricted ou como rbash, o shell restringe o uso dos seguintes recursos em sua seção:

Estas restrições são ativadas após a leitura dos arquivos de inicialização do interpretador de comandos. O shell restrito desliga as restrições quando um shell script é executado.


18.1.4 Finalizando consoles inativos

A variável TMOUT determina o tempo de inatividade de um shell para que ele seja terminado.

     export TMOUT=600

Terminará o bash caso nenhum comando seja executado no período de 600 segundos (5 minutos). Veja Uso do comando readonly para exportar variáveis, Section 18.1.1 como complemento.


18.1.5 Desabilitando o registro de comandos digitados

Todos os comandos que digitamos em uma seção do shell são registrados no arquivo ~/.bash_history, as seguintes variáveis fazem seu controle:

Se você possui muitos usuários em seu sistema, é recomendado ajustar estas variáveis como somente leitura para que o usuário não desative o logging por qualquer motivo (veja Uso do comando readonly para exportar variáveis, Section 18.1.1).


18.1.6 Desabilitando serviços de shell para usuários

Existem casos onde o usuário precisa estar cadastrado no sistema mas não precisa ter acesso a uma conta de login válida (como um sistema servidor de e-mail ou outros serviços). Neste caso a desabilitação dos serviços de shell aumentará um pouco a segurança do sistema, mesmo conseguindo acesso a conta/senha estará impedido de entrar no sistema (pelo menos terá um pouco mais dificuldade para conseguir isso).

Um programa que é muito usado para desabilitar o shell exibindo uma mensagem ao usuário que fez a tentativa é o falselogin. Ele deve ser colocado como o "shell padrão" no arquivo /etc/passwd e exibirá a mensagem contida no arquivo /etc/falselogin.conf quando o login para aquele usuário for tentado. Esta operação pode ser facilitada usando a variável DSHELL=/usr/bin/falselogin no arquivo /etc/adduser.conf.

Uma forma alternativa de desativar o serviço de login de TODOS os usuários (exceto o root e os já logados no sistema) é criar um arquivo chamado /etc/nologin e colocando uma mensagem dentro dele, que será exibida quando tentarem efetuar o login no sistema.

OBS: Tome cuidado ao usar esta alternativa, este método deve ser usado somente em caso de EMERGÊNCIA, as distribuições Linux usam este método para bloquear o login de outros usuários durante o processo de inicialização, removendo assim que o processo é terminado. Esteja consciente disso.

Em alguns casos, o uso do PAM pra desabilitar os serviços de login pode ser mais adequado (veja Restringindo/Bloqueando o login, Section 18.2.3).


18.2 Limitação de recursos usando PAM

Plugglable Autentication Modules (Módulos de autenticação plugáveis) são um conjunto de bibliotecas usadas para fazer autenticação, gerenciamento de contas, controle de recursos dos usuários no sistema, em adição ao tradicional sistema de acesso baseado em usuários/grupos. Este recurso permite modificar a forma que um aplicativo autentica e define recursos para o usuário sem necessidade de recompilar o aplicativo principal. Os recursos que desejamos controlar restrições via PAM são especificados individualmente por serviços nos arquivos correspondentes em /etc/pam.d e então os arquivos correspondentes em /etc/security são usados para controlar tais restrições.

Nesta seção assumirei explicações dirigidas aos recursos controlados pelos arquivos em /etc/security A maioria das explicações são baseadas em testes e nos próprios exemplos dos arquivos de configuração do PAM.


18.2.1 Descobrindo se um determinado programa tem suporte a PAM

Um método simples de se determinar se um programa binário possui suporte a PAM é executando o comando:

     ldd [programa]

Por exemplo:

     ldd /bin/login
     
     libcrypt.so.1 => /lib/libcrypt.so.1 (0x4001c000)
     libpam.so.0 => /lib/libpam.so.0 (0x40049000)
     libpam_misc.so.0 => /lib/libpam_misc.so.0 (0x40051000)
     libdl.so.2 => /lib/libdl.so.2 (0x40054000)
     libc.so.6 => /lib/libc.so.6 (0x40058000)
     /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Caso a biblioteca libpam for listada, o programa tem suporte a PAM compilado. Programas que não possuem suporte a PAM deverão ter o código fonte modificado inserindo as funções para tratamento dos módulos de autenticação.


18.2.2 Definindo um policiamento padrão restritivo

O Policiamento padrão do PAM é especificado em /etc/pam.d/other e define o que acontecerá caso nenhum dos arquivos de controle de serviço em /etc/pam.d confiram com o serviço em questão. Normalmente o módulo pam_unix.so é usado para fazer o policiamento padrão, para deixar o sistema mais seguro, utilize a seguinte configuração no arquivo /etc/pam.d/other:

     auth     required       /usr/lib/security/pam_warn.so
     auth     required       /usr/lib/security/pam_deny.so
     account  required       /usr/lib/security/pam_deny.so
     password required       /usr/lib/security/pam_warn.so
     password required       /usr/lib/security/pam_deny.so
     session  required       /usr/lib/security/pam_deny.so

O módulo pam_deny.so é responsável por fazer o bloqueio, e o pam_warn envia avisos ao syslog (facilidade auth nível notice) caso serviços módulos PAM que necessitem do serviço de autenticação sejam bloqueados (isto não é feito automaticamente pelo pam_deny.so).

OBS: Esta configuração poderá causar bloqueio em muitas coisas caso possua módulos de autenticação mau configurados. Esteja certo de utilizar o módulo pam_warn.so (antes do pam_deny.so) nas diretivas restritivas para entender qual é o problema através da análise dos arquivos de logs.

Mais detalhes sobre a configuração de módulos de autenticação poderão ser encontrados no endereço ftp://ftp.us.kernel.org/pub/linux/libs/pam/Linux-PAM-html/pam.html e http://www.kernel.org/pub/linux/libs/pam/pre/doc/rfc86.0.txt.gz.


18.2.3 Restringindo/Bloqueando o login

Isto é controlado pelo arquivo /etc/security/access.conf. O formato deste arquivo consistem em três campos separados por ":":

OBS1: - A configuração padrão do access.conf é garantir o acesso a todos os usuários, através de qualquer lugar (permissiva).

OBS2:: Mesmo se existir uma regra autorizando o acesso ao usuário, as restantes serão verificadas em busca de uma que bloqueie o acesso do usuário. Se nenhuma regra conferir, o usuário terá acesso garantido.

OBS3: - O nome de grupo somente é checado quando nenhum nome de usuário confere com nenhum usuário logado no sistema.

OBS4: - Grupos/usuários NIS podem ser especificados precedendo o nome do usuário ou grupo por uma "@".

Abaixo uma configuração restrita de /etc/security/access.conf:

     #
     # Desabilita o login de todos os usuários EXCETO o root no terminal tty1
     -:ALL EXCEPT root:tty1
     
     # Permite o login no console de todos os usuários especificados.
     +:gleydson root:console
     
     # Conexões vindas da rede *.debian.org e *.debian.org.br de usuários pertencendo 
     # ao grupo operadores são consideradas seguras (exceto para o usuário root).
     +:operadores EXCEPT root: .debian.org .debian.org.br
     
     # Qualquer outra tentativa de acesso não definida acima é bloqueada imediatamente.
     -: ALL: ALL

18.2.4 Restrições de serviços PAM baseados em dia/hora

Estas restrições são controladas pelo arquivo /etc/security/time.conf, a sintaxe deste arquivo é quatro campos separados por ";":

Por padrão o acesso é garantido a todos os usuários. Abaixo um exemplo de restrições usando o /etc/security/time.conf:

     # Bloqueia o login do usuário user1 ou user2 em qualquer tty, a restrição 
     # durante todos os dias de 00:00 as 06:30
     login;tty*;user1|user2;!Al0000-0630
     
     # Bloqueia o acesso do usuário root ao serviço login nos terminais tty* 
     # (e não nos terminais ttyp*) nos finais de semana.
     login;tty* & !ttyp*;root;!Wd0000-2400
     
     # O usuário 1 não poderá efetuar o login as terças feiras de 00:00 as 06:00
     login;!tty*;user1;Tu0000-0600

OBS1: Mesmo se existir uma regra autorizando o acesso ao usuário, as restantes serão verificadas em busca de uma que bloqueie o acesso do usuário. Se nenhuma regra conferir, o usuário terá acesso garantido.

OBS2: Quando as restrições de tempo são ativadas no /etc/security/time.conf, o daemon logoutd poderá ser ativado manualmente (através de /etc/init.d/logoutd) para monitora as restrições neste arquivo, forçando o logout de usuário de acordo com as configurações do /etc/security/time.conf. Isto ocorrerá automaticamente na próxima vez que iniciar o sistema (a distribuição detecta a presença de restrições de tempo no arquivo /etc/security/time.conf para decidir se deve ou não carregar este daemon).

Quando não está em execução, os limites de tempo são verificados somente no login do usuário, ele poderá ultrapassar este tempo sem ser desconectado do sistema.


18.2.5 Permitindo acesso a grupos extras

Este recurso é controlado pelo arquivo /etc/security/group.conf. Este arquivo é composto por 5 campos separados por ";" (os 4 primeiros são os mesmos explicados em Restrições de serviços PAM baseados em dia/hora, Section 18.2.4. O 5o campo contém um ou mais grupos (separados por espaços ou vírgulas) que serão adicionados aos grupos do usuário quando as condições dos campos anteriores conferirem.

OBS: Se o usuário escrever um programa que chama um interpretador de comandos e der a permissão SGID (chmod g+s programa), ele terá acesso àquele grupo na hora que quiser. Restrinja o uso de grupos somente a usuários de confiança ou crie grupos específicos para evitar problemas.

Exemplo de configuração do arquivo /etc/security/group.conf:

     # Permite que o usuário gleydson tenha acesso ao grupo floppy efetuando o login
     # entre 08:00 da manha e 19:00 da noite
     login;tty*;gleydson;Al0800-1900;floppy
     
     # Todos os usuários podem ter acesso ao grupo games e sound aos sábados e domingos
     login;tty*;*;SaSu0000-2400;sound games
     
     # Todos os usuários podem ter acesso ao grupo games e sound todos os dias 
     # de 18:00 as 05:00 da manhã (fora do horário de expediente ;-)
     login;tty*;*;Al1800-0500;sound,games
     
     # Backups são permitidos fora do horário de expediente (para não sobrecarregar 
     # a CPU e evitar o uso excessivo de disco). 
     login;tty*;gleydson;Al1830-2400;backup

OBS:: Mesmo que uma regra confira com o usuário, as outras também serão verificadas para garantir acesso grupos extras.


18.2.6 Limitação de recursos do shell

Estas restrições são especificadas no arquivo /etc/security/limits.conf. Seu formato consiste em 4 campos separados por ou ou mais espaços:

Os limites aplicados ao usuário podem ser visualizados através do comando ulimit -S -a (para listar limites suaves - soft) e ulimit -H -a (para listar limites rígidos - hard). Caso o parâmetro -S ou -H sejam omitidos, os limites listados serão os suaves (soft). Um exemplo de /etc/security/limits.conf (retirado da distribuição Debian GNU/Linux:

     *               soft    core            0
     *               hard    rss             10000
     @student        hard    nproc           20
     @faculty        soft    nproc           20
     @faculty        hard    nproc           50
     ftp             hard    nproc           0
     @student        -       maxlogins       4
     gleydson        -       maxlogins       2

OBS: Estas permissões passam a ter efeito no momento que o usuário se conecta ao sistema, e não quando elas são modificadas no arquivo /etc/security/limits.conf.


18.3 Restrições de acesso a programas/diretórios/arquivos usando grupos

Usuários podem ter o acesso liberado a diretórios/arquivos execução de programas de acordo com o grupo que pertencem. Este é um recurso valioso na administração de sistemas Unix que se bem usado, aumenta as restrições de acesso e segurança no acesso/utilização de programas em um ambiente de trabalho. Usuários de sistema tendem a usar o usuário root para fazer tarefas como conexão com internet, utilização da placa de som, modem, etc. e as vezes nem sabem que isso pode ser feito através do mesmo usuário adicionando este a um grupo específico.

Esta tarefa pode ser feita com o comando adduser usuário grupo ou editando manualmente os arquivos /etc/group e /etc/gshadow. Podemos ter as seguintes situações facilitadas com o uso de grupos:

A maioria das distribuições Linux vem com uma boa política de grupos para permitir um controle eficaz de recurso. Se você quer saber quais arquivos em seu sistema pertencem a determinado grupo (útil para saber o que o usuário terá acesso se adiciona-lo àquele grupo) execute o comando:

     find / -group nome_do_grupo

18.4 Dando poderes de root para executar determinados programas

A ferramenta ideal para isto é o sudo. Através dela é possível permitir um usuário comum executar um comando como root e registrar quando isto foi feito. É possível selecionar os usuários/grupos que terão acesso e quais aplicativos que poderão ser usados, estas configurações são feitas no arquivo /etc/sudoers.

Por exemplo, para o usuário "john" usar o comando shutdown para desligar o computador: sudo shutdown -h now.

O sudo é um programa muito completo, tomaria muitos Kilobytes neste guia. Recomendo dar uma lida na página de manual para entender como as variáveis do arquivo de configuração funcionam. Mesmo assim aqui vai um exemplo simples deste arquivo para iniciar rapidamente o uso do sudo:

     # arquivo sudoers.
     #
     # Edite este arquivo com o comando 'visudo' como root 
     # 
     #
     
     # Especificação de máquinas. O primeiro campo (Host_Alias) diz que a variável 
     # LOCALSERVER será um nome/endereço de máquina
     Host_Alias	LOCALSERVER=192.168.0.1
     
     # Especificação de usuários. O primeiro campo (User_Alias) diz que a variável
     # NETMASTERS armazenará nomes de usuários
     User_Alias	NETMASTERS=gleydson, goodboy
     
     # Comandos. O primeiro campo (Cmnd_Alias) diz que a variável 
     # C_REDE contém comandos do sistema. Mais de um parâmetro
     # deve ser separado por vírgulas
     Cmnd_Alias	C_REDE=/sbin/ipchains, /sbin/iptables
     
     # Padrões que se aplicam aos usuários da variável NETMASTERS. O parâmetro
     # mail_always sempre envia um e-mail ao root avisando sobre o uso do 
     # sudo
     Defaults:NETMASTERS	mail_always
     
     # As linha que começam com o nome de usuário ou variável "User_Alias" 
     # definem o acesso aos recursos. O primeiro campo é o usuário, o segundo
     # o endereço de acesso (opcionalmente seguido de um sinal "=" para 
     # especificar opções adicionais) o terceiro o comando ou lista de comandos
     #
     # O usuário root não tem restrições
     root	ALL=(ALL) ALL
     
     # Permite que os usuários especificados na variável NETMASTERS 
     # acessando dos locais em LOCALSERVER utilizem os comandos 
     # em C_REDE (sem fornecer senha). 
     NETMASTERS	LOCALSERVER=NOPASSWD: C_REDE

Edite este arquivo com o comando visudo, ele faz algumas checagens para detectar problemas de configuração.


18.5 Restringindo o comando su

Restrições de acesso através de grupos, bloqueio de acesso, acesso direto sem senha, etc. podem ser aplicados ao sudo via seu arquivo de configuração PAM /etc/pam.d/su. Abaixo um exemplo explicativo deste arquivo:

     # A configuração abaixo requer que o usuário seja membro do 
     # grupo adm para usar o 'su'. 
     # auth       required   pam_wheel.so group=adm
     
     # Membros do grupo acima não precisam fornecer senha, temos confiança neles.
     # auth       sufficient pam_wheel.so trust
     
     # Usuário que pertencem ao grupo "nosu" nunca deverão ter acesso ao 'su'
     # auth       required   pam_wheel.so deny group=nosu
     
     # O root não precisa fornecer senha ao 'su'
     auth       sufficient pam_rootok.so
     
     # Ativa as restrições PAM de /etc/security/limits.conf
     session    required   pam_limits.so
     
     # Isto ativa as restrições PAM de /etc/security/time.conf no 
     # comando 'su'
     account    requisite  pam_time.so
     
     # Módulos padrões de autenticação Unix
     auth       required   pam_unix.so
     account    required   pam_unix.so
     session    required   pam_unix.so

18.6 Restrições baseadas em usuário/IP

O serviço identd permite identificar os usuários que estão realizando conexões TCP, adicionalmente esta característica é usada por programas para fazer restrições para usuários em adição ao endereço de origem/destino. A sintaxe usada nas diretivas de acesso é especificada na forma usuário@endereço. O Servidor ident, Chapter 13 explica a configuração/utilização/vulnerabilidades e recomendações sobre este serviço.

Diversos programas que possuem controle de acesso baseado em IP's/hosts aceitam esta especificação, como o exim, ircd, e o conhecido tcpd.

Segue um exemplo da utilização do identd com o arquivo hosts.allow:

     # Permite o acesso ao serviço de telnet somente ao usuário gleydson conectando
     # a partir da máquina com IP 192.168.1.1
     in.telnetd: gleydson@192.168.1.1
     
     # Permite o acesso ao serviço ftp somente ao usuário gleydson conectando de 
     # qualquer máquina da rede 192.168.1.*
     in.ftpd: gleydson@192.168.1.

Note que a utilização do identd torna a utilização do serviço um pouco mais restrita, somente conhecendo os "logins" de quem tem acesso ao serviço, um cracker conseguirá ter acesso ao mesmo serviço naquele sistema (este é um dos motivos que é recomendado sempre divulgar o mínimo detalhes possíveis sobre o sistema para minimizar riscos de ataques).

Veja mais detalhes sobre o uso do identd em Servidor ident, Chapter 13.


18.7 Desabilitando serviços não usados no Inetd

Desative todos os serviços que não serão utilizados no arquivo /etc/inetd.conf, isto diminui bastante as possibilidades de ataques em seu sistema. Os nomes de serviços são os parâmetros especificados na primeira coluna do arquivo /etc/inetd.conf (por exemplo, talk, ircd, pop3, auth, smtp).

Para desativar serviços neste arquivo, ponha o símbolo "#" no inicio das linhas que deseja comentar e execute um killall -HUP inetd. Alternativamente, o comando update-inetd pode ser usado para facilitar esta tarefa:

     update-inetd --disable finger,talk,time,daytime
     
     update-inetd --disable

Este comando envia automaticamente o sinal de reinicio (HUP) ao inetd. O serviço poderá ser novamente ativado substituindo a opção --disable por --enable ou retirando o trecho "#<off>#" no começo da linha do serviço do /etc/inetd.conf.


18.8 Evitando o uso de hosts.equiv e .rhosts

O arquivo hosts.equiv contém uma lista de usuários autorizados/desautorizados que podem fazer uso dos serviços "r*" sem fornecer uma senha (como rsh, rcp, rexec, etc), veja /etc/hosts.equiv e /etc/shosts.equiv, Section 4.8.3.3. É muito fácil falsificar um nome de usuário para obter acesso aos privilégios de outro usuário usando este recurso.

Os arquivos ~/.rhosts, ~/.shosts tem o funcionamento parecido com o hosts.equiv mas contém somente dois campos, o primeiro especificando o nome do computador (FQDN) e o segundo o nome do usuário que tem permissão de acesso sem fornecer senha. Ele garantirá este acesso ao usuário e máquina remota especificada neste arquivo. Se for definido somente o nome do computador, o nome de usuário deverá ser o mesmo do local para que o acesso sem senha seja garantido. É recomendável restringir o acesso a estes arquivos somente ao usuário/grupo quando for realmente necessário. Um exemplo de ~/.rhosts:

     maquina1.dominio.com.br usuario1
     maquina2.dominio.com.br usuario2

O uso destes dois mecanismos e dos serviços "r*" são desencorajados! (o último por usar transferência de dados não criptografadas, veja Servidor ssh, Chapter 15 para uma alternativa melhor). Utilize estes dois mecanismos somente se deseja facilidade no gerenciamento e se sua rede seja absolutamente confiável e a segurança de dados não seja prioridade pra você...


18.9 Restringindo o uso do shutdown

Por padrão todos que tem acesso ao console do sistema podem efetuar o reinicio do computador pressionando CTRL+ALT+DEL. Estas teclas de combinação são definidas pela linha

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

do arquivo /etc/inittab. A opção -a (access) do shutdown restringe isto, permitindo somente o reinicio do sistema caso um dos usuários cadastrados no arquivo /etc/shutdown.allow estejam logados no console. Caso nenhum usuário autorizado esteja logado, a mensagem shutdown: no authorized users logged in é exibida no console local.

O arquivo /etc/shutdown.allow deve conter um usuário por linha e 32 no máximo.

A mesma linha do /etc/inittab pode ser modificada para a seguinte:

     ca:12345:ctrlaltdel:/sbin/shutdown -a -t5 -r now

OBS: Se a opção -a seja especificada e o arquivo /etc/shutdown.allow não existe, a opção -a é ignorada.


18.10 Restringindo o acesso ao sistema de arquivos /proc

O patch restricted proc fs é um dos melhores para realizar esta tarefa. Restringindo o acesso ao sistema de arquivos /proc evita que o usuário normal tenha acesso aos detalhes sobre processos de outros (com ps aux) ou acesso a detalhes de processos de outros usuários existentes nos subdiretórios numéricos (equivalentes a PID) em /proc. Abaixo algumas características do patch restricted proc fs:

Este patch deve ser baixado de http://noc.res.cmu.edu/proc, existem versões para os kernels da série 2.2 e 2.4, baixe e aplique o patch, na configuração do kernel ative a opção Restricted Proc fs support. Compile e instale seu kernel.

No arquivo /etc/fstab inclua um grupo para a montagem do sistema de arquivos /proc (vamos usar o grupo adm com a GID 4):

     # /etc/fstab: informações estáticas do sistemas de arquivos.
     #
     # <Sist. Arq.>    <Ponto Mont.>  <tipo>  <opções>       <dump> <passo>
       proc            /proc          proc    defaults,gid=4   0       0

Após reiniciar o sistema, execute o comando ls -lad /proc note que o grupo do diretório /proc será modificado para adm. Agora entre como um usuário e execute um ps aux, somente seus processos serão listados. Para autorizar um usuário específico ver todos os processos (ter acesso novamente ao diretório /proc), inclua este no grupo que usou no arquivo /etc/fstab:

     adduser usuario adm

Após efetuar o usuário já estará pertencendo ao grupo adm (confira digitando groups), e poderá ver novamente os processos de todos os usuários com o comando ps aux.

OBS1: Incluir um usuário no grupo adm É PERIGOSO, porque este usuário poderá ter acesso a arquivo/diretórios que pertençam a este grupo, como os arquivos/diretórios em /var/log. Se esta não é sua intenção, crie um grupo independente como restrproc para controlar quem terá acesso ao diretório /proc: addgroup restrproc.

OBS2: Se a opção gid não for especificada para a montagem de /proc no /etc/fstab, o grupo root será usado como padrão. NUNCA adicione usuários ao grupo root, use o método da observação acima para permitir outros usuários ver todos os processos em execução.

OBS3 Caso o servidor identd esteja sendo usado na máquina servidora, será necessário roda-lo com a mesma GID do diretório /proc para que continue funcionando. Se ele é executado como daemon, adicione a opção -g GRUPO no script que inicia o serviço em /etc/init.d e reinicie o daemon. Caso ele seja iniciado via inetd, faça a seguinte modificação no arquivo /etc/inetd.conf (assumindo o uso do oidentd):

     #:INFO: Info services
     auth		stream	tcp	nowait.40	nobody.adm	/usr/sbin/oidentd oidend -q -i -t 40

Veja Servidor ident, Chapter 13 para detalhes sobre este serviço.


18.11 Limitando o uso de espaço em disco (quotas)

O sistema de quotas é usado para limitar o espaço em disco disponível a usuários/grupo. O uso de partições independentes para o diretório /home e outros montados separadamente não é muito eficaz porque muitos usuários serão prejudicados se a partição for totalmente ocupada e alguns possuem requerimentos de uso maior do que outros.

O suporte a Quotas deve estar compilado no kernel (seção FileSystems) e o sistema de arquivos deverá ser do tipo ext2 ou XFS para funcionar.


18.11.1 Instalando o sistema de quotas

Abaixo o passo a passo para a instalação de quotas em seu sistema:

  1. Recompile seu kernel com suporte a quota. Habilite a opção "Quota support" na seção "FileSystems" na configuração de recursos do seu kernel.
  2. Instale o pacote quota no sistema (apt-get install quota).
  3. Habilite a quota para os sistemas de arquivos que deseja restringir no arquivo /etc/fstab:
         /dev/hda1    /boot ext2     defaults                   1  1
         /dev/hda3    /     ext2     defaults,usrquota          1  2
         /dev/hda4    /usr  ext2     defaults,grpquota          1  3
         /dev/hda5    /pub  ext2     defaults,usrquota,grpquota 1  4
    

    O sistema de arquivos /dev/hda1 não terá suporte a quota, /dev/hda3 terá suporte a quotas de usuários (usrquota), /dev/hda4 terá suporte a quotas de grupos (grpquota) e /dev/hda5 terá suporte a ambos. Por padrão é assumido que os arquivos de controle de quota estão localizados no ponto de montagem da partição com os nomes quota.user e quota.group.

  4. Agora será necessário criar os arquivos quota.user e quota.group no ponto de montagem de cada partição ext2 acima que utilizará o recurso de quotas. O arquivo quota.user controla as quotas de usuários e quota.group controla as quotas de grupos.

    Por motivos de segurança, as permissões dos arquivos de controle de quota quota.user e quota.group devem ser leitura/gravação ao usuário root e sem permissões para grupo/outros usuários: chmod 0600 /quota.user /quota.group.

    OBS: Se deseja utilizar o quota versão 1, certifique-se que não existem os arquivos chamados aquota.user e aquota.group no diretório raíz de sua partição. Se eles estiverem disponíveis, os utilitários de quota utilizarão esta versão como padrão, atualmente o kernel 2.4 possui somente suporte a quota versão 1.

    A versão 2 do quota checa corrompimento dos arquivos de dados de quota e trabalha mais rapido em partições grandes. São necessários patches da série "ac" (Alan Cox) para usar a versão 2 do quota.

  5. Entre em modo monousuário init 1, desmonte os sistemas de arquivos que utilizarão a quota e monte-os novamente (isto serve para ativar as opções de quota). Alternativamente, execute umount -a (para desmontar todos os sistemas de arquivos) e mount -a para remontar todos.

    Se você ativou as quotas para o sistema de arquivos / (como em nosso exemplo) será necessário reiniciar o sistema.

  6. O próximo passo é scanear o disco para criar os dados para as partições com suporte a quota (ativadas no /etc/fstab):
          quotacheck -augv
    

    O parâmetro -a diz para checar todas as partições com suporte a quota no arquivo /etc/mtab, -u para checar quotas de usuários, -g para checar grupos e -v para mostrar o progresso da checagem da partição.

    Na primeira execução é mostrado uma mensagem de erro de arquivo quota.user/quota.group corrompido, mas isto é normal porque o arquivo anterior tem tamanho zero. Estes nomes também servem para o quotacheck "auto-detectar" a versão do sistema de quota usada no sistema de arquivos.

    OBS: Certamente será necessário "forçar" a remontagem como somente leitura do sistema de arquivos / com a opção -m para o quotacheck criar as configurações de quota nesta partição.

  7. Agora resta ativar o suporte as quotas de disco em todas as partições (-a) com recurso de quota especificado (no /etc/mtab):
          quotaon -augv
    

    As opções possuem o mesmo significado do comando quotacheck. O utilitário quotaoff serve para desativar quotas de usuários e usa as mesmas opções do quotaon. Estes três utilitários somente podem ser usados pelo usuário root. As opções de quota podem ser especificadas independente para cada sistema de arquivos:

         # Ativa o suporte a quota em /pub (somente grupos de usuários no momento).
         quotaon -gv /pub
         
         # Ativa as quotas de usuários em /pub
         quotaon -uv /pub
         
         # Desativa as quotas de grupos em /pub (deixando somente a de usuários ativa)
         quotaoff -gv /pub
    

A atualização de quotas durante a gravação/exclusão de arquivos é feita automaticamente. O utilitário quotacheck deverá ser executado sempre que o sistema de quotas for desativado (por não haver atualização automática dos dados de uso de disco) ou quando ocorrerem falhas de disco.

Na distribuição Debian o quotacheck é disparado sempre que necessário após as situações de checagem de disco. As quotas de todas as partições também são ativadas automaticamente pelo script /etc/init.d/quota e /etc/init.d/quotarpc.

Em sistemas que utilizam NFS e possuem sistemas de arquivos exportados em /etc/exports, o daemon rpc.rquotad deverá ser carregado. Sua função é fornecer os detalhes de quota dos sistemas de arquivos locais exportados para as máquinas clientes.


18.11.2 Editando quotas de usuários/grupos

O programa edquota é usado pelo root para editar as quotas de usuários/grupos. Por padrão, todos os usuários/grupos do sistema não possuem quotas. Sua sintaxe é a seguinte

edquota [opções] [usuário/grupo]

As opções podem ser:

-u
Edita a quota do usuário especificado (esta é a padrão).
-g
Edita a quota de grupo especificado.
-r
Permite editar a quota de sistemas de arquivos remotos através do daemon rpc.rquotad.
-p [usuário/grupo]
Usa os valores especificados para o usuário/grupo para definir a nova quota, sem necessidade de entrar no modo de edição.
-t
Permite modificar o valor de tolerância dos limites que ultrapassam soft até que sejam bloqueados. Durante o tempo de tolerância, serão enviados somente avisos sobre a quota ultrapassada sem bloquear totalmente a gravação de arquivos (até que o limite hard seja atingido ou o tempo de tolerância seja ultrapassado).

Quando a quota soft do usuário/grupo é estourada, a mensagem "warning: user disk quota excedeed" será exibida. Quando a quota hard é ultrapassada, a gravação atual é interrompida e a mensagem "write failed, user disk limit reatched" é mostrada ao usuário. Nenhuma nova gravação que ultrapasse a quota hard é permitida Por exemplo, para modificar a quota do usuário gleydson: edquota gleydson

     Disk quotas for user gleydson (uid 1000): 
       Filesystem                   blocks       soft       hard     inodes     soft
         hard
       /dev/hda5                    504944     500100     600000      10868        15000
            20000

O editor de textos usado poderá ser modificado através da variável $EDITOR. Abaixo a explicação destes campos:

Para desativar as restrições coloque "0" no campo soft ou hard. Quando o limite soft é atingido, o usuário é alertado por ter ultrapassado sua quota com a mensagem "warning: user quota excedeed" (quota do usuário excedida). O programa setquota é uma programa não-interativo para edição de quotas para ser usado diretamente na linha de comando ou em shell scripts.

Após ultrapassar o limite soft, começa a contagem do tempo para que este passe a valer como limite hard (o máximo aceitável e que nunca poderá ser ultrapassado). O comando edquota -t serve para modificar estes valores na partição especificada:

     Grace period before enforcing soft limits for users: 
     Time units may be: days, hours, minutes, or seconds
       Filesystem             Block grace period     Inode grace period
       /dev/hda5                  2days                  7days

Abaixo a explicação destes campos:

OBS1: - O comando quotacheck deverá ser executado na partição sempre que novas restrições/limites forem editados com o edquota. Isto atualiza os arquivos quota.user e quota.group. Lembre-se de desativar o sistema de quotas (quotaoff -ugv /partição) antes de executar este comando (para liberar totalmente a partição, quotacheck remonta a partição somente para leitura quando é executado). Por este motivo é recomendável fazer isso em modo monousuário.

OBS2: Quando o limite soft (suave) é excedido, o sistema começará a lhe mostrar mensagens alertando a passagem do limite (para lhe dar tempo de eliminar arquivos ou não ser pego desprevenido com o bloqueio de gravação) porque o limite hard (rígido) nunca poderá ser ultrapassado.

OBS3: - O tempo de tolerância restante ao usuário/grupo quando a quota é ultrapassada poder ser visualizada com o comando quota (veja Verificando a quota disponível ao usuário, Section 18.11.4).

OBS4: - Quando o usuário exclui seus arquivos e volta a ficar abaixo dos limites soft da quota, o tempo de tolerância é resetado aos valores padrões (especificados por edquota -t.

OBS5: - As quotas de espaço em disco podem ser definidas automaticamente para os novos usuários adicionados ao sistema colocando o espaço em disco na variável QUOTAUSER=numero do arquivo /etc/adduser.conf. Isto será equivalente a digitar o comando edquota -q QUOTA novo_usuário.


18.11.3 Modificando a quota de todos os usuários de uma vez

Editar manualmente a quota de cada usuário é uma tarefa trabalhosa quando se está instalando quotas e possui muitos usuários, existe uma maneira mais fácil de fazer isso usando o próprio edquota e um usuário com a quota já definida. Por exemplo, instalamos quota em nosso sistema e queremos que todos os 300 usuários tenham a quota de usuário de 10MB e de grupo de 15MB:

  1. Criamos um usuário com esta quota usando o edquota (como descrito em Editando quotas de usuários/grupos, Section 18.11.2). Como exemplo usaremos o usuário teste_user. Use o comando quota teste_user para verificar se as quotas para este usuário está correta.
  2. Criamos um script que modifique a quota padrão de todos os usuários do sistema de uma só vez:
         #!/bin/sh
         cd /home
         for USUARIO in *
         do
         edquota -u ${USUARIO} -p teste_user
         
         done
    

    Pronto, verifique a quota de todos os usuários com o comando repquota -a.


18.11.4 Verificando a quota disponível ao usuário

Execute o comando quota mostra os limites de usuários/grupos e a tolerância restante antes do limite soft se tornar rígido. Abaixo alguns exemplos descritivos deste comando:

     quota
     
     Disk quotas for user gleydson (uid 1234): 
          Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
           /dev/hda5  504944* 500100  600000   00:05   10868       0       0

Os campos tem o seguinte significado:

A quota de outros usuários/grupos podem ser visualizadas especificando as opções -u (padrão) e -g na linha de comando respectivamente. A opção -v permite visualizar quotas em sistemas de arquivos não alocados e -q mostra somente uma mensagem dizendo se o usuário está ou não dentro de sua quota:

     quota -u usuario
     
     quota -uq usuario
     
     quota -g users

Por motivos de segurança, você não poderá visualizar as quotas de outros usuários e grupos que não pertence (exceto para o usuário root).


18.11.5 Verificando a quota de todos os usuários/grupos do sistema

Quando precisamos verificar o uso de quotas de todos os usuários/grupos do sistema o quota se torna incômodo e pouco prático. O comando repquota lista está disponível ao administrador para facilitar esta tarefa. Sua listagem é organizada por partições listando dados adicionais como grace time e aceita as mesmas opções dos utilitários quotaon e quotaoff. Primeiro são listados as restrições de usuários e depois de grupos para a partição. (tolerância) As opções aceitas por este utilitário tem o mesmo significado das opções do quotaon e quotaoff:

     repquota -aug
     
     *** Report for user quotas on device /dev/hda3
     Block grace time: 7days; Inode grace time: 7days
                             Block limits                File limits
     User            used    soft    hard  grace    used  soft  hard  grace
     ----------------------------------------------------------------------
     root      --   29160       0       0   none    9970     0     0   none
     daemon    --      64       0       0             22     0     0       
     man       --     944       0       0             65     0     0       
     mail      --    4960       0       0            823     0     0       
     news      --       4       0       0              1     0     0       
     gleydson  --   31032       0       0           6956     0     0       
     testuser  --      16       0       0              4     0     0       
     anotheruser --    16       0       0              4     0     0       
     nobody    --    2344       0       0              2     0     0       
     
     *** Report for user quotas on device /dev/hda5
     Block grace time: 2days; Inode grace time: 7days
                             Block limits                File limits
     User            used    soft    hard  grace    used  soft  hard  grace
     ----------------------------------------------------------------------
     root      --   16052       0       0   none    6443     0     0   none
     gleydson  +-    4944  500100  600000   none   10868     0     0       
     
     *** Report for group quotas on device /dev/hda5
     Block grace time: 7days; Inode grace time: 7days
                             Block limits                File limits
     Group           used    soft    hard  grace    used  soft  hard  grace
     ----------------------------------------------------------------------
     root      --   20308       0       0   none     636     0     0   none
     src       --   11404       0       0            660     0     0       
     users     --    1756       0       0           6561     0     0       
     gleydson  --    3452       0       0           9307     0     0

Um sinal de "+-" no segundo campo indica quota ultrapassada ou no espaço em disco, "-+' em número de arquivos e "++" em ambos. Como vimos acima, o este comando também lista o número de arquivos e bytes pertencentes a cada usuário na partição (mesmo não sendo monitorado pelas restrições de quota), isto ajuda a monitorar ações suspeitas com a excedência de espaço em disco de determinados usuários/grupos do sistema. Um exemplo é alguém que esteja fora da quota e abusando de seu usuário/grupo para uso excessivo de espaço em disco sem seu conhecimento.

OBS: Este utilitário pode ser executado por qualquer usuário no sistema e mostrar o uso de quotas de usuários/grupos que não deveria ter acesso. É recomendado deve ter permissões de leitura/gravação somente para o usuário root e sem permissões para grupo/outros usuários.


18.11.6 Avisando usuários sobre o estouro de quota

Avisos sobre quota ultrapassada podem ser enviadas automaticamente a todos os usuários pelo utilitário warnquota. Ele poderá ser executado periodicamente através do cron (por padrão isto é feito diariamente na distribuição Debian pelo script /etc/cron.daily/quota). Dados adicionais sobre o envio das mensagens devem ser especificados no arquivo /etc/warnquota.conf seu formato é o seguinte:

     # Programa usado para enviar as mensagens
     MAIL_CMD 	= "/usr/sbin/sendmail -t"
     # Campo de origem da mensagem
     FROM 		= "root@localhost"
     # but they don't have to be:
     SUBJECT 	= Quota excedida
     CC_TO 		= "root@localhost"
     SUPPORT 	= "root@localhost"
     PHONE 		= "5555-2525"
     #

O e-mail é enviado aos usuários (e usuários que pertencem a grupos com a quota excedida) com o seguinte formato:

     From: root@localhost
     To: gleydson@debian.gms.com.br
     Cc: root@localhost
     Reply-To: root@localhost
     Subject: Quota Excedida
     Date: Sat, 22 Sep 2001 14:27:38 -0400
     
     Hi,
     
     We noticed that you are in violation with the quotasystem
     used on this system. We have found the following violations:
     
     
                             Block limits               File limits
     Filesystem           used    soft    hard  grace    used  soft  hard  grace
     /dev/hda5      +-  504944  500100  600000   none   10868     0     0       
     
     
     We hope that you will cleanup before your grace period expires.
     
     Basically, this means that the system thinks you are using more disk space
     on the above partition(s) than you are allowed.  If you do not delete files
     and get below your quota before the grace period expires, the system will
     prevent you from creating new files.
     
     For additional assistance, please contact us at root@localhost
     or via phone at 5555-2525.

18.12 Suporte a senhas ocultas

Veja Shadow Passwords, Section 11.4.1.


18.13 Suporte a senhas md5

Veja Senhas MD5, Section 11.4.2.


18.14 Restrições no hardware do sistema

As restrições descritas aqui são úteis para diminuir as chances de um ataque por acesso físico ser realizado com sucesso no sistema que desejamos proteger.

Ter um sistema totalmente seguro é praticamente impossível, mas existem diversas maneiras de se dificultar as coisas.


18.14.1 BIOS do sistema

Algumas restrições podem ser configuradas na para diminuir as chances de se obter acesso root (usando métodos conhecidos de recuperação via disquete/CD inicializável) ou simplesmente aumentar nossa confiança no sistema:

Com os dois ítens acima qualquer um ficará impedido de inicializar o sistema a partir de um disco de recuperação ou entrar no Setup para modificar a ordem de procura do sistema operacional para dar a partida via disquetes.


18.14.2 Retirada da unidade de disquetes

Como não é seguro confiar nas restrições de senha da BIOS (qualquer um com conhecimentos de hardware e acesso físico a máquina pode abrir o gabinete e dar um curto na bateria que mantém os dados na CMOS ou aterrar o pino de sinal da CMOS), a retirada da unidade de disquetes é recomendada, isso dificultará bastante as coisas.


18.14.3 Placas de rede com eprom de boot

Evite a utilização de placas de rede com recursos de boot via EPROM no servidor, um servidor dhcp/bootp/tftp poderá ser configurado sem problemas por um cracker na rede (caso a BIOS esteja com a ordem inadequada de procura de discos) e o ataque se dar com mais "sofisticação" e rapidez.


18.14.4 Protegendo o LILO

A opção passwd=senha e restricted poderão ser usadas na seção da imagem que desejamos proteger. Respectivamente pedem uma senha para a inicialização do sistema e caso argumentos como root=single sejam usados para conseguir acesso root sem fornecer senha.

E deixe somente as permissões de acesso ao usuário root (caso contrário sua senha poderá ser vista por qualquer usuário) e modifique os atributos deste arquivo para imutável para que nem mesmo o root possa modifica-lo: chattr +i /etc/lilo.conf.


18.14.5 Disco rígido

O disco rígido do servidor poderá se retirado como alternativa para se ter acesso aos dados armazenados. Isto poderá ser dificultado com o uso de lacres de disco ou outras maneiras de dificultar mais esta tarefa (mais parafusos, armazenamento em partes de difícil manipulação do HD, etc) qualquer coisa que possa lhe fazer ganhar tempo e despertar suspeitas para evitar o sucesso desta alternativa (ousada).

Dados importantes ou confidenciais poderão ser armazenados em um sistema de arquivos criptografados e serem montados somente pelos administradores que possuem acesso físico ao sistema. O algoritmo Serpent é muito forte na proteção de dados além de possuir um ótimo desempenho. Patches de criptografia poderão ser aplicados no kernel para ativação deste recurso (veja Sistemas de arquivos criptográfico, Section 19.4) para detalhes.

Sensores podem ser ligados na carcaça do HD como forma de disparar um pequeno alarme embutido no gabinete do servidor, se você gosta de eletrônica poderá montar um destes facilmente para chamar a atenção alimentado por fonte/baterias em um circuito de emergência, e poderá acomodar sua caixa em uma segunda "carcaça de fonte" apenas para desviar suspeitas. Um circuito interno de câmeras também é uma boa alternativa para monitorar a movimentação.

Esquemas de segurança dependendo do porte da organização e dos dados que se desejam proteger deverão ser elaborados e postos em prática. Todos os métodos imagináveis deverão ser considerados de acordo com as possibilidades do ambiente.


[ previous ] [ Contents ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] [ next ]

Guia Foca GNU/Linux

Versão 6.10 - Sunday, 03 de November de 2002
Gleydson Mazioli da Silva gleydson@cipsga.org.br