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