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?
/{,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.
Este tópico foi fechado automaticamente 3 dias depois da última resposta. Novas respostas não são mais permitidas.