## O que são POSIX Capabilities?
Introduzidas no kernel 2.1, as _capabilities_ fragmentam os privilégios do root em um conjunto de flags (p. ex. `CAP_SYS_TIME`, `CAP_NET_RAW`) que podem ser concedidas isoladamente. Assim, um binário passa a ter **apenas** os direitos necessários à sua função, e nada além disso.
#### Exemplo prático: “domando” o `ping`
1. **Remova o bit SUID**:
```bash
sudo chmod u-s /bin/ping
```
2. **Teste novamente** — o comando falhará:
```
ping: icmp open socket: Operation not permitted
```
3. **Conceda apenas `CAP_NET_RAW`**:
```bash
sudo setcap cap_net_raw=ep /bin/ping
```
> Agora qualquer usuário pode executar `ping` sem privilégios de root.
```bash
getcap /bin/ping
# /bin/ping = cap_net_raw+ep
```
#### Descobrindo quais _capabilities_ um processo requer
O módulo **`capable_discovery`** intercepta chamadas a `cap_capable()` e loga quais _capabilities_ estão sendo solicitadas — útil para mapear requisitos mínimos de serviços:
```bash
sudo modprobe capable_discovery
tail -f /var/log/messages | grep ping
# capability 21=CAP_SYS_ADMIN for ping
# capability 13=CAP_NET_RAW for ping
# capability 7 =CAP_SETUID for ping
```
Interpretando a saída, percebe-se que só `CAP_NET_RAW` é essencial; as demais podem ser omitidas.
#### Rodando o **Samba** sem root
1. **Crie um usuário dedicado e ajuste permissões de diretórios:**
```bash
sudo groupadd samba
sudo adduser samba -g samba
sudo chown samba:samba -R /var/{run,log,cache,lib}/samba /etc/samba
```
2. **Mude a posse dos binários e remova execução para outros:**
```bash
sudo chown samba:samba /usr/sbin/{smbd,nmbd}
sudo chmod g-x,o-x /usr/sbin/{smbd,nmbd}
sudo chmod u+s /usr/sbin/{smbd,nmbd}
```
3. **Atribua apenas as _capabilities_ necessárias**:
```bash
sudo setcap cap_net_bind_service,cap_sys_resource=ep /usr/sbin/smbd
sudo setcap cap_net_bind_service=ep /usr/sbin/nmbd
```
4. **Inicie o serviço como o novo usuário** e verifique:
```bash
sudo -u samba /usr/sbin/smbd -D
sudo -u samba /usr/sbin/nmbd -D
ps -u samba | grep smbd
```
Limitar privilégios com POSIX Capabilities **reduz drasticamente** o impacto de um eventual comprometimento, pois cada serviço opera apenas dentro do seu “quadrado” de permissões. Embora mapear e atribuir as _capabilities_ mínimas exija algum trabalho, a tendência é que esse recurso se torne padrão nas distribuições populares.