Capítulo 4. Autenticação e controlos de acesso

# Capítulo 4. Autenticação e controlos de acesso

Quando uma pessoa (ou programa) requer acesso ao sistema, a autenticação confirma a identidade para ser de confiança.

| Atenção
Erros de configuração do PAM podem trancá-lo fora do seu sistema. Terá de ter um CD de recuperação à mão ou arrancar por uma partição de arranque alternativa. Para recuperar, arranque o sistema com eles e corrija a partir daí.

## 4.1. Autenticação normal de Unix

A autenticação normal de Unix é disponibilizada pelo módulo pam_unix(8) sob PAM (Pluggable Authentication Modules). Os seus 3 ficheiros de configuração importantes, com entradas separadas por "`:`", são os seguintes.

Tabela 4.1. 3 ficheiros de configuração importantes para pam_unix(8)

ficheiro | permissão | utilizador | grupo | descrição
--- | --- | --- | --- | ---
`/etc/passwd` | `-rw-r--r--` | `root` | `root` | informação da conta do utilizador (filtrada)
`/etc/shadow` | `-rw-r-----` | `root` | `shadow` | informação segura da conta do utilizador
`/etc/group` | `-rw-r--r--` | `root` | `root` | informação do grupo

"`/etc/passwd`" contém o seguinte.

     ...
    user1:x:1000:1000:User1 Name,,,:/home/user1:/bin/bash
    user2:x:1001:1001:User2 Name,,,:/home/user2:/bin/bash
     ...

Como explicado em passwd(5), cada entrada separada por "`:`" neste ficheiro significa o seguinte.

- Nome de login

- Entrada de especificação de palavra-passe

- ID numérico do utilizador

- ID numérico do grupo

- Nome de utilizador ou campo de comentários

- Directório home do utilizador

- Interpretador de comandos opcional do utilizador

A segunda entrada de "`/etc/passwd`" foi utilizada para a entrada de palavra-passe encriptada. Após a introdução de "`/etc/shadow`", esta entrada é utilizada para a entrada de especificação da palavra-passe.

Tabela 4.2. A segunda entrada no conteúdo de "`/etc/passwd`"

conteúdo | significado
--- | ---
(vazio) | conta sem palavra-passe
x | a palavra-passe encriptada está em "`/etc/shadow`"

"`/etc/shadow`" contém o seguinte.

     ...
    user1:$1$Xop0FYH9$IfxyQwBe9b8tiyIkt2P4F/:13262:0:99999:7:::
    user2:$1$vXGZLVbS$ElyErNf/agUDsm1DehJMS/:13261:0:99999:7:::
     ...

Como explicado em shadow(5), cada entrada separada por "`:`" neste ficheiro significa o seguinte.

- Nome de login

- Palavra-passe encriptada (O "`$1$`" inicial indica o uso de encriptação MD5. O "*" indica nenhum login.)

- Data da última alteração da palavra-passe, expressada a quantidade de dias desde 1 de Janeiro de 1970

- Quantidade de dias que o utilizador terá que esperar antes de ser-lhe permitido alterar a palavra-passe outra vez

- Quantidade de dias após os quais o utilizador terá que alterar a palavra passe dele

- Quantidade de dias antes de uma palavra-passe expirar durante o qual o utilizador deve ser avisado

- Quantidade de dias após uma palavra-passe ter expirador durante os quais a palavra-passe deve ainda ser aceite

- Data de expiração de uma conta, expressada como a quantidade de dias desde 1 de Janeiro de 1970

- …

"`/etc/group`" contém o seguinte.

    group1:x:20:user1,user2

Como explicado em grupo(5), cada entrada separada por "`:`" neste ficheiro significa o seguinte.

- Nome do grupo

- Palavra-passe encriptada (na realidade não utilizada)

- ID numérico do grupo

- lista de nomes de utilizadores, separada por ","

| Nota
"`/etc/gshadow`" disponibiliza uma função semelhante à do "`/etc/shadow`" para "`/etc/group`" mas não é realmente usado.

| Nota
A quantidade real de membros de um grupo de um utilizador pode ser adicionada dinamicamente se a linha "`auth optional pam_group.so`" for adicionada ao "`/etc/pam.d/common-auth`" e definida em "`/etc/security/group.conf`". Veja pam_group(8).

