## 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.