Ir diretamente para o conteúdo

Definições de cookies

Escolha que tipos de cookies permite. Pode alterar a sua escolha a qualquer momento em Definições de cookies, no fundo de cada página. Política de privacidade

Necessários

Sempre ativos

Necessários para iniciar sessão, manter o seu carrinho e memorizar as suas escolhas. Estão sempre ativos.

Que cookies?
  • weboke_sessie, weboke_klant, weboke_remember: a sua sessão e manter a sessão iniciada
  • weboke_basket: o seu carrinho
  • wkBtwIncl: mostrar preços com ou sem IVA
  • wok_cookies: a sua escolha de cookies, 12 meses

Mede que anúncio leva a uma visita ou encomenda, para não pagarmos por anúncios que não dão resultado.

Que cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), até 90 dias
  • OpenAI Ads, anúncios no ChatGPT
  • wok_aff: através de que parceiro chegou até nós (programa de afiliados), 60 dias

4,6

País e idioma

Cada país tem o seu próprio site, com os preços e o IVA desse país.

Ver

Utilizadores, grupos e permissões de ficheiros

Módulo 3: Utilizadores, permissões e sudo · Tempo de leitura: 12 minutos

Objetivo de aprendizagem: Depois desta lição, saberá criar e consultar utilizadores e grupos, ler as permissões de um ficheiro ou pasta em ls -l e defini-las corretamente com chmod e chown sem abrir tudo.

Conceitos-chave: root (UID 0), utilizador comum, utilizador de sistema, /etc/passwd, /etc/shadow, grupo, adduser, id, rwx, proprietário, grupo, outros, octal (644, 755, 600), chmod, chown, umask, setuid, 777

Todos são um número

O Linux foi concebido desde o início para vários utilizadores numa só máquina. Cada processo em execução corre em nome de um utilizador e cada ficheiro tem um proprietário. Para o sistema, um utilizador é sobretudo um número, o UID:

  • root tem o UID 0. O root pode tudo: ler e alterar qualquer ficheiro, parar qualquer serviço, criar qualquer utilizador. Não existe um "tem a certeza?".
  • Utilizadores comuns, como anna, recebem no Debian e no Ubuntu um UID a partir de 1000. Podem escrever na sua própria pasta pessoal e pouco mais.
  • Utilizadores de sistema têm um número baixo e, normalmente, nem palavra-passe nem shell. Os serviços correm sob um utilizador deste tipo: o nginx sob www-data, o PostgreSQL sob postgres. Se um desses serviços for comprometido, o intruso fica apenas com as permissões desse utilizador, não com as do root.

Para ver quem é, use id:

anna@web1:~$ id
uid=1000(anna) gid=1000(anna) groups=1000(anna),27(sudo),100(users)

A Anna tem o UID 1000, um grupo próprio anna, e pertence também aos grupos sudo e users.

Onde estão os utilizadores

A lista de utilizadores está em /etc/passwd, uma linha por utilizador:

anna@web1:~$ grep -E '^(root|www-data|anna):' /etc/passwd
root:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
anna:x:1000:1000:Anna,,,:/home/anna:/bin/bash

Os campos, separados por dois pontos: nome, x (a palavra-passe está noutro sítio), UID, grupo principal, descrição, pasta pessoal, shell. Em www-data, a shell é /usr/sbin/nologin: não é possível iniciar sessão.

As palavras-passe propriamente ditas estão guardadas, cifradas (em hash), em /etc/shadow. Só o root pode ler esse ficheiro. Um ! ou * no início do campo da palavra-passe significa: não é possível iniciar sessão com palavra-passe. É assim que o root está bloqueado por predefinição no Ubuntu, e no Debian se não tiver indicado uma palavra-passe de root durante a instalação.

Criar utilizadores e grupos

No Debian e no Ubuntu utiliza o prático adduser:

root@web1:~# adduser anna
info: Adding user `anna' ...
info: Adding new group `anna' (1000) ...
info: Adding new user `anna' (1000) with group `anna (1000)' ...
info: Creating home directory `/home/anna' ...
info: Copying files from `/etc/skel' ...
New password:
Retype new password:
...

