web-dev-qa-db-ja.com

AppArmorは、ゲストアカウントのiptablesを介したログ設定をブロックします-有効にする方法

ローカルゲストアカウントのインターネット使用状況(訪問したURL)を記録するには、質問 ゲストアカウントの訪問済みWebサイトを監視します任意のブラウザを介して 、ゲストアカウントに固定UID 499を割り当て、以下のiptablesルールを設定した後、 /var/log/kern.logで必要なログメッセージを取得していませんが、apparmorによるログ記録試行をブロックしたというメッセージを取得しています。

ゲストアカウント(ランダムな名前だが固定UID)がiptablesを介してそのネットワーク使用を記録することを許可するようにAppArmorに指示する方法

私がセットアップしたiptablesルール:

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

代わりに/var/log/kern.logに表示されるメッセージの1行の例(読みやすくするために再フォーマットされています):

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

詳細なシステム情報:

$ 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

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

こことあなたがリンクした他の質問であなたの意図は明確だと思います:ゲストユーザーとしてアプリケーションを使用している人がアクセスしたウェブサイトのURLを記録します。

このタスクを達成するためにiptablesロギングを提案することは正しくありません。 iptables(不明瞭でパフォーマンスを制限する拡張機能なし)は、アプリケーションレベルではなく、IPプロトコルで動作します。

また、コメントとして提案されたURLで提案を見ました-応答者はSYNフラグ(新しい接続)を持つパケットのみをキャプチャすることを提案しました。それも、上記の誤解の結果です。

目的を達成する方法は次のとおりです。

  1. Webプロキシ(tinyproxyなどの軽量が望ましい)をインストールします。
  2. 特定のユーザーのみが行った発信接続をポート80,443/tcpにリダイレクトするiptablesルールをローカルプロキシに追加します。

私が念頭に置いていたのは、 ここ (私の投稿ではなく)である。これにより、すべてのHTTP要求が記録されたWebプロキシログを取得できます。ただし、SSLで保護されたトラフィックに関連するログは取得されません。これは良いことです。

繰り返しますが、URLはIPまたはTCPヘッダー構造の一部ではありません。したがって、IP/TCPレベルで動作するものは、何らかのデータがない限り、このデータを表示できません。 TCP dissector(tcpdump/wiresharkはこれを行うことができますが、iptablesだけではできません)。

2
Marcin Kaminski