| Nota
O pacote `base-passwd` contém uma lista autorizada do utilizador e do grupo: "`/usr/share/doc/base-passwd/users-and-groups.html`".

## 4.2. Gerir informação de conta e palavra-passe

Aqui estão alguns comandos notáveis para gerir informação de conta.

Tabela 4.3. Lista de comandos para gerir informação de conta

comando | função
--- | ---
`getent passwd user_name` | navegar na informação da conta de "`nome_de_utilizador`"
`getent shadow user_name` | explorar informação confidencial (shadow) da conta de "`nome_de_utilizador`
`getent group group_name` | navegar na informação do grupo de "`nome_do_grupo`"
`passwd` | gerir a palavra-passe da conta
`passwd -e` | definir palavra-passe para uma vez para a activação da conta
`chage` | gerir a informação de envelhecimento da palavra-passe

Pode necessitar de privilégios de root para algumas funções funcionarem. Veja crypt(3) pela encriptação de palavra-passe e dados.

| Nota
Num sistema configurado com PAM e NSS como a máquina salsa de Debian, o conteúdo dos "`/etc/passwd`", "`/etc/group`" e "`/etc/shadow`" locais pode não ser utilizado activamente pelo sistema. Os comandos em cima são válidos mesmo sob tal ambiente.

## 4.3. Boa palavra-passe

Quando criar uma conta durante a instalação do seu sistema ou com o comando passwd(1), deve escolher uma boa palavra-passe que consista pelo menos de 6 a 8 caracteres incluindo um ou mais caracteres de cada um dos seguintes conjuntos de acordo com passwd(1).

- Alfabéticos de minúsculas

- Dígitos de 0 a 9

- Marcas de pontuação

| Atenção
Não escolha palavras adivinháveis como palavra-passe. O nome de conta, número de segurança social, número de telefone, endereço, data de nascimento, nomes de membros de família ou de animais, palavras do dicionário, sequências simples de caracteres como "12345" ou "qwerty", ... são todas más escolhas para a palavra-passe.

## 4.4. Criar palavra-passe encriptada

Existem ferramentas independentes para gerar palavras passe encriptadas com sal.

Tabela 4.4. Lista de ferramentas para gerar palavras-passe

pacote | popcon | tamanho | comando | função
--- | --- | --- | --- | ---
`whois` | V:23, I:210 | 384 | `mkpasswd` | frontend cheio de funcionalidades para a biblioteca crypt(3)
`openssl` | V:855, I:997 | 2532 | `openssl passwd` | computa hashes de palavras-passe (OpenSSL). `passwd`(1ssl)

## 4.5. PAM e NSS

Os sistemas modernos tipo-Unix como o sistema Debian disponibilizam mecanismos PAM (Pluggable Authentication Modules) e NSS (Name Service Switch) para o administrador local configurar o sistema dele. O papel destes pode ser resumido ao seguinte.

- O PAM oferece um mecanismo de autenticação flexível utilizado pelo software de aplicações e assim involve trocas de dados de palavra-passe.

- O NSS oferece um mecanismo de serviço de nomes flexível que é utilizado frequentemente pela biblioteca C standard para obter o nome de utilizador e grupo para programas como o ls(1) e o id(1).

Estes sistemas PAM e NSS necessitam ser configurados de modo consistente.

Os pacotes notáveis dos sistemas PAM e NSS são os seguintes.

Tabela 4.5. Lista de sistemas PAM e NSS notáveis

pacote | popcon | tamanho | descrição
--- | --- | --- | ---
`libpam-modules` | V:941, I:1000 | 892 | Pluggable Authentication Modules (serviço básico)
`libpam-ldapd` | V:7, I:13 | 79 | Pluggable Authentication Module que permite interfaces LDAP
`libpam-systemd` | V:747, I:967 | 785 | Pluggable Authentication Module para registar sessões de utilizador para o `logind`
`libpam-doc` | I:7.5 | 1492 | Pluggable Authentication Modules (documentação em html e texto)
`libc6` | V:942, I:1000 | 5481 | GNU C Library: Bibliotecas de partilha que também disponibilizam o serviço "Name Service Switch"
`glibc-doc` | I:5.4 | 3926 | Biblioteca GNU C: Manuais (Manpages)
`glibc-doc-reference` | I:3.2 | 14764 | Biblioteca GNU C: Manual de referência em info, pdf e html (não-livre)
`libnss-mdns` | V:282, I:502 | 142 | Módulo NSS para resolução de nomes Multicast DNS
`libnss-ldapd` | V:8, I:16 | 131 | Módulo NSS para utilizar o LDAP como um serviço nomeador