O adduser cria o utilizador, um grupo próprio com o mesmo nome e uma pasta pessoal, e pede uma palavra-passe. Existe também o useradd, de nível mais baixo (e que é o comando habitual no AlmaLinux e no Rocky Linux), mas sem opções faz menos: não define palavra-passe e, em alguns sistemas, não cria pasta pessoal.

Um grupo é uma forma de dar permissões a vários utilizadores de uma só vez. Para adicionar um utilizador a um grupo:

root@web1:~# adduser anna www-data
root@web1:~# usermod -aG www-data anna     # o mesmo, funciona em todo o lado

Atenção ao -a em usermod: sem -a, substitui todos os grupos adicionais do utilizador apenas por este. Um novo grupo só passa a valer depois de voltar a iniciar sessão.

Para bloquear uma conta sem a eliminar (por exemplo, de um antigo colega):

root@web1:~# usermod -L -e 1 jan

-L bloqueia a palavra-passe, -e 1 faz a conta expirar. Atenção: uma palavra-passe bloqueada nem sempre impede o acesso com uma chave SSH. Remova, por isso, também as chaves em /home/jan/.ssh/authorized_keys (lição 2.3); uma conta expirada (-e 1) é recusada pelo sshd.

Ler permissões

anna@web1:~$ ls -l /var/www/example.com
total 12
-rw-r--r-- 1 anna     www-data  1520 Nov  9 10:12 index.html
-rw-r----- 1 anna     www-data   412 Nov  9 10:14 config.php
drwxr-xr-x 2 anna     www-data  4096 Nov  9 10:15 images
drwxrwxr-x 2 www-data www-data  4096 Nov  9 10:20 uploads

O primeiro bloco de dez caracteres é a chave de tudo:

  • Carácter 1: o tipo. - é um ficheiro comum, d uma pasta (diretório), l uma ligação simbólica (symlink).
  • Caracteres 2 a 4: o que o proprietário pode fazer.
  • Caracteres 5 a 7: o que o grupo pode fazer.
  • Caracteres 8 a 10: o que os outros (todos os restantes) podem fazer.

Seguem-se o número de ligações, o proprietário, o grupo, o tamanho e a data.

Num ficheiro, as letras significam:

LetraSignificado num ficheiro
rler
walterar
xexecutar como programa ou script

E numa pasta, algo ligeiramente diferente:

LetraSignificado numa pasta
rlistar os nomes dos ficheiros na pasta
wcriar, mudar o nome e eliminar ficheiros na pasta
xentrar na pasta e abrir os ficheiros que contém

Este último ponto surpreende muitas pessoas. Sem x numa pasta, não consegue chegar aos ficheiros que ela contém, mesmo que esses ficheiros sejam legíveis. E quem tem w numa pasta pode eliminar ficheiros nela, mesmo que pertençam a outra pessoa.

No exemplo: index.html pode ser lido por todos; config.php (com a palavra-passe da base de dados) pode ser lido e alterado pela Anna, o grupo www-data (ou seja, o servidor web) só o pode ler, e os restantes nada. Em uploads o servidor web pode escrever, porque é aí que ficam os carregamentos dos visitantes.

Permissões em número

As permissões são muitas vezes escritas como três algarismos, o número octal. Cada letra tem um valor: r = 4, w = 2, x = 1. Some por grupo:

PermissõesNúmeroUtilização
rw-r--r--644ficheiro comum que todos podem ler
rw-r-----640ficheiro para o proprietário e o grupo, como uma configuração com uma palavra-passe
rw-------600ficheiro secreto, como authorized_keys ou uma chave privada
rwxr-xr-x755pasta ou programa que todos podem utilizar
rwx------700pasta privada, como ~/.ssh

Alterar permissões: chmod e chown

anna@web1:~$ chmod 640 /var/www/example.com/config.php
anna@web1:~$ chmod g+w /var/www/example.com/uploads
root@web1:~# chown anna:www-data /var/www/example.com/config.php

chmod altera as permissões, com um número ou com letras (u, g, o para proprietário, grupo e outros; + ou - e a letra). chown eigenaar:groep altera o proprietário e o grupo; só o root o pode fazer. Com -R, ambos atuam sobre uma pasta inteira, e é aí que muitas vezes as coisas correm mal: chmod -R 644 numa pasta torna todas as subpastas inutilizáveis, porque as pastas precisam de x. Para uma árvore inteira, prefira find:

