No Ubuntu, outra forma de prisão é apparmor !
É um módulo de segurança Linux (LSM) de controle de acesso obrigatório baseado em caminho (MAC). No Ubuntu 10.04, ele é ativado por padrão para serviços selecionados.
A documentação é bastante fragmentada. A documentação do Ubuntu pode ser ... melhor. Mesmo a documentação a montante não apresenta uma boa introdução. Os estados da página de referência :
WARNING: this document is in a very early stage of creation it is not in any shape yet to be used as a reference manual
No entanto, começar é relativamente fácil. Um perfil do AppAmor corresponde a um caminho do executável, por ex. %código%. A regra padrão de um perfil é negar (o que é ótimo), se nada mais corresponder. As regras de negação de perfil correspondem sempre antes de regras de permissão. Um perfil vazio nega tudo.
Perfis para binários diferentes são armazenados em /var/www/slave/slave
. /etc/apparmor.d
exibe quais perfis estão ativos, quais estão no modo enforce (bom) ou somente no modo de reclamação (somente mensagens de log são impressas).
Criar um novo perfil para apparmor_status
é apenas:
aa-genprof /var/www/slave/slave
Inicie em outro terminal /var/www/slave/slave
e faça um caso de uso típico. Depois que terminar, pressione /var/www/slave/slave
e s
no terminal anterior.
Agora, f
contém um arquivo de perfil /etc/apparmor.d
. Se o escravo faz alguma bifurcação, o perfil é apenas muito esparso - todos os acessos das crianças são ignorados.
De qualquer forma, o perfil agora está ativo no modo de imposição e você pode apenas acionar iterativamente as ações no escravo e assistir var.www.slave.slave
às violações. Em outro terminal, você edita o arquivo de perfil e executa tail -f /var/log/messages
após cada alteração. O log exibe então:
audit(1308348253.465:3586): operation="profile_replace" pid=25186 name="/var/www/slave/slave"
Uma violação se parece com:
operation="open" pid=24583 parent=24061 profile="/var/www/slave/slave"
requested_mask="::r" denied_mask="::r" fsuid=10004 ouid=10000 name="/var/www/slave/config"
Uma regra de perfil como:
/var/www/slave/config r,
permitiria o acesso no futuro.
Tudo isso é muito simples.
O AppAmor é compatível com regras de rede com granularidade grossa, por exemplo
network inet stream,
Sem essa regra, não é possível acessar a Internet (incluindo o host local), ou seja, com essa regra, você pode usar aa-enforce var.www.slave.slave
para regras mais refinadas (por exemplo, com base no uid do escravo).
Outro fragmento de documentação contém algo sobre os sub-perfis para scripts php.
O esqueleto do perfil do var.www.slave.slave se parece com:
#include <tunables/global>
/var/www/gapapp/gap.wt {
#include <abstractions/base>
network inet stream,
/var/www/slave/config r,
/var/www/slave/exehelper/foo ix,
/var/www/slave/db/* rw,
...
}
Com esse perfil, o escravo não pode mais chamar utilitários como iptables
ou mail
.