- "O Guia do Administrador do Sistema Linux-PAM" em `libpam-doc` é essencial para aprender configuração do PAM.

- A secção "System Databases e Name Service Switch" em `glibc-doc-reference` é essencial para aprender a configuração do NSS.

| Nota
Pode ver uma lista mais extensa e atual pelo comando "`aptitude search 'libpam-|libnss-'`". O acrónimo NSS também pode significar "Network Security Service" o que é diferente de "Name Service Switch".

| Nota
PAM é a maneira mais básica de inicializar variáveis de ambiente para cada programa com o valor predefinido de todo o sistema.

Sob systemd, o pacote `libpam-systemd` é instalado para gerir os logins de utilizador ao registar as sessões de utilizador na hierarquia do grupo de control do `systemd` para logind. veja systemd-logind(8), logind.conf(5),e pam_systemd(8).

### 4.5.1. Ficheiros de configuração acedidos pelo PAM e NSS

Aqui estão alguns ficheiros de configuração notáveis acedidos pelo PAM e NSS.

Tabela 4.6. Lista de ficheiros de configuração acedidos pelo PAM e NSS

ficheiro de configuração | função
--- | ---
`/etc/pam.d/program_name` | defina a configuração do PAM para o programa "`nome_do_programa`"; veja pam(7) e pam.d(5)
`/etc/nsswitch.conf` | define a configuração NSS com a entrada para cada serviço. Veja nsswitch.conf(5)
`/etc/nologin` | limita o login de utilizador pelo módulo pam_nologin(8)
`/etc/securetty` | limita a tty ao acesso de root pelo módulo pam_securetty(8)
`/etc/security/access.conf` | define limites de acesso pelo módulo pam_access(8)
`/etc/security/group.conf` | define a restrição baseada em grupo pelo módulo pam_group(8)
`/etc/security/pam_env.conf` | define as variáveis de ambiente pelo módulo pam_env(8)
`/etc/environment` | define variáveis de ambiente adicionais pelo módulo pam_env(8) com o argumento "`readenv=1`"
`/etc/default/locale` | define o locale pelo módulo pam_env(8) com o argumento "`readenv=1 envfile=/etc/default/locale`" (Debian)
`/etc/security/limits.conf` | define restrição de recursos (ulimit, core, …) pelo módulo pam_linits(8)
`/etc/security/time.conf` | define a retenção de tempo pelo módulo pam_time(8)
`/etc/systemd/logind.conf` | define a configuração do gestor de login do `systemd` (veja logind.conf(5) e systemd-logind.service(8))

A limitação da seleção da palavra-passe é implementada pelos módulos do PAM, pam_unix(8) e pam_cracklib(8). Eles podem ser configurados com os argumentos deles.

| Dica
Os módulos PAM utilizam o sufixo "`.so`" para os nomes de ficheiros deles.

### 4.5.2. O moderno sistema de gestão centralizado

A moderna gestão de sistema centralizada pode ser implantada a utilizar o servidor centralizado Lightweight diretory Access Protocol (LDAP) para administrar muitos sistemas tipo-Unix e não-tipo-Unix na rede. A implementação de código aberto do Lightweight diretory Access Protocol é o Software OpenLDAP.

O servidor LDAP disponibiliza para o sistema Debian a informação de conta através do uso de PAM e NSS com os pacotes `libpam-ldapd` e `libnss-ldapd`. São necessárias várias acções para ativar isto (não utilizei esta configuração e o seguinte é puramente informação secundária. Por favor leia isto neste contexto.).

- Configura um servidor LDAP centralizado ao correr um programa como o daemon de LDAP autónomo slapd(8).

- Altera os ficheiros de configuração do PAM no diretório "`/etc/pam.d/`" para utilizar "`pam_ldap.so`" em vez do predefinido "`pam_unix.so`".

