[ anterior ] [ Conteúdo ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] [ 21 ] [ 22 ] [ 23 ] [ 24 ] [ 25 ] [ 26 ] [ 27 ] [ 28 ] [ 29 ] [ 30 ] [ 31 ] [ 32 ] [ 33 ] [ 34 ] [ 35 ] [ 36 ] [ 37 ] [ 38 ] [ 39 ] [ 40 ] [ 41 ] [ 42 ] [ 43 ] [ 44 ] [ 45 ] [ 46 ] [ 47 ] [ próximo ]
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 Firewall iptables, Capítulo 31 .
bash
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.
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.
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:
Usar o comando cd
para mudar de diretório.
Definindo, modificar ou apagar a variáveis SHELL, PATH, ENV, BASH_ENV.
Nomes de comandos que contém /
Especificar um nome de arquivo contendo uma /
como argumento para
o comando builtin
(embutido no interpretador de comandos).
Especificar uma /
como argumento a opção -p no comando
hash
(embutido no interpretador de comandos).
Importar a definição de funções do ambiente do shell atual.
Analisar o valor da variável SHELLOPTS do ambiente do shell atual.
Redirecionando a saída padrão usando os operadores de redirecionamento >, >|, <>, >&, &>; e >>.
Usando o comando embutido exec
para substituir o shell por outro
comando.
Usar as opções -f ou -d com o comando enable
(embutido no interpretador de comandos).
Especificar a opção -p ao comando interno command
.
Desativar o modo restrito com set +r ou set +o restricted *
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.
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, Seção 40.1.1 como complemento.
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:
HISTFILE - Nome do arquivo que armazenará o histórico de comandos.
O padrão é ~/.bash_history
. Caso não seja especificado, os
comandos não serão gravados após finalizar o shell.
HISTSIZE - Define o número de comandos que o arquivo de histórico poderá armazenar, o padrão é 500.
HISTFILESIZE - Define o número máximo de linhas no arquivo de histórico.
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, Seção 40.1.1).
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, Seção 40.2.3).
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.
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.
A política 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 a política 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
.
Isto é controlado pelo arquivo /etc/security/access.conf
. O
formato deste arquivo consistem em três campos separados por ":":
Primeiro campo - Garante ("+") ou bloqueia ("-") o acesso caso as condições nos outros campos confiram.
Segundo campo - Contém o login, grupo. O formato usuário@computador pode ser usado para conferir com usuários que acessam de determinadas máquinas. Caso existam mais de um parâmetro, estes devem ser separados usando espaços. As palavras chave ALL (todos) e EXCEPT (exceção) e console também podem ser usadas.
Terceiro campo - Lista de terminais (tty - na forma listada pelo
ttyname
), nomes de máquinas, nomes de domínios (começando com
"."), endereços IP ou FQDN, porção de rede (finalizando com um
"."). As palavras chave ALL (todos) e
LOCAL (máquinas na mesma rede) também podem ser usadas.
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
A restrição de acesso a usuário root pelo PAM funciona
permitindo que somente alguns usuários que pertençam a um grupo criado pelo
administrador possam se tornar o superusuário usando o comando
su
. Esta restrição funciona até mesmo para os usuários que
possuem a senha correta de root, retornando uma mensagem de login ou senha
incorretos. Isto é extremamente útil para restrições de acesso.
Um outro ponto positivo é caso ocorra um possível acesso não autorizado em
seu sistema ou um daemon seja corrompido e o atacante cair em um shell, ele
não poderá obter root na máquina pois o UID do daemon
provavelmente não terá autorização. A distribuição Debian
,
em especial, possui grupos e nomes de usuários organizados de forma a permitir
segurança e separação total caso utilize este mecanismo.
Este recurso se mostra bem eficiente para proteger a integridade da máquina
até mesmo no comprometimento de máquinas que possui a senha semelhante,
somente se usado em conjunto com as restrições de acesso de outros serviços
remotos (como o ssh
, ftp
, etc). O guia Foca
documenta as formas de restrição e seu impacto na segurança da máquina nos
capítulos do nível Avançado (veja o índice para buscar o capítulo
correspondente ao que deseja proteger).
Para configurar esta restrição, siga os seguintes passos:
Crie um grupo onde os usuários cadastrados terão acesso root. Por exemplo, usuarios-su (ou algo mais discreto).
Edite o arquivo /etc/pam.d/su
. Insira a seguinte linha (caso não
existir) no arquivo de configuração:
auth required pam_wheel.so group=usuarios-su
O que ela faz é usar o módulo pam_wheel.so
requerendo que os
usuários pertençam ao grupo usuarios-su
. Salve e saia do
editor.
Ainda como usuário root, adicione os usuários que terão acesso
a root no grupo usuarios-su
. Recomendo que adicione seu usuário
primeiro, principalmente se estiver fazendo acesso remoto, pois se acontecer
uma queda no link não ficará sem acesso root por cair na restrição :-)
Tente pegar o root com outros usuários que não pertençam ao
grupo usuarios-su
estes simplesmente terão o acesso negado.
Estas restrições são controladas pelo arquivo
/etc/security/time.conf
, a sintaxe deste arquivo é quatro campos
separados por ";":
Primeiro campo - Nome do serviço PAM que será controlado (um dos
serviços contidos em /etc/pam.d
).
Segundo campo - Lista de nomes de terminais que a regra que aplicará. O sinal "&" tem a função and, "|" tem a função or e "!" especifica uma exceção.
Terceiro campo - Nome de usuários afetados pela regra. O sinal "&" tem a função and, "|" tem a função or e "!" especifica uma exceção.
OBS: O "*" poderá ser usado somente no primeiro, segundo ou terceiro campo em uma mesma regra.
Quarto campo - DiaSemana/faixa-de-horas que a restrição se aplicará. O dia da semana é especificado em duas letras:
Mo - Segunda-feira
Tu - Terça-feira
We - Quarta-feira
Th - Quinta-feira
Fr - Sexta-feira
Sa - Sábado
Su - Domingo
Wk - Todos os dias da semana
Wd - Somente sábado e domingo (fim de semana)
Al - Todos os dias
O sinal "!" especifica uma exceção. A faixa de horas é especificada após o dia no formato HHMM-HHMM. Por exemplo:
MoTuWe0000-2400 - Segundas, terças e quartas MoFrSu0800-1900- - Segundas, sextas e domingo das 08:00 da manha as 19:00 da noite. FrFr0500-0600 - Não será realizada na sexta (especificações repetidas são anuladas) de 05:00 as 06:00. WkWe0731-1456 - Todos os dias da semana a partir de Quarta de 07:31 da manhã as 14:56 da tarde. AlMo0000-2400 - Todos os dias da semana, exceto segunda-feira.
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.
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,
Seção 40.2.5. 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
OBS1: Mesmo que uma regra confira com o usuário, as outras também serão verificadas para garantir acesso grupos extras.
OBS2: O padrão na maioria das distribuições é limitar o número máximo de grupos do usuário para 32. Caso precise aumentar este limite, será necessário recompilar o kernel (e também a glibc, se necessário) para aceitar um número maior modificando a variável ngroup.
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:
Primeiro campo - Especifica o nome de usuário, um nome de grupo (@grupo) ou um "*" especificando que as restrições nos outros campos se aplicam a todos os grupos e todos os usuários.
Segundo campo - Tipo de restrição:
soft - Limite suave de bloqueio.
hard - Limite rígido de bloqueio.
- - Quando o tipo de restrição não se aplica ao Ítem que deseja restringir o acesso.
Quando somente o limite "hard" (rígido) é especificado, o limite suave assume o mesmo valor.
Terceiro campo - Ítem que deseja restringir o acesso:
core - Limita o tamanho do arquivo core (KB)
data - Tamanho máximo de arquivo de dados (KB)
fsize - Tamanho máximo de arquivo (KB)
memlock - Tamanho máximo do espaço de endereços bloqueado na memória (KB)
nofile - Número máximo de arquivos abertos
rss - Tamanho máximo residente (KB)
stack - Tamanho máximo da pilha (KB)
cpu - Tempo máximo de uso da CPU (MIN)
nproc - Número máximo de processos
as - Limite de espaço de endereços
maxlogins - Número máximo de logins
priority - Prioridade de execução de processos de usuários
Quarto campo - Especifica o valor do campo anterior
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
.
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:
Usar a placa de som. Os dispositivos usados pela placa de som como
/dev/audio
, /dev/dsp
, /dev/sndstat
, etc.
normalmente tem permissão leitura/gravação para o usuário root
e grupo audio (cheque com o comando ls -la
/dev/audio). Para autorizar determinados usuários usar a placa de som
basta adiciona-los neste grupo: adduser usuario audio.
Conectar a Internet. Normalmente o utilitário ppp tem as permissões SUID root e grupo dip. Adicionamos o usuário a este grupo: adduser usuario dip. Agora ele poderá conectar/desconectar a internet sem a intervenção do usuário root.
OBS Certamente o usuário terá acesso aos arquivos de
configuração da discagem do ppp
e conseqüentemente a senha de
conexão internet, e esta senha é a mesma usada no e-mail primário do
provedor (com o mesmo nome da conta). Esta mesma situação pode acontecer com
outros programas que autorize o acesso a grupos, é importante que conheça bem
as permissões do programa e entender se existem riscos.
Utilizar o modem. Um bom grupo para permitir a utilização do modem é dialout. O dispositivo utilizado pelo modem (não seu link) deve ter permissões leitura/gravação para o usuário root e grupo dialout. Cadastrando o usuário neste grupo autorizará a utilização do modem: adduser usuario dialout.
Permitir que diversos usuários compartilhem um mesmo diretório. Isto é útil quando muitas pessoas estão desenvolvendo um mesmo projeto. Siga estes passos:
Crie um novo grupo no sistema: groupadd gp1
, a opção -g
permite selecionar manualmente a GID. Opcionalmente você poderá usar um
grupo já existente no sistema (veja o arquivo /etc/group
).
Crie o diretório que será usado para armazenar os arquivos deste grupo de
usuários: mkdir projeto1
).
Mude o dono/grupo do diretório: chown root.gp1 projeto1/
De permissões de leitura/gravação para o dono/grupo do diretório, vamos também incluir a permissão SGID para que todos os arquivos criados dentro deste diretório pertençam ao mesmo grupo e não ao grupo primário do usuário, assim todos os usuários terão acesso: chmod 2770 projeto1
Agora cadastre os usuários que deverão ter acesso ao diretório
projeto1/
no grupo gp1, somente estes usuários e o
root terão acesso ao diretório (permissões 2770).
É interessante também mudar a "umask" do usuário de 022 para 002 (ou equivalente) para que os novos arquivos criados tenham permissão de leitura/gravação para o grupo gp1. Caso contrário, lembre-se de modificar as permissões de seus arquivos manualmente. Um ótimo comando para fazer isso (sem afetar diretórios) é: find . -type f -user usuario1 -exec chmod 0660 \{\} \;. Este comando parece estranho mas é excelente! um chmod -R 0660 afetaria até os diretórios, imagine o caos.
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
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. Para listar os comandos
disponíveis para o usuário no sudo
, utilize a opção
-l, ex: sudo -l.
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
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,
Capítulo 34 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, Capítulo 34.
Esta proteção oferece uma barreira maior se segurança contra IPs spoofing evitando que pessoas mal intencionadas façam um IP spoofing da máquina para obter acessos privilegiados que somente o detentor original do MAC/IP teria. Recomendo não levar em consideração que isto seja a solução definitiva contra IP spoofing, pois é possível falsificar o MAC address de uma interface para tomar outra identidade.
Este método poderá ser aplicado para fornecer um maior laço de confiança por hardware entre as máquinas que compõem uma rede de servidores. Ele também evita mesmo que uma máquina configurada de forma errônea tenha acesso indevido ao servidor ou em uma situação extrema, se torne o gateway da rede.
Para restringir as conexões para uma máquina Linux
por MAC
address, utilize o firewall iptables
. Com ele será permitido
fazer a restrição por serviços, criando uma barreira bastante chata para
crackers tentarem se conectar a um serviço. Como referência, leia a seção
Especificando o endereço
MAC da interface, Seção 31.6.7.
Outra situação é a restrição por par MAC/IP usando o próprio cache arp da
máquina, usando entradas estáticas de endereços. Um exemplo deste uso é
quando você é extremamente paranóico ou quando uma rede que utiliza algum
método de autenticação baseado no rhosts
(como é o caso do
sistema de backup do Amanda
), então é importante dizer para as
máquinas servidoras, qual o MAC address/IP privilegiado que terá o acesso ao
usuário para conexão sem senha.
O local padronizado para definir um MAC estático (e bastante desconhecido da
maioria dos administradores de sistemas) é o /etc/ethers
. O
formato deste arquivo é o MAC Address e IP separados
por espaço, cada linha com uma nova entrada de MAC Address. Veja o exemplo:
00:03:47:AA:AA:AB www.focalinux.org.br 00:03:47:BB:AA:BA www2.focalinux.org.br 00:03:47:BB:AA:BB 192.168.0.1
Caso não conheça o formato do endereço de MAC Address, os três primeiros 3 campos definem o fabricante da placa de rede, e os 3 últimos é uma identificação única do fabricante para a Placa, ou seja, NENHUMA placa de rede fabricada tem o mesmo MAC Address físico.
Para que o comando arp
crie as entradas estáticas no seu cache
ARP, será necessário executar o comando arp -f /etc/ethers.
Este comando poderá ser colocado em algum script ou diretório de
inicialização de sua distribuição para que seja executado automaticamente
(como por exemplo, no /etc/rc.boot
da Debian
).
Digitando arp você verá as linhas definidas no arquivo
/etc/ethers
marcadas com as opção (flag) M
(manual/permanente). Outra forma de verificar, é usando o arp -a
máquina ou somente arp -a. As máquinas especificadas
estaticamente (manualmente) terão o nome PERM listados (cache arp
permanente).
OBS: Como deve ter notado, a restrição por MAC Address implica em um aumento no trabalho de gerenciamento das configurações. Assim, planeje-se para que esta tarefa não seja desgastante, crie programas para realizar atualizações dinâmicas estudando a estrutura de sua rede e como suas máquinas se comunicam para não ter problemas obscuros quando tiver que fazer uma simples modificação em uma interface de rede :)
Uma boa configuração restritiva requer análise sobre os impactos na rede.
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
.
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,
Seção 15.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, Capítulo 36 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ê...
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.
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:
É pequeno, rápido e faz poucas modificações no fonte do kernel.
Seu método de funcionamento é baseado nas restrições de dono/grupo (nativas
de ambiente Unix
).
Restringe a visualização de processos só dos usuários. Adicionalmente
será especificada uma GID para o diretório /proc
, qualquer
usuário que pertença ao grupo especificado poderá visualizar todos os
processos e entrar em qualquer diretório do kernel (sem restrições, como se
não tivesse o patch).
Muito estável e confiável.
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, Capítulo 34 para detalhes sobre este serviço.
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.
Abaixo o passo a passo para a instalação de quotas em seu sistema:
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.
Instale o pacote quota
no sistema (apt-get install
quota).
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
.
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.
Crie um arquivo vazio quota.user
em /
(terá suporte
somente a quota de usuários, veja a opção de montagem no
/etc/fstab
): touch /quota.user ou echo -n
>/quota.user.
Crie um arquivo vazio quota.group
em /usr
(terá
suporte somente a quota de grupos): touch /usr/quota.group ou
echo -n >/usr/quota.group.
Crie um arquivo vazio quota.user
e quota.group
em
/pub
(este sistema de arquivos tem suporte a ambos os tipos de
quota): touch /pub/quota.user /pub/quota.group.
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 rápido em partições grandes. São necessários patches da série "ac" (Alan Cox) para usar a versão 2 do quota.
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.
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.
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.
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:
Edita a quota do usuário especificado (esta é a padrão).
Edita a quota de grupo especificado.
Permite editar a quota de sistemas de arquivos remotos através do daemon
rpc.rquotad
.
Usa os valores especificados para o usuário/grupo para definir a nova quota, sem necessidade de entrar no modo de edição.
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:
Filesystem - Sistema de arquivos que terá a quota do usuário/grupo editada. As restrições se aplicam individualmente de acordo com o sistema de arquivos.
blocks - Número máximo de blocos (especificado em Kbytes) que o usuário possui atualmente. O usuário gleydson está usando atualmente 504944 Kbytes.
soft - Restrição mínima de espaço em disco usado. Atualmente 500100 Kb.
hard - Limite máximo aceitável de uso em disco para o usuário/grupo sendo editado. 600000 Kb atualmente. O sistema de quotas nunca deixará este limite ser ultrapassado.
inodes - Número máximo de arquivos que o usuário possui
atualmente na partição especificada. O usuário gleydson possui
atualmente 10868 arquivos na partição /pub
.
soft - Restrição mínima de número de arquivos que o usuário/grupo possui no disco. Atualmente em 15.000.
hard - Restrição máxima de número de arquivos que o usuário/grupo possui no disco. Atualmente em 20.000.
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:
Filesystem - Sistema de arquivos que terá o período de tolerância modificado.
Block grade period - Tempo máximo de tolerância para usuários/grupos que ultrapassaram sua quota soft de espaço em disco antes de passar a valer como hard. No exemplo, o usuário tem 2 dias para excluir possíveis arquivos ou contactar o administrador para redimensionar o tamanho de quota. O valor padrão é 7 dias.
Inode grade period - Tempo máximo de tolerância para usuários/grupos que ultrapassaram sua quota soft de número de arquivos gravados antes de passar a valer como hard. No exemplo, o usuário tem 7 dias para excluir possíveis arquivos ou contactar o administrador para analisar seu tamanho de quota. O valor padrão é 7 dias.
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, Seção 40.12.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.
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:
Criamos um usuário com esta quota usando o edquota
(como descrito
em Editando quotas de usuários/grupos,
Seção 40.12.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.
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.
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:
Filesystem - Sistema de arquivos.
blocks - Número de blocos usados atualmente na partição (em Kb). O "*" indica que o limite foi ultrapassado. Atualmente em 504944.
quota - Limite suave (soft) de espaço na partição que o usuário/grupo possui. Atualmente 500100. O valor 0 indica que o usuário/grupo não possui restrições.
limit - Limite máximo (hard) de espaço na partição que o usuário/grupo possui. Atualmente em 600000. O valor 0 indica que o usuário/grupo não possui restrições.
grace - Tolerância antes que o limite soft passe a valer como hard quando o espaço em disco é ultrapassado. Este usuário tem 5 minutos restantes para que isto ocorra. Quando o valor soft volta a ficar abaixo da quota, a tolerância é resetada.
O parâmetro "none" indica que o tempo de tolerância expirou (caso existam limitações de quota que foram ultrapassadas) ou que o usuário/grupo não possui restrições. Veja se existe um "*" no campo blocks.
files - Número máximo de arquivos que usuário/grupo possui atualmente na partição. Um "*' indica que o limite foi ultrapassado. Atualmente em 10868.
quota - Limite suave (soft) de número de arquivos na partição que o usuário/grupo possui. Atualmente ilimitado.
limit - Limite máximo (hard) de número de arquivos na partição que o usuário/grupo possui. Atualmente ilimitado.
grace - Tolerância antes que o limite soft passe a valer como hard para o número de arquivos ultrapassados. Como não existe quota para número de arquivos, não existe tolerância. A tolerância é resetada aos valores padrões quando o valor soft volta a ficar abaixo da quota.
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).
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.
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.
Veja Shadow Passwords, Seção 32.4.1.
Veja Senhas MD5, Seção 32.4.2.
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.
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:
Coloque uma senha para entrada no Setup da máquina, compartilhe esta senha somente com as pessoas que tem poder de root (ou seja, pessoal de confiança que administra a máquina).
Mude a seqüencia de partida para somente sua unidade de disco rígido que contém o sistema operacional. As BIOS trazem convenções de DOS para especificar o método de partida, então Only C quer dizer somente o primeiro disco rígido, SCSI tentar dispositivos SCSI primeiro, etc. Isso pode variar de acordo com o modelo de sua BIOS.
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.
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.
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.
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.
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, Seção 41.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.
[ anterior ] [ Conteúdo ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] [ 21 ] [ 22 ] [ 23 ] [ 24 ] [ 25 ] [ 26 ] [ 27 ] [ 28 ] [ 29 ] [ 30 ] [ 31 ] [ 32 ] [ 33 ] [ 34 ] [ 35 ] [ 36 ] [ 37 ] [ 38 ] [ 39 ] [ 40 ] [ 41 ] [ 42 ] [ 43 ] [ 44 ] [ 45 ] [ 46 ] [ 47 ] [ próximo ]
Guia Foca GNU/Linux
Versão 4.22 - domingo, 05 de setembro de 2010mailto:gleydson@guiafoca.org