Como colocar o "dhclient" no apparmor?

No Debian/Devuan o serviço “dhclient” (/sbin/dhclient (que mexe com a conexão com a internet)) não tem nenhum profile no apparmor, percebi que no Ubuntu esse mesmo serviço está protegido com um profile.
Tentei copiar esse profile e aplicá-lo no Devuan, porém não foi possível, como faço para colocar o dhclient no apparmor no Debian/Devuan?

Enfim, depois de quase 1 ano tentei fazer isso denovo, e deu certo (eu acho). Devuan 4.

(Debian 9 / Devuan 2 para baixo vêm sem o apparmor por padrão, então é necessário configurar mais coisas).

Vamos lá:

Passo 1: Encontrar o profile do dhclient.

Por algum motivo o Debian/vuan vem sem o profile do dhclient, mesmo com o pacote apparmor-profiles-extra.

Mas isso não é necessáriamente um problema, pois o Ubuntu tem esse profile. Basta fazer uma cópia do arquivo que fica em: /etc/apparmor.d/sbin.dhclient do Ubuntu pro Debian/vuan.

Para quem não quer instalar o Ubuntu só para isso, o conteúdo do arquivo está

aqui

vim:syntax=apparmor

#include <tunables/global>

/{,usr/}sbin/dhclient flags=(attach_disconnected) {
#include <abstractions/base>
#include <abstractions/nameservice>
#include <abstractions/openssl>

capability net_bind_service,
capability net_raw,
capability dac_override,
capability net_admin,

network packet,
network raw,

@{PROC}/[0-9]/net/ r,
@{PROC}/[0-9]
/net/** r,

/{,usr/}sbin/dhclient mr,

LP: #1197484 and LP: #1202203 - why is this needed? :frowning:

/{,usr/}bin/bash mr,

/etc/dhclient.conf r,
/etc/dhcp/ r,
/etc/dhcp/** r,

/var/lib/dhcp{,3}/dhclient* lrw,
/{,var/}run/dhclient*.pid lrw,
/{,var/}run/dhclient*.lease* lrw,

NetworkManager

/{,var/}run/nmconf r,
/{,var/}run/sendsigs.omit.d/network-manager.dhclient
.pid lrw,
/var/lib/NetworkManager/dhclient*.conf lrw,
/var/lib/NetworkManager/dhclient*.lease* lrw,
signal (receive) peer=/usr/sbin/NetworkManager,
ptrace (readby) peer=/usr/sbin/NetworkManager,

connman

/{,var/}run/connman/dhclient*.pid lrw,
/{,var/}run/connman/dhclient*.leases lrw,

synce-hal

/usr/share/synce-hal/dhclient.conf r,

if there is a custom script, let it run unconfined

/etc/dhcp/dhclient-script Uxr,

The dhclient-script shell script sources other shell scripts rather than

executing them, so we can’t just use a separate profile for dhclient-script

with ‘Uxr’ on the hook scripts. However, for the long-running dhclient3

daemon to run arbitrary code via /sbin/dhclient-script, it would need to be

able to subvert dhclient-script or write to the hooks.d directories. As

such, if the dhclient3 daemon is subverted, this effectively limits it to

only being able to run the hooks scripts.

/{,usr/}sbin/dhclient-script Uxr,

Run the ELF executables under their own unrestricted profiles

/usr/lib/NetworkManager/nm-dhcp-client.action Pxrm,
/usr/lib/connman/scripts/dhclient-script Pxrm,

Support the new executable helper from NetworkManager.

/usr/lib/NetworkManager/nm-dhcp-helper Pxrm,
signal (receive) peer=/usr/lib/NetworkManager/nm-dhcp-helper,

Site-specific additions and overrides. See local/README for details.

#include <local/sbin.dhclient>
}

/usr/lib/NetworkManager/nm-dhcp-client.action {
#include <abstractions/base>
#include <abstractions/dbus>
/usr/lib/NetworkManager/nm-dhcp-client.action mr,

/var/lib/NetworkManager/*lease r,
signal (receive) peer=/usr/sbin/NetworkManager,
ptrace (readby) peer=/usr/sbin/NetworkManager,
network inet dgram,
network inet6 dgram,
}

/usr/lib/NetworkManager/nm-dhcp-helper {
#include <abstractions/base>
#include <abstractions/dbus>
/usr/lib/NetworkManager/nm-dhcp-helper mr,

/run/NetworkManager/private-dhcp rw,
signal (send) peer=/sbin/dhclient,

/var/lib/NetworkManager/*lease r,
signal (receive) peer=/usr/sbin/NetworkManager,
ptrace (readby) peer=/usr/sbin/NetworkManager,
network inet dgram,
network inet6 dgram,
}

/usr/lib/connman/scripts/dhclient-script {
#include <abstractions/base>
#include <abstractions/dbus>
/usr/lib/connman/scripts/dhclient-script mr,
network inet dgram,
network inet6 dgram,
}
.


Feito isso, o próximo passo é criar um arquivo com esse comando: touch /etc/apparmor.d/local/sbin.dhclient

(Para falar a verdade, essa parte eu não entendi direito. Mas pelo que parece, tem que ter um arquivo VAZIO com o mesmo nome na subpasta local.

Sem o arquivo, dá um erro de falta de include file.

Gentoo Forums :: View topic - AppArmor aa-genprof fails to find include file)


Após isso, é necessário colocar o dhclient no modo enforce.

Para isso, o pacote apparmor-utils tem que estar instalado.

Por algum motivo, o Debian 10 / Devuan 3 mudou o comportamento do su, e só é possóvel utilizar o comando que precisamos usando su - ou sudo. Mas sudo é ruim - postei e saí correndo.

O comando é: aa-enforce sbin.dhclient

Feito, dhclient enjaulado no apparmor.


Para confirmar que está funcionando, usamos o comando aa-unconfined, que retorna: /sbin/dhclient confined by '/{,usr/}sbin/dhclient (enforce)' (está funcionando).


P: Ok, ok, mas para que tudo isso?
R: Para quem não gosta do network-manager, a maneira mais fácil de conectar numa rede configurada em DHCP é com o comando dhclient, que por padrão vem sem a segurança do apparmor.

1 curtida

Este tópico foi fechado automaticamente 3 dias depois da última resposta. Novas respostas não são mais permitidas.