[pkg-apparmor] Bug#1030153: Bug#1030153: complaining

Antoine Beaupré anarcat at debian.org
Wed Feb 1 15:00:06 GMT 2023


On 2023-01-31 23:57:04, Christian Boltz wrote:
> Hello,
>
> Am Dienstag, 31. Januar 2023, 19:20:38 CET schrieb Antoine Beaupré:
>> so something is happening with apparmor here. it looks like profile
>> are "piling up" in some way, with something like this:
>> 
>> /usr/sbin/sshd//null-/usr/bin/bash//null-/usr/bin/sudo//null-/usr/bin/
>> apt//null-/usr/bin/dash//null-/usr/bin/etckeeper//null-/etc/etckeeper/
>> pre-install.d/50uncommitted-changes//null-/usr/bin/etckeeper//null-/us
>> r/bin/perl
>
> That means sshd executed /usr/bin/bash (without having an execute rule), 
> and bash executed /usr/bin/sudo, which executed /usr/bin/apt, and so on.
>
> I'm somewhat surprised about that because the upstream profile for sshd 
> has the following rule since Dec 3 2016 :
>
>   /{usr/,}bin/bash     Uxr,
>
> This rule should allow to execute /bin/bash and /usr/bin/bash in 
> unconfined mode (= without AppArmor restrictions) - and therefore should 
> also avoid the long chain you see.
>
> However, your log looks like your profile does not allow executing 
> /usr/bin/bash.
>
> Now I wonder - does your sshd profile lack this line/rule?
> (If in doubt, please attach the complete profile.)

Okay, this is interesting. In the current state, the server has no file
in /etc/apparmor.d/usr.sbin.sshd at all. The apparmor package doesn't
ship such a file.

When I purged `apparmor` package, I still had a bunch of files in
/etc/apparmor.d and I'm not sure where those were coming from. Here's
the commit where I purged them manually before reinstalling apparmor:

commit 6ee1bc96eca9b7b94c1d17bdc41108be0fca3dcb
Author: Antoine Beaupré <anarcat at debian.org>
Date:   Tue Jan 31 13:44:46 2023 -0500

    saving uncommitted changes in /etc prior to apt run

 .etckeeper                                         |   1 -
 apparmor.d/abstractions/libvirt-lxc                | 121 ----------
 apparmor.d/abstractions/libvirt-qemu               | 259 ---------------------
 apparmor.d/abstractions/tor                        |  33 ---
 apparmor.d/bin.netstat                             |  41 ----
 apparmor.d/disable/torbrowser.start-tor-browser    |   1 -
 apparmor.d/disable/usr.bin.tcpdump                 |   1 -
 apparmor.d/etc.cron.daily.logrotate                |  57 -----
 apparmor.d/etc.cron.daily.slocate.cron             |  26 ---
 apparmor.d/etc.cron.daily.tmpwatch                 |  23 --
 apparmor.d/libvirt/TEMPLATE.lxc                    |  15 --
 apparmor.d/libvirt/TEMPLATE.qemu                   |   9 -
 .../libvirt-123003cb-fe9c-4afa-beef-ca3a32510061   |  11 -
 .../libvirt-55a7efd5-53cd-469a-bf33-b088e716a435   |  11 -
 ...virt-55a7efd5-53cd-469a-bf33-b088e716a435.files |  17 --
 .../libvirt-8bfd965a-9bb2-4a9c-bf2e-4dae08c027cd   |  11 -
 .../libvirt-a419db66-07ad-4a7a-a8a5-898c003e841a   |  11 -
 .../libvirt-a7d08ac4-7a5e-4bb0-89c4-3eed13c476bc   |  11 -
 .../libvirt-efd1e136-2f85-4356-a7c1-60f6cb502306   |  11 -
 apparmor.d/local/abstractions/libvirt-lxc          |   0
 apparmor.d/local/abstractions/libvirt-qemu         |   0
 apparmor.d/local/gst_plugin_scanner                |   2 -
 apparmor.d/local/sbin.dhclient                     |   0
 apparmor.d/local/system_tor                        |   2 -
 apparmor.d/local/torbrowser.start-tor-browser      |   2 -
 apparmor.d/local/usr.bin.chromium-browser          |   2 -
 apparmor.d/local/usr.bin.freshclam                 |   2 -
 apparmor.d/local/usr.bin.man                       |   0
 apparmor.d/local/usr.bin.tcpdump                   |   0
 apparmor.d/local/usr.lib.dovecot.anvil             |   2 -
 apparmor.d/local/usr.lib.dovecot.auth              |   2 -
 apparmor.d/local/usr.lib.dovecot.config            |   2 -
 apparmor.d/local/usr.lib.dovecot.deliver           |   2 -
 apparmor.d/local/usr.lib.dovecot.dict              |   2 -
 apparmor.d/local/usr.lib.dovecot.dovecot-auth      |   2 -
 apparmor.d/local/usr.lib.dovecot.dovecot-lda       |   2 -
 apparmor.d/local/usr.lib.dovecot.imap              |   2 -
 apparmor.d/local/usr.lib.dovecot.imap-login        |   2 -
 apparmor.d/local/usr.lib.dovecot.lmtp              |   2 -
 apparmor.d/local/usr.lib.dovecot.log               |   2 -
 apparmor.d/local/usr.lib.dovecot.managesieve       |   2 -
 apparmor.d/local/usr.lib.dovecot.managesieve-login |   2 -
 apparmor.d/local/usr.lib.dovecot.pop3              |   2 -
 apparmor.d/local/usr.lib.dovecot.pop3-login        |   2 -
 apparmor.d/local/usr.lib.dovecot.ssl-params        |   2 -
 apparmor.d/local/usr.lib.libvirt.virt-aa-helper    |   0
 apparmor.d/local/usr.sbin.chronyd                  |   0
 apparmor.d/local/usr.sbin.dovecot                  |   2 -
 apparmor.d/local/usr.sbin.libvirtd                 |   0
 apparmor.d/local/usr.sbin.mysqld                   |   2 -
 apparmor.d/local/usr.sbin.tcpdump                  |   2 -
 apparmor.d/local/usr.sbin.unbound                  |   0
 apparmor.d/sbin.dhclient                           | 111 ---------
 apparmor.d/sbin.dhcpcd                             |  45 ----
 apparmor.d/sbin.portmap                            |  25 --
 apparmor.d/sbin.resmgrd                            |  32 ---
 apparmor.d/sbin.rpc.lockd                          |  16 --
 apparmor.d/sbin.rpc.statd                          |  29 ---
 apparmor.d/system_tor                              |  25 --
 apparmor.d/usr.NX.bin.nxclient                     |  37 ---
 apparmor.d/usr.bin.acroread                        |  60 -----
 apparmor.d/usr.bin.apropos                         |  26 ---
 apparmor.d/usr.bin.evolution-2.10                  | 156 -------------
 apparmor.d/usr.bin.fam                             |  22 --
 apparmor.d/usr.bin.freshclam                       |  47 ----
 apparmor.d/usr.bin.gaim                            |  67 ------
 apparmor.d/usr.bin.man                             | 113 ---------
 apparmor.d/usr.bin.mlmmj-bounce                    |  22 --
 apparmor.d/usr.bin.mlmmj-maintd                    |  36 ---
 apparmor.d/usr.bin.mlmmj-make-ml.sh                |  44 ----
 apparmor.d/usr.bin.mlmmj-process                   |  29 ---
 apparmor.d/usr.bin.mlmmj-recieve                   |  20 --
 apparmor.d/usr.bin.mlmmj-send                      |  25 --
 apparmor.d/usr.bin.mlmmj-sub                       |  28 ---
 apparmor.d/usr.bin.mlmmj-unsub                     |  27 ---
 apparmor.d/usr.bin.opera                           |  75 ------
 apparmor.d/usr.bin.passwd                          |  35 ---
 apparmor.d/usr.bin.procmail                        |  41 ----
 apparmor.d/usr.bin.skype                           |  80 -------
 apparmor.d/usr.bin.spamc                           |  20 --
 apparmor.d/usr.bin.svnserve                        |  33 ---
 apparmor.d/usr.bin.tcpdump                         |  69 ------
 apparmor.d/usr.bin.wireshark                       |  44 ----
 apparmor.d/usr.bin.xfs                             |  24 --
 apparmor.d/usr.lib.GConf.2.gconfd-2                |  34 ---
 apparmor.d/usr.lib.RealPlayer10.realplay           |  50 ----
 apparmor.d/usr.lib.bonobo.bonobo-activation-server |  25 --
 ...volution-data-server.evolution-data-server-1.10 |  40 ----
 apparmor.d/usr.lib.firefox.firefox                 | 128 ----------
 apparmor.d/usr.lib.firefox.firefox.sh              |  19 --
 apparmor.d/usr.lib.firefox.mozilla-xremote-client  |  21 --
 apparmor.d/usr.lib.libvirt.virt-aa-helper          |  76 ------
 apparmor.d/usr.lib.postfix.anvil                   |  28 ---
 apparmor.d/usr.lib.postfix.bounce                  |  36 ---
 apparmor.d/usr.lib.postfix.cleanup                 |  33 ---
 apparmor.d/usr.lib.postfix.discard                 |  18 --
 apparmor.d/usr.lib.postfix.error                   |  20 --
 apparmor.d/usr.lib.postfix.flush                   |  44 ----
 apparmor.d/usr.lib.postfix.lmtp                    |  20 --
 apparmor.d/usr.lib.postfix.local                   |  45 ----
 apparmor.d/usr.lib.postfix.master                  |  47 ----
 apparmor.d/usr.lib.postfix.nqmgr                   |  47 ----
 apparmor.d/usr.lib.postfix.oqmgr                   |  20 --
 apparmor.d/usr.lib.postfix.pickup                  |  25 --
 apparmor.d/usr.lib.postfix.pipe                    |  17 --
 apparmor.d/usr.lib.postfix.proxymap                |  25 --
 apparmor.d/usr.lib.postfix.qmgr                    |  46 ----
 apparmor.d/usr.lib.postfix.qmqpd                   |  20 --
 apparmor.d/usr.lib.postfix.scache                  |  23 --
 apparmor.d/usr.lib.postfix.showq                   |  44 ----
 apparmor.d/usr.lib.postfix.smtp                    |  48 ----
 apparmor.d/usr.lib.postfix.smtpd                   |  63 -----
 apparmor.d/usr.lib.postfix.spawn                   |  20 --
 apparmor.d/usr.lib.postfix.tlsmgr                  |  25 --
 apparmor.d/usr.lib.postfix.trivial-rewrite         |  26 ---
 apparmor.d/usr.lib.postfix.verify                  |  20 --
 apparmor.d/usr.lib.postfix.virtual                 |  26 ---
 apparmor.d/usr.lib64.GConf.2.gconfd-2              |  34 ---
 apparmor.d/usr.sbin.chronyd                        |  85 -------
 apparmor.d/usr.sbin.dhcpd                          |  37 ---
 apparmor.d/usr.sbin.httpd2-prefork                 | 179 --------------
 apparmor.d/usr.sbin.imapd                          |  24 --
 apparmor.d/usr.sbin.in.fingerd                     |  23 --
 apparmor.d/usr.sbin.in.ftpd                        |  38 ---
 apparmor.d/usr.sbin.in.ntalkd                      |  20 --
 apparmor.d/usr.sbin.ipop2d                         |  24 --
 apparmor.d/usr.sbin.ipop3d                         |  24 --
 apparmor.d/usr.sbin.libvirtd                       | 145 ------------
 apparmor.d/usr.sbin.lighttpd                       |  64 -----
 apparmor.d/usr.sbin.mariadbd                       |  15 --
 apparmor.d/usr.sbin.oidentd                        |  30 ---
 apparmor.d/usr.sbin.popper                         |  25 --
 apparmor.d/usr.sbin.postalias                      |  35 ---
 apparmor.d/usr.sbin.postdrop                       |  34 ---
 apparmor.d/usr.sbin.postmap                        |  25 --
 apparmor.d/usr.sbin.postqueue                      |  33 ---
 apparmor.d/usr.sbin.sendmail                       |  93 --------
 apparmor.d/usr.sbin.sendmail.postfix               |  51 ----
 apparmor.d/usr.sbin.sendmail.sendmail              |  48 ----
 apparmor.d/usr.sbin.spamd                          |  40 ----
 apparmor.d/usr.sbin.squid                          |  63 -----
 apparmor.d/usr.sbin.sshd                           | 180 --------------
 apparmor.d/usr.sbin.unbound                        |  56 -----
 apparmor.d/usr.sbin.useradd                        |  50 ----
 apparmor.d/usr.sbin.userdel                        |  51 ----
 apparmor.d/usr.sbin.vsftpd                         |  35 ---
 apparmor.d/usr.sbin.xinetd                         |  71 ------
 147 files changed, 4992 deletions(-)