root@web1:~# find /var/www/example.com -type d -exec chmod 755 {} +
root@web1:~# find /var/www/example.com -type f -exec chmod 644 {} +

Nunca 777

"Não funcionava, por isso pus 777." 777 significa: todos no servidor podem ler, alterar e executar isto. Se algum dia um único serviço ou site no seu servidor for comprometido, o intruso pode escrever em tudo o que tenha 777, incluindo os seus ficheiros PHP. O verdadeiro problema é quase sempre o proprietário ou o grupo: dê ao servidor web, através do grupo, exatamente a permissão de que precisa, e apenas na pasta onde é necessária.

Permissões predefinidas e bits especiais

Os novos ficheiros recebem as suas permissões através da umask. Com a umask habitual 022, os novos ficheiros ficam com 644 e as novas pastas com 755. Pode ver a sua umask com o comando umask.

Por vezes vê um s em vez de um x, como em /usr/bin/passwd (-rwsr-xr-x). É o bit setuid: o programa corre com as permissões do proprietário (root), mesmo que seja iniciado por um utilizador comum. Isso é necessário para alguns programas de sistema, mas nunca o defina num script por conta própria. Um ficheiro setuid inesperado é um sinal conhecido de intrusão; com find / -perm -4000 -type f 2>/dev/null vê todos.

No AlmaLinux e no Rocky Linux

Aí, adduser é outro nome para useradd; utilize useradd -m anna e depois passwd anna. Os grupos adicionam-se com usermod -aG. O SELinux acrescenta uma camada extra às permissões desta lição: um ficheiro com as permissões corretas pode ainda assim ser recusado se tiver a etiqueta SELinux errada (ls -Z mostra-a).

Resumo

  • Cada utilizador tem um UID; o root (0) pode tudo, os serviços correm sob utilizadores de sistema próprios, sem shell.
  • Os utilizadores estão em /etc/passwd, os hashes das palavras-passe em /etc/shadow. Crie utilizadores com adduser e adicione grupos com usermod -aG.
  • ls -l mostra o tipo, as permissões do proprietário, do grupo e dos outros e, a seguir, o proprietário e o grupo. Numa pasta, x significa entrar e w criar e eliminar ficheiros.
  • Números habituais: 644 e 755 para conteúdo público, 640 para configuração com segredos, 600 e 700 para conteúdo privado. Nunca 777.
  • Utilize find para definir permissões numa árvore inteira; esteja atento a ficheiros setuid.

Questionário

1. O que significa -rw-r----- num ficheiro com o proprietário anna e o grupo www-data?



2. O que acontece se uma pasta tiver as permissões drw-r--r-- (ou seja, nenhum x)?



3. Executa usermod -G www-data anna (sem -a). Qual é a consequência?



4. Um plugin não consegue escrever em /var/www/example.com/uploads. Qual é a melhor solução?



5. Porque é que o nginx corre sob o utilizador www-data e não sob root?



Exercício

Exercício Z3.1: Ler permissões. Abra o ficheiro de exemplo rechten-1.txt: a saída de id para três utilizadores e de ls -l numa pasta web. Responda, para cada pergunta, quem pode fazer o quê (por exemplo: "o servidor web consegue alterar config.php?", "que ficheiro tem permissões demasiado abertas?", "que número corresponde a .env?"). O programa compara as suas respostas com a chave fixa e explica o porquê de cada uma.

Exercício Z3.1: Ler permissões

Ficheiro deste exercício: rechten-1.txt










O que preenche e o que encontramos não ficam guardados. O seu navegador memoriza as suas respostas e se concluiu o exercício com sucesso. Se tiver sessão iniciada, guardamos apenas que concluiu o exercício (quase) com sucesso em Os meus cursos; aí também o pode eliminar.

Para saber mais

Os passos descritos nestes artigos aplicam-se aos pacotes de alojamento e aos VPS da WebOké; noutros fornecedores funciona de forma semelhante.

Um momento…

Configurar os seus domínios

Para cada domínio, defina os servidores de nomes, a ligação ao seu alojamento e quem fica como titular.

A carregar os seus domínios…