- Altera a configuração do NSS no ficheiro "`/etc/nsswitch.conf`" para usar "`ldap`" em vez da predefinição("`compat`" ou "`file`").

- Tem de fazer `libpam-ldapd` para usar a ligação SSL (ou TLS) para a segurança da palavra-passe.

- Pode fazer a `libnss-ldapd` usar ligação SSL (ou TLS) para assegurar a integridade dos dados à custa de maior sobrecarga da rede LDAP.

- Deve correr o nscd(8) localmente para pôr em cache quaisquer resultados de busca LDAP de modo a reduzir o tráfego de rede do LDAP.

Veja as documentações em nsswitch.conf(5), pam.conf(5), ldap.conf(5), e "`/usr/share/doc/libpam-doc/html/`" oferecidas pelo pacote `libpam-doc` e "`info libc 'Name Service Switch'`" oferecida pelo pacote `glibc-doc`.

De modo semelhante, pode configurar sistemas centralizados alternativos com outros métodos.

- Integração de utilizador e grupo com o sistema Windows.

  - Aceda a serviços de domínio Windows com os pacotes `winbind` e `libpam_winbind`.

  - Veja winbindd(8) e Integrar Redes MS Windows com Samba.

- Integração de utilizador e grupo com o sistema antigo tipo-Unix.

  - Acesso NIS (originalmente chamado YP) ou NIS+ pelo pacote `nis`.

  - Veja o Linux NIS(YP)/NYS/NIS+ HOWTO.

### 4.5.3. "Porque o su do GNU não suporta o grupo wheel"

Esta é a famosa frase no fundo da antiga página "`info su`" por Richard M. Stallman. Não se preocupe, o comando `su` atual em Debian utiliza PAM, portanto esse pode recadeiair a habilidade de utilizar `su` ao grupo `root` ao ativar a linha com "`pam_wheel.so`" em "`/etc/pam.d/su`".

### 4.5.4. Regras de palavra-passe rigorosas

A instalação do pacote `libpam-cracklib` permite-lhe forçar uma regra de palavra-passe mais rigorosa.

Num sistema GNOME típico que instala automaticamente o `libpam-gnome-keyring`, "`/etc/pam.d/common-password`" tem o seguinte aspeto:

    # here are the per-package modules (the "Primary" block)
    password	requisite			pam_cracklib.so retry=3 minlen=8 difok=3
    password	[success=1 default=ignore]	pam_unix.so obscure use_authtok try_first_pass yescrypt
    # here's the fallback if no module succeeds
    password	requisite			pam_deny.so
    # prime the stack with a positive return value if there isn't one already;
    # this avoids us returning an error just because nothing sets a success code
    # since the modules above will each just jump around
    password	required			pam_permit.so
    # and here are more per-package modules (the "Additional" block)
    password	optional	pam_gnome_keyring.so
    # end of pam-auth-update config

## 4.6. Segurança da autenticação

| Nota
A informação aqui pode não ser suficiente para as suas necessidades de segurança, mas deverá ser um bom começo.

### 4.6.1. Palavra-passe segura na Internet

Muitos serviços de transporte populares comunicam mensagens incluindo a a autenticação de palavra-passe em texto simples. É má ideia transmitir as palavras-passe em texto simples pela Internet onde podem ser interceptadas. Pode correr estes serviços sobre "Transport Layer Security" (TLS) ou o antecessor dele, "Secure Sockets Layer" (SSL) para assegurar toda a comunicação incluindo a palavra-passe pela encriptação.

Tabela 4.7. Lista de serviços e portos inseguros e seguros

nome do serviço inseguro | porto | nome do serviço seguro | porto
--- | --- | --- | ---
www (http) | 80 | https | 443
smtp (mail) | 25 | ssmtp (smtps) | 465
ftp-data | 20 | ftps-data | 989
ftp | 21 | ftps | 990
telnet | 23 | telnets | 992
imap2 | 143 | imaps | 993
pop3 | 110 | pop3s | 995
ldap | 389 | ldaps | 636