I *think* those are some "extra" profiles I might have manually deployed
at some point.

Now that I dig in the apparmor-profiles, I found a
/usr/share/apparmor/extra-profiles/ directory and there *is* a
usr.sbin.sshd profile in there. So I'm not sure what happened here,
maybe I deployed those by hand but they never got updated?

I also am a little confused by apparmor-profiles shipping an
"extra-profiles" directory *and* having at the same time an
apparmor-profiles-extra that only ships a handful of profiles... It's
all very confusing...

Here's that old profile that was causing problems:

# ------------------------------------------------------------------
#
#    Copyright (C) 2002-2005 Novell/SUSE
#    Copyright (C) 2012 Canonical Ltd.
#
#    This program is free software; you can redistribute it and/or
#    modify it under the terms of version 2 of the GNU General Public
#    License published by the Free Software Foundation.
#
# ------------------------------------------------------------------
# will need to revalidate this profile once we finish re-architecting
# the change_hat patch.
#
# vim:syntax=apparmor

#include <tunables/global>

/usr/sbin/sshd flags=(complain) {
  #include <abstractions/authentication>
  #include <abstractions/base>
  #include <abstractions/consoles>
  #include <abstractions/nameservice>
  #include <abstractions/wutmp>
  #include <abstractions/openssl>

  capability sys_chroot,
  capability sys_tty_config,
  capability net_bind_service,
  capability chown,
  capability fowner,
  capability kill,
  capability setgid,
  capability setuid,
  capability audit_control,
  capability audit_write,

  /dev/ptmx rw,
  /dev/urandom r,
  /etc/default/locale r,
  /etc/environment r,
  /etc/hosts.allow r,
  /etc/hosts.deny r,
  /etc/modules.conf r,
  /etc/ssh/* r,
  /proc/*/oom_adj rw,
  /proc/*/oom_score_adj rw,
  /usr/sbin/sshd mrix,
  /var/log/btmp rw,
  /{,var/}run w,
  /{,var/}run/sshd{,.init}.pid wl,

  @{PROC}/[0-9]*/fd/ r,
  @{PROC}/[0-9]*/loginuid w,

# should only be here for use in non-change-hat openssh
# duplicated from EXEC hat
  /bin/ash rUx,
  /bin/bash rUx,
  /bin/bash2 rUx,
  /bin/bsh rUx,
  /bin/csh rUx,
  /bin/dash rUx,
  /bin/ksh rUx,
  /bin/sh rUx,
  /bin/tcsh rUx,
  /bin/zsh rUx,
  /bin/zsh4 rUx,
  /sbin/nologin rUx,

# Call passwd for password change when expired
#  /usr/bin/passwd Px,


# stuff duplicated from PRIVSEP_MONITOR
  @{HOME}/.ssh/authorized_keys{,2}         r,

  /dev/pts/[0-9]* rw,
  /etc/ssh/moduli r,
  @{PROC}/[0-9]*/mounts r,

# duplicated from AUTHENTICATED
  /etc/motd r,
  /{,var/}run/motd r,
  /tmp/ssh-*/agent.[0-9]* rwl,

  /tmp/ssh-*[0-9]*/ w,

#
# default subprofile for when sshd has authenticated the user
#
  ^EXEC flags=(complain) {
    #include <abstractions/base>

    /bin/ash Ux,
    /bin/bash Ux,
    /bin/bash2 Ux,
    /bin/bsh Ux,
    /bin/csh Ux,
    /bin/dash Ux,
    /bin/ksh Ux,
    /bin/sh Ux,
    /bin/tcsh Ux,
    /bin/zsh Ux,
    /bin/zsh4 Ux,
    /sbin/nologin Ux,

# for debugging
#  /dev/pts/[0-9]*                                              rw,
  }

#
# subprofile for handling network input (privilege seperated child)
#
  ^PRIVSEP flags=(complain) {
    #include <abstractions/base>
    #include <abstractions/nameservice>

    capability sys_chroot,
    capability setuid,
    capability setgid,

# for debugging
#  /dev/pts/[0-9]*                                              rw,
  }

#
# subprofile that handles authentication requests from the privilege
# seperated child
#
  ^PRIVSEP_MONITOR flags=(complain) {
    #include <abstractions/authentication>
    #include <abstractions/base>
    #include <abstractions/nameservice>
    #include <abstractions/wutmp>


    capability setuid,
    capability setgid,
    capability chown,

    @{HOME}/.ssh/authorized_keys{,2}         r,
    /dev/ptmx rw,
    /dev/pts/[0-9]* rw,
    /dev/urandom r,
    /etc/hosts.allow r,
    /etc/hosts.deny r,
    /etc/ssh/moduli r,
    @{PROC}/[0-9]*/mounts r,

# for debugging
#  /dev/pts/[0-9]*                                              rw,
  }

#
# subprofile for post-authentication period until the user's shell is spawned
#
  ^AUTHENTICATED flags=(complain) {
    #include <abstractions/authentication>
    #include <abstractions/consoles>
    #include <abstractions/nameservice>
    #include <abstractions/wutmp>

    capability sys_tty_config,
    capability setgid,
    capability setuid,

    /dev/log  w,
    /dev/ptmx rw,
    /etc/default/passwd r,
    /etc/localtime r,
    /etc/login.defs r,
    /etc/motd r,
    /{,var/}run/motd r,
    /tmp/ssh-*/agent.[0-9]* rwl,
    /tmp/ssh-*[0-9]*/ w,

# for debugging
#  /dev/pts/[0-9]*                                              rw,
  }
}

-- 
Il n'existe aucune limite sacrée ou non à l'action de l'homme dans
l'univers. Depuis nos origines nous avons le choix: être aveuglé par
la vérité ou coudre nos paupières.
                        - [no one is innocent]



More information about the pkg-apparmor-team mailing list