web-dev-qa-db-fra.com

AppArmor bloque la configuration de la journalisation via iptables pour le compte invité - Comment activer?

Pour enregistrer l'utilisation d'Internet (URL visitées) de mon compte invité local , j'ai posé la question Surveiller les sites Web visités du compte invité via n'importe quel navigateur et après avoir attribué au compte invité l'UID fixe 499 (- === -) et configuré la règle iptables ci-dessous, je n'obtiens pas le code recherché consigner les messages dans /var/log/kern.log mais un message de apparmor indiquant qu'il a bloqué la tentative de journalisation.

Comment dire à AppArmor d'autoriser le compte invité (nom aléatoire, mais UID fixe) à consigner son utilisation du réseau via iptables?

La règle iptables que j'ai mise en place:

Sudo iptables -A OUTPUT -m owner --uid-owner 499 -j LOG --log-prefix='[GUEST INTERNET ACCESS] '

Un exemple de ligne des messages qui apparaissent dans /var/log/kern.log à la place (reformaté pour une meilleure lisibilité):

Nov 18 11:19:22 wolf-pack kernel: 
 [ 1030.063374] audit: type=1400 audit(1447841962.731:164): 
   apparmor="DENIED" 
   operation="connect"
   profile="/usr/lib/lightdm/lightdm-guest-session"
   name="/run/systemd/journal/stdout"
   pid=4693
   comm="dbus-daemon"
   requested_mask="w"
   denied_mask="w"
   fsuid=499
   ouid=0

Informations supplémentaires sur le système:

$ uname -a
Linux wolf-pack 4.2.0-18-generic #22-Ubuntu SMP Fri Nov 6 18:25:50 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 15.10
Release:    15.10
Codename:   wily

$ unity --version
unity 7.3.2

$ apt-cache policy apparmor | grep Installed
  Installed: 2.10-0ubuntu6

$ iptables --version
iptables v1.4.21

La sortie de Sudo apparmor_status:

apparmor module is loaded.
23 profiles are loaded.
23 profiles are in enforce mode.
   /sbin/dhclient
   /usr/bin/evince
   /usr/bin/evince-previewer
   /usr/bin/evince-previewer//sanitized_helper
   /usr/bin/evince-thumbnailer
   /usr/bin/evince-thumbnailer//sanitized_helper
   /usr/bin/evince//sanitized_helper
   /usr/lib/NetworkManager/nm-dhcp-client.action
   /usr/lib/NetworkManager/nm-dhcp-helper
   /usr/lib/connman/scripts/dhclient-script
   /usr/lib/cups/backend/cups-pdf
   /usr/lib/lightdm/lightdm-guest-session
   /usr/lib/lightdm/lightdm-guest-session//chromium
   /usr/lib/telepathy/mission-control-5
   /usr/lib/telepathy/telepathy-*
   /usr/lib/telepathy/telepathy-*//pxgsettings
   /usr/lib/telepathy/telepathy-*//sanitized_helper
   /usr/lib/telepathy/telepathy-ofono
   /usr/sbin/cups-browsed
   /usr/sbin/cupsd
   /usr/sbin/cupsd//third_party
   /usr/sbin/ippusbxd
   /usr/sbin/tcpdump
0 profiles are in complain mode.
6 processes have profiles defined.
6 processes are in enforce mode.
   /sbin/dhclient (1138) 
   /usr/lib/telepathy/mission-control-5 (4700) 
   /usr/sbin/cups-browsed (777) 
   /usr/sbin/cupsd (5626) 
   /usr/sbin/cupsd (5651) 
   /usr/sbin/cupsd (5652) 
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
3
Byte Commander

Je pense que votre intention est claire ici et dans l'autre question à laquelle vous avez lié: enregistrer les URL des sites Web visités par toute personne utilisant n'importe quelle application en tant qu'utilisateur invité.

Il n'est pas correct de suggérer la journalisation iptables pour réaliser cette tâche. iptables (sans certaines extensions obscures et limitant les performances) fonctionne sur le protocole IP, pas au niveau de l'application.

J'ai également vu des suggestions dans les URL suggérées en tant que commentaires - les répondants ont suggéré de capturer uniquement les paquets avec des drapeaux SYN (nouvelles connexions). Cela aussi résulte d'un malentendu décrit ci-dessus.

La façon de réaliser ce que vous voulez est:

  1. Installez un proxy Web (de préférence léger, tel que tinyproxy).
  2. Ajoutez des règles iptables qui redirigent les connexions sortantes établies uniquement par un utilisateur spécifique vers les ports 80 443/tcp vers le proxy local.

Ce que j'avais en tête est décrit ici (pas mon article). De cette façon, vous obtenez un journal de proxy Web contenant toutes les requêtes HTTP enregistrées. Cependant, vous n'obtiendrez pas de journaux liés au trafic protégé par SSL, ce qui est une bonne chose.

Pour réitérer: les URL ne font pas partie de l'IP ou de la structure d'en-tête TCP, donc quelque chose qui fonctionne au niveau IP/TCP ne pourra pas vous montrer ces données, sauf s'il en a TCP dissector (tcpdump/cableshark sont capables de le faire mais pas iptables seuls).

2
Marcin Kaminski