A encriptação custa tempo de CPU. Como uma alternativa amiga para o CPU, pode manter a comunicação em texto simples enquanto segura apenas a palavra-passe com um protocolo de autenticação de segurança como o "Authenticated Post Office Protocol" (APOP) para POP e "Challenge-Response Authentication Mechanism MD5" (CRAM-MD5) para SMTP e IMAP. (Para enviar mensagens de mail pela Internet para o seu servidor de mail a partir do seu cliente de mail, recentemente é popular utilizar o porto 587 para submissão de novas mensagens em vez do tradicional porto 25 do SMTP para evitar o bloqueio do porto 25 pelo provedor de Internet enquanto se autentica com CRAM-MD5.)

A autenticação tradicional baseada em palavra passe ainda sofre de problemas de segurança inerentes tais como a reutilização da palavra passe entre múltiplos sítios web. Veja outros métodos de autenticação para uma solução segura: Palavra passe de uma vez baseada em tempo (TOTP), 2º fator universal (U2F), Autenticação Web (WebAuthn, muito referido como "passkey" ou chave-passe)

### 4.6.2. Shell Segura

O programa Secure Shell (SSH) disponibiliza comunicações encriptadas e seguras entre duas máquinas sem confiança sobre uma rede insegura com a autenticação de segurança. Consiste no cliente OpenSSH, ssh(1) e no daemon OpenSSH, sshd(8). Este SSH pode ser utilizado como túnel de segurança para protocolos de comunicação inseguros como o POP e X pela Internet com a funcionalidade de reencaminhamento de portos.

O cliente tenta autenticar-se a si próprio a utilizar autenticação baseada na máquina, autenticação de chave pública, autenticação por resposta a desafio, ou autenticação por palavra-passe. O uso de autenticação de chave pública activa o login remoto sem-palavra-passe. Veja Secção 6.3, “O servidor de acesso remoto e utilitários (SSH)”.

### 4.6.3. Medidas de segurança extra para a Internet

Mesmo quando correr serviços seguros como o Secure Shell (SSH) e servidores de Protocolo de túnel ponto-para-ponto (PPTP), ainda existe hipótese de invasões que utilizam ataques de força bruta à palavra-passe, etc. a partir da Internet. A utilização de politicas de firewall (veja Secção 5.7, “Infraestrutura netfilter”) juntamente com as seguinte ferramentas de segurança podem melhorar a situação de segurança.

Tabela 4.8. Lista de ferramentas para disponibilizar medidas de segurança extra

pacote | popcon | tamanho | descrição
--- | --- | --- | ---
`knockd` | V:0.7, I:1.7 | 110 | pequeno daemon port-knock knockd(1) e cliente konck(1)
`fail2ban` | V:102, I:113 | 2191 | banir IPs que causam vários erros de autenticação
`libpam-shield` | V:0.05, I:0.05 | 115 | bloquear atacantes remotos que tentam adivinhar a palavra-passe

### 4.6.4. Tornar a palavra-passe do root segura

Para prevenir que pessoas acedam à sua máquina com privilégios de root, precisa de tomar as seguintes acções.

- Prevenir acesso físico ao dispositivo de armazenamento do sistema (HDD / SSD / ...)

- Bloquear UEFI/BIOS e impedir o arranque a partir de suportes amovíveis

- Definir palavra-passe para sessão interactiva do GRUB

- Bloquear o menu do GRUB de ser editado

Com acesso físico ao dispositivo de armazenamento do sistema, redefinir a palavra-passe é relativamente fácil com os seguintes passos.

1. Mova o dispositivo de armazenamento do sistema para um PC com UEFI/BIOS com arranque a partir de USB.

2. Arranque o sistema com uma média de salvamento (veja Secção 3.2.2, “Sistema de salvamento Linux live em USB”).

3. Montar a partição raiz com acesso de leitura/escrita.

4. Editar "`/etc/passwd`" na partição raiz e esvaziar a segunda entrada para a conta `root`.

Se tiver acesso de edição à entrada do menu do GRUB (veja Secção 3.1.2, “Estágio 2: o gestor de arranque”) `grub-rescue-pc` no momento do arranque, é ainda mais fácil com os seguintes passos.

1. Arrancar o sistema com o parâmetro de kernel alterado para algo como "`root=/dev/sda6 rw init=/bin/sh`".

2. Editar "`/etc/passwd`" e tornar a segunda entrada para a conta `root` vazia.

3. Reiniciar o sistema.

A shell de root do sistema está agora acessível sem palavra-passe.

| Nota

