Product SiteDocumentation Site

8.9. Outras Configurações: Sincronização de tempo, Logs, Compartilhando acesso…

Os muitos elementos listados nesta seção são importantes para quem quer dominar todos os aspectos de configuração de um sistema GNU/Linux. Eles são, contudo, tratados superficialmente e frequentemente vão te remeter à documentação.

8.9.1. Região

O fuso horário (timezone ou tz), configurado durante a instalação inicial, é um item da configuração do pacote tzdata. Para modificá-lo, use o comando dpkg-reconfigure tzdata para poder escolher o fuso horário a ser usado de maneira interativa. Sua configuração é armazenada no arquivo /etc/timezone. Adicionalmente, /etc/localtime se torna um link simbólico para o arquivo correspondente no diretório /usr/share/zoneinfo; o arquivo que contém as regras que governam as datas onde o horário de verão (DayLight Saving - DST) é ativado, para países que o usam.
Quando você precisar alterar temporariamente o fuso-horário (timezone), use a variável de ambiente TZ, a qual tem prioridade sobre a configuração padrão do sistema:
$ date
Thu Sep  2 22:29:48 CEST 2021
$ TZ="Pacific/Honolulu" date
Thu 02 Sep 2021 10:31:01 AM HST

8.9.2. Sincronização de Tempo

A sincronização de horário, o que pode parecer supérfluo em um computador, é muito importante em uma rede. Como os usuários não tem permissão de modificar a data e horário, é importante que essa informação seja precisa para prevenir confusão. Além do mais, ter todos os computadores em uma rede sincronizados permite melhor cruzamento de referencias de informação a partir dos logs de diferentes máquinas. Assim, em um eventual ataque, é mais fácil reconstruir a sequência cronológica das ações nas várias máquinas envolvidas no compromisso. Os dados coletados nas várias máquinas, para propósitos de estatística, não farão muito sentido se eles não estiverem sincronizados.

8.9.2.1. Para Estações de Trabalho

Como as estações de trabalho são reinicializadas regularmente (ainda que apenas para economizar energia), sincronizá-las pelo NTP na inicialização é o suficiente. Para fazer isso, simplesmente instale o pacote ntpdate. Você pode alterar o servidor NTP usado, se necessário, modificando o arquivo /etc/default/ntpdate.

8.9.2.2. Para Servidores

Servidores são apenas raramente reinicializados, e é muito importante que o horário do sistema deles esteja correto. Para manter permanentemente o horário correto, você deveria instalar um servidor NTP local, um serviço oferecido pelo pacote ntp. Na sua configuração padrão, o servidor irá sincronizar com pool.ntp.org e prover o horário em resposta as requisições vindas da rede local. Você pode configurá-lo editando o arquivo /etc/ntp.conf, sendo a mais significante alteração o servidor NTP ao qual ele se refere. Se a rede tem vários servidores, pode ser interessante ter um servidor local de horário o qual faz a sincronização com servidores públicos e é usado como fonte de horário para outros servidores na rede.

8.9.3. Rotação de Arquivos de Log

Arquivos de log podem crescer rapidamente e é necessário arquivá-los. O esquema mais comum é a rotação dos arquivos: o arquivo de log é arquivado regularmente, e apenas os últimos X arquivos são mantidos. logrotate, o programa responsável por estas rotações, segue as diretivas especificadas no arquivo /etc/logrotate.conf e em todos os arquivos dentro do diretório /etc/logrotate.d/. O administrador pode modificar esses arquivos, se ele quiser adaptar a política de rotação dos logs definidas pelo Debian. A página de manual do logrotate(1) descreve todas as opções disponíveis nesses arquivos de configuração. Você pode querer aumentar o número de arquivos retidos na rotação dos arquivos de log, ou mover os arquivos de log para um diretório específico, dedicado a arquivá-los ao invés de apagá-los. Você pode também enviá-los, por email, para arquivá-los em outro lugar qualquer.
O programa logrotate é executado diariamente pelo agendador de comandos cron (descrito em Seção 9.7, “Agendando tarefas com cron e atd).

8.9.4. Compartilhando Direitos Administrativos

Frequentemente, vários administradores trabalham na mesma rede. O compartilhamento da senha do root não é muito elegante, e abre brecha para abusos devido ao anonimato que tal prática cria. A solução para esse problema é o programa sudo, o qual permite que certos usuários executem certos comandos com direitos especiais. Em seu caso mais comum de uso, o sudo permite que um usuário confiável execute qualquer comando como se fosse o root. Para fazer isso, o usuário simplesmente executa sudo command e se autentica usando sua senha pessoal.
Quando instalado, o pacote sudo dá todos os direitos de root para os membros do grupo Unix sudo. Para delegar outros direitos, o administrador pode usar o comando visudo, o qual permite a ele modificar o arquivo de configuração /etc/sudoers (mais uma vez, isso irá invocar o editor vi, ou qualquer outro editor indicado na variável de ambiente EDITOR). Alternativamente, o admin pode colocar regras em pequenos arquivos no /etc/sudoers.d/ já que este diretório é adicionado no /etc/sudoers via @includedir /etc/sudoers.d, que é padrão no Debian. Adicionando uma linha com usuário ALL=(ALL) ALL permite que o usuário em questão execute qualquer comando como root.
Configurações mais sofisticadas permitem autorizar apenas comandos específicos para usuários específicos. Todos os detalhes das variadas possibilidades são dados pela página de manual sudoers(5).

8.9.5. Lista de Pontos de Montagem

O arquivo /etc/fstab dá uma lista de todas as possíveis montagens que acontecem tanto automaticamente na inicialização quanto manualmente para dispositivos de armazenamento removíveis. Cada ponto de montagem é descrito em uma linha com vários campos separados por espaço:
  • sistema de arquivos: indica onde o sistema de arquivos a ser montado pode ser encontrado, pode ser um dispositivo local (partição do disco rígido, CD-ROM) ou um sistema de arquivos remoto (como NFS, ou até mesmo SSHFS).
    Esse campo é frequentemente substituído pela ID única do sistema de arquivos (a qual você pode determinar com blkid dispositivo) prefixada com UUID=. Isso protege contra mudanças no nome do dispositivo no evento de adição ou remoção de discos, ou se os discos forem detectados de maneira diferente.Seção 8.8.1, “Identificando os Discos” Cobre esse tópico em mais detalhes.
  • ponto de montagem: esse é a localização no sistema de arquivos local aonde o dispositivo, sistema remoto, ou partição será montada.
  • tipo: esse campo define o sistema de arquivos usado no dispositivo montado. ext4, ext3, vfat, ntfs, btrfs, xfs são alguns exemplos.
    Uma lista completa dos conhecidos sistemas de arquivo está disponível na página de manual mount(8). O valor especial swap é para partições swap; o valor especial auto diz ao programa mount para detectar automaticamente o sistema de arquivos (o que é especialmente útil para leitores de disco e chaves USB, já que cada um pode ter um sistema de arquivos diferente);
  • opções: existem muitas delas, dependendo do sistema de arquivos, e elas estão documentadas na página de manual do mount. As mais comuns são
    • rw ou ro, significam, respectivamente, que o dispositivo será montado com permissão de leitura/escrita ou apenas leitura.
    • noauto desativa a montagem automática na inicialização.
    • nofail permite que a inicialização prossiga mesmo quando o dispositivo não esteja presente. Tenha a certeza de colocar essa opção para drives externos que podem estar desconectados quando você inicializar, porquê o systemd realmente garante que todos os pontos de montagem que tem que ser montados automaticamente estejam realmente montados antes de deixar o processo de inicialização continuar até o seu final. Note que você pode combinar isso com x-systemd.device-timeout=5s para informar o systemd para não esperar mais do que 5 segundos para o dispositivo aparecer (veja systemd.mount(5)).
    • user autoriza todos os usuários a montar esse sistema de arquivo (uma operação que, de outra forma, seria restrita ao usuário root).
    • defaults significa o grupo de opções padrão: rw, suid, dev, exec, auto, nouser e async, sendo que cada uma pode ser individualmente desabilitada após defaults bastando adicionar nosuid, nodev e assim por diante, para bloquear suid, dev e assim por diante. Adicionando a opção user reativa-a, já que defaults inclue nouser.
  • dump: este campo quase sempre tem o valor 0 e é uma espécie de relíquia. Quando é maior que zero, diz à ferramenta dump que a que a partição contém dados que devem ser copiados com frequência. A ferramenta só admite sistemas de arquivos Ext2/3/4 e utilizará o valor aqui indicado quando se execute mediante dump -W ou dump -w para determinar quais partições é necessário fazer uma cópia de segurança. Considere os exemplos em /usr/share/doc/dump/examples/ se deseja utilizar esta função. Mas há melhores alternativas para fazer cópias de segurança de um sistema de arquivos, como fsarchiver.
  • pass: esse último campo indica quando a integridade do sistema de arquivos deve ser verificada na inicialização, e em que ordem essa checagem deveria ser executada. Se ele é 0, nenhuma checagem é conduzida. O sistema de arquivos raiz deve ter valor 1, enquanto outros sistemas de arquivos permanentes recebem valor 2.

Exemplo 8.5. Exemplo do arquivo /etc/fstab

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# systemd generates mount units based on this file, see systemd.mount(5).
# Please run 'systemctl daemon-reload' after making changes here.
#
# <file system>                           <mount point>   <type>      <options>         <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=7a250fb8-c16d-4a4e-9808-ec08ae92b6c6 /               ext4        errors=remount-ro 0       1
# swap was on /dev/sda5 during installation
UUID=13f367ae-dbaf-40ed-85c0-4072a2ebe426 none            swap        sw                0       0
/dev/sr0                                  /media/cdrom0   udf,iso9660 user,noauto       0       0
/dev/fd0                                  /media/floppy   auto        rw,user,noauto    0       0
arrakis:/shared                           /shared         nfs         defaults          0       0
A última entrada neste exemplo corresponde ao sistema de arquivos de rede (NFS): o diretório /shared/ no servidor arrakis é montado em /shared/ na máquina local.
O formato do arquivo /etc/fstab está documentado na página do manual fstab(5).

8.9.6. locate e updatedb

O comando locate pode encontrar a localização de um arquivo quando você sabe apenas parte do nome. Ele envia o resultado quase que instantaneamente, já que ele consulta uma base de dados que armazena a localização de todos os arquivos no sistema; essa base de dados é atualizada diariamente pelo comando updatedb. Existem múltiplas implementações do comando locate e o Debian escolheu o mlocate para seu sistema padrão. Se você quiser considerar uma alternativa, você pode tentar o plocate que fornece as mesmas opções de linha de comando e pode ser considerado um substituto imediato.
O locate é suficientemente esperto para retornar apenas os arquivos os quais são acessíveis ao usuário que está executando o comando, mesmo que ele use uma base de dados que sabe sobre todos os arquivos no sistema (já que a sua implementação updatedb roda com privilégio de root). Para uma segurança extra, o administrador pode usar PRUNEDPATHS no /etc/updatedb.conf para excluir alguns diretórios de serem indexados.