Propsota de artigo: Forçando permissões em arquivos de pacote

Gustavo Noronha Silva kov em debian.org
Sexta Dezembro 10 01:32:11 BRST 2004


Forçando permissões em arquivos de pacote
Gustavo Noronha Silva <kov em debian.org>

O Debian, como eu costumo sempre dizer e perceber nas apresentações
que faço e nas conversas que tenho, tem uma enorme quantidade de
infra-estrutura que permite um enorme controle do sistema pelo
administrador sem, no entanto, quebrar a coerência do sistema de
empacotamento.

Vou falar agora do "dpkg-statoverride", uma ferramenta que permite ao
administrador forçar um determinado esquema de permissões para os
arquivos instalados por pacotes. Como eu acabo de dizer, essa
ferramenta é destinada principalmente a administradores de sistema,
mas é usada em alguns casos específicos pelos scripts de mantenedor
dos pacotes (veja o que diz[0] a política Debian para maiores
informações).

Suponhamos que você queira tornar um binário do seu sistema executável
com poderes de root por um determinado grupo de usuários[1] e impedir
que todos os outros usuários o executem. Você pode informar ao sistema
de pacotes para torná-lo suid root e deixá-lo executável apenas para
usuários de um determinado grupo registrando um "override" assim:

# addgroup pacoteiros
Adding group `pacoteiros' (1013)...
Concluído.
# adduser kov pacoteiros
Acrescentando usuário kov ao grupo pacoteiros...
Concluído.
# dpkg-statoverride --update --add root pacoteiros 4754 /usr/bin/aptitude
# ls -lh /usr/bin/aptitude
-rwsr-xr--  1 root pacoteiros 1,4M 2004-09-28 15:44 /usr/bin/aptitude

Com isso agora o usuário kov pode executar /usr/bin/aptitude como se
fosse root e ninguém mais pode executar esse binário. *NÃO* façam isso
em casa, é perigoso =D. Falta saber como listar e remover um
override. Bem, os overrides são guardados em um arquivo texto chamado
/var/lib/dpkg/statoverride. Você pode listar e remover o override de
um arquivo ou diretório assim:

# dpkg-statoverride --list /usr/bin/aptitude
root pacoteiros 4754 /usr/bin/aptitude
# dpkg-statoverride --remove /usr/bin/aptitude
# dpkg-statoverride --list /usr/bin/aptitude
#

Aí vem o cara e me pergunta: "Mas não era mais fácil usar chmod
direto?". Ao qual eu respondo: sim. A grande vantagem de ensinar ao
dpkg quais são as permissões que você quer para um arquivo de pacote é
que essas preferências são mantidas nos upgrades de pacote. Uma coisa
importante a ser notada, no entanto, é que arquivos que não são
instalados por pacotes, mas gerados em tempo de instalação ou execução
não podem usar os serviços do dpkg-statoverride. Isso inclui os
arquivos do /dev, por exemplo, e alguns arquivos do /etc.

[0] http://www.debian.org/doc/debian-policy/ch-files.html#s10.9.1
[1] É provável que existam formas mais elegantes e funcionais de 
    implementar isso, esse exemplo está sendo usado somente para
    demonstração das funcionalidades. Não faça a mesma burrada que eu
    fiz dando, na prática, poder total de root pra um usuário =D.

Copyright 2004 Gustavo Noronha Silva

Este artigo é software livre; você pode redistribuí-lo e/ou
modificá-lo sob os termos da Licença Pública Geral GNU conforme
publicada pela Free Software Foundation; tanto a versão 2 da Licença,
como (a seu critério) qualquer versão posterior.

-- 
kov em debian.org: Gustavo Noronha <http://people.debian.org/~kov>
Debian:  <http://www.debian.org>  *  <http://www.debian-br.org>




Mais detalhes sobre a lista de discussão Debian-zine