Após alguém ter acesso à shell de root, pode aceder a tudo no sistema e reiniciar quaisquer palavras-passe no sistema. Mais ainda, pode comprometer a palavra-passe para todas as contas de utilizadores a usar ferramentas de crack de palavra-passe por força bruta como os pacotes `john` e `crack` (veja Secção 9.5.10, “Segurança do sistema e verificação de integridade”). Esta palavra-passe descoberta pode levar a comprometer outros sistemas.

A única solução de software razoável para evitar estas preocupações é usar uma partição raiz encriptada por software (ou uma partição "`/etc`" a utilizar dm-crypt e initramfs (veja Secção 9.9, “Dicas de encriptação de dados”). Assim, vai necessitar sempre de palavra-passe para arrancar o sistema.

## 4.7. Outros controles de acesso

Existem outros controlos de acesso ao sistema para além da autenticação baseada em palavras-passe e das permissões de ficheiros.

| Nota
Ver Secção 9.4.16, “Tecla Alt-SysRq” para restringir a funcionalidade SAK (chave de atenção segura) do kernel.

### 4.7.1. Listas de controlo de acesso (ACLs)

As ACLs são um superconjunto das permissões regulares, conforme explicado em Secção 1.2.3, “Permissões do sistema de ficheiros”.

Encontramos ACLs em ação no ambiente de trabalho moderno. Quando um dispositivo de armazenamento USB formatado é montado automaticamente como, por exemplo, "`/media/penguin/USBSTICK`", um utilizador normal, o `pinguim`, pode executá-lo:

     $ cd /media/penguin
     $ ls -la
    total 16
    drwxr-x---+ 1 root    root    16 Jan 17 22:55 .
    drwxr-xr-x  1 root    root    28 Sep 17 19:03 ..
    drwxr-xr-x  1 penguin penguin 18 Jan  6 07:05 USBSTICK

"`+`" na 11ª coluna indica que as ACLs estão em ação. Sem ACLs, um utilizador normal, o `pinguim`, não deveria ser capaz de fazer uma lista como esta, uma vez que o `pinguim` não está no grupo de `raiz`. Você pode ver as ACLs como:

     $ getfacl .
    # file: .
    # owner: root
    # group: root
    user::rwx
    user:penguin:r-x
    group::---
    mask::r-x
    other::---

Aqui:

- "`user::rwx`", "`group::---`", e "`other::---`" correspondem às permissões normais de proprietário, grupo e outros.

- A ACL "`user:penguin:r-x`" permite que um utilizador normal, o `pinguim`, tenha permissões "`r-x`". Isso permite que "`ls -la`" liste o conteúdo do diretório.

- A ACL "`mask::r-x`" define o limite superior das permissões.

Consulte "Listas de Controlo de Acesso POSIX em Linux", acl(5), getfacl(1) e setfacl(1) para mais informações.

### 4.7.2. sudo

O sudo(8) é um programa desenhado para permitir a um administrador de sistema dar privilégios de root limitados a utilizadores e registar a atividade do root. O `sudo` necessita apenas da palavra-passe de um utilizador normal. Instale o pacote `sudo` e active-o ao definir opções em "`/etc/sudoers`". Veja um exemplo de configuração em "`/usr/share/doc/sudo/examples/sudoers`" e Secção 1.1.12, “Configuração do sudo”.

A minha utilização do `sudo` para o sistema de único utilizador (veja Secção 1.1.12, “Configuração do sudo”) destina-se a proteger-me da minha própria estupidez. Pessoalmente, Considero utilizar o `sudo` uma melhor alternativa do que utilizar o sistema a partir da conta de root a toda a hora. Por exemplo, o seguinte muda o dono de "`algum_ficheiro`" para "`meu_nome`".

    $ sudo chown my_name some_file

Claro que se conhecer a palavra-passe de root (como os utilizadores de sistemas Debian auto-instalados conhecem), qualquer comando pode ser executado sob root a partir da conta de qualquer utilizador a usar "`su -c`".

### 4.7.3. PolicyKit

PolicyKit é um componente do sistema operativo para controlar privilégios a nível global em sistemas operativos tipo-Unix.

Aplicações GUI mais recentes não são desenhadas para correr como processos privilegiados. Estas falam com os processos privilegiados através de PolicyKit para executar operações administrativas.

O PolicyKit limita tais operações a contas de utilizador pertencentes ao grupo `sudo` no sistema Debian.

Veja polkit(8).

### 4.7.4. Recadeiair acesso a alguns serviços de servidor

Para a segurança do sistema, é uma boa ideia desativar o máximo de programas de serviços possíveis. Isto torna-se crítico em servidores na rede. Ter servidores não utilizados, activados directamente como daemon ou via programa super-server, são considerados riscos de segurança.

Muito programas, como o sshd(8), utilizam controlos de acesso baseados no PAM. Existem muitas maneiras de restringir o acesso a alguns serviços de servidor.

- ficheiros de configuração: "`/etc/default/nome_do_programa`"

- Configuração Systemd de unidade de serviço para daemon

- PAM (Módulos de autenticação inseríveis)

- "`/etc/inetd.conf`" para super-server

- "`/etc/hosts.deny`" e "`/etc/hosts.allow`" para wrapper de TCP, tcpd(8)

- "`/etc/rpc.conf`" para RPC da Sun

- "`/etc/at.allow`" e "`/etc/at.deny`" para atd(8)

- "`/etc/cron.allow`" e "`/etc/cron.deny`" para crontab(1)

- Firewall de Rede da infraestrutura netfilter

Ver Secção 3.6, “Gestão do sistema”, Secção 4.5.1, “Ficheiros de configuração acedidos pelo PAM e NSS”, e Secção 5.7, “Infraestrutura netfilter”.

| Dica
os serviços Sun RPC necessitam estar ativos para NFS e outros programas baseados em RPC.

| Dica
Se tem problemas com acesso remoto num sistema Debian recente, comente configurações ofensivas tais como "`ALL: PARANOID`" em "`/etc/hosts.deny`" se existirem. (Mas tem que ter cuidado com os riscos de segurança envolvidos com este tipo de acção.)

### 4.7.5. Caraterísticas de segurança do Linux

O kernel do Linux evoluiu e suporta caraterísticas de segurança que não se encontram nas implementações tradicionais do UNIX.

O Linux suporta atributos alargados que estendem os atributos UNIX tradicionais (ver xattr(7)).

O Linux divide os privilégios tradicionalmente associados ao super utilizador em unidades distintas, conhecidas como capacidades(7), que podem ser ativadas e desativadas independentemente. As capacidades são um atributo por sub-processo desde a versão 2.2 do kernel.

A estrutura do Módulo de Segurança do Linux (LSM) fornece um mecanismo para várias verificações de segurança serem agarradas por novas extensões do kernel. Por exemplo:

- AppArmor

- Linux com segurança reforçada (SELinux)

- Smack (Controlo de Acesso Obrigatório Simplificado Kernel)

- Tomoyo Linux

Uma vez que estas extensões podem apertar mais o modelo de privilégios do que as políticas normais do modelo de segurança tipo Unix, até o poder de root pode ser restringido. Aconselha-se a ler o documento da estrutura do Módulo de Segurança Linux (LSM) em kernel.org.

Os namespaces Linux envolvem um recurso global do sistema numa abstração que faz parecer aos processos dentro do namespace que têm a sua própria instância isolada do recurso global. As alterações ao recurso global são visíveis para outros processos que são membros do espaço de nomes, mas são invisíveis para outros processos. Desde a versão 5.6 do kernel, existem 8 tipos de espaços de nomes (veja namespaces(7), unshare(1), nsenter(1)).

A partir da Debian 11 Bullseye (2021), a Debian usa uma hierarquia de cgroups unificada (a.k.a. cgroups-v2).

Exemplos de utilização de namespaces com cgroups para isolar os seus processos e permitir o controlo de recursos:

- Systemd. Ver Secção 3.3.1, “init do Systemd”.

- Sandbox environment. Ver Secção 7.7, “Sandbox”.

- Contentores Linux como o Docker, LXC. Ver Secção 9.11, “Sistema virtualizado”.

Estas funcionalidades não podem ser realizadas por Secção 4.1, “Autenticação normal de Unix”. Estes tópicos avançados estão, na sua maioria, fora do âmbito deste documento introdutório.

Capítulo 3. A inicialização do sistema |  | Capítulo 5. Configuração de rede