#
#    AppArmor tlsdate profile for Debian GNU/Linux
#
#    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.
#

#include <tunables/global>
#include <tunables/multiarch.d>
/usr/bin/tlsdate {
  #include <abstractions/consoles>
  #include <abstractions/ssl_certs>

  capability sys_time,
  capability setgid,
  capability setuid,
  capability sys_chroot,

  # IPv4 TCP
  network inet stream,
  # IPv4 UDP for DNS resolution
  network inet dgram,
  # IPv6 TCP
  network inet6 stream,
  # IPv6 UDP
  network inet6 dgram,

  # Required for gethostbyname
  /etc/resolv.conf r,
  /run/resolvconf/resolv.conf r,
  /etc/nsswitch.conf r,
  /etc/localtime r,
  /etc/nsswitch.conf r,
  /etc/hosts r,
  /etc/host.conf r,

  # Allow reading public certs but not private keys
  /etc/ssl/certs/* r,
  /usr/share/ca-certificates/*/** r,
  
  # Allow reading of /etc/tlsdate/
  /etc/tlsdate/*/** r,

  # Required for getpwnam
  /etc/passwd r,
  /etc/group r,
  /proc/sys/kernel/ngroups_max r,

  # Allow reading of libs and /tmp
  /etc/ld.so.cache r,

  # Random number generation requires these two
  /dev/random r,
  /dev/urandom r,

  # Allow mapping of shared libraries
  /lib{,32,64}/* rm,
  /usr/lib/* rm,
  /lib/@{multiarch}/* rm,
  /usr/lib/@{multiarch}/* rm,

  # We'll allow tlsdate to write a new root to chroot into
  /tmp/ r,
  owner /tmp/tlsdate_*/ rw,

  # We'll allow tlsdate to exec tlsdate-helper
  /usr/bin/tlsdate-helper ixm,
  /usr/bin/tlsdate ixm,
}

/usr/bin/tlsdate-helper {
  #include <abstractions/consoles>
  #include <abstractions/ssl_certs>

  capability sys_time,
  capability setgid,
  capability setuid,
  capability sys_chroot,

  # IPv4 TCP
  network inet stream,
  # IPv4 UDP for DNS resolution
  network inet dgram,
  # IPv6 TCP
  network inet6 stream,
  # IPv6 UDP
  network inet6 dgram,

  # Required for gethostbyname
  /etc/resolv.conf r,
  /run/resolvconf/resolv.conf r,
  /etc/nsswitch.conf r,
  /etc/localtime r,
  /etc/nsswitch.conf r,
  /etc/hosts r,
  /etc/host.conf r,

  # Allow reading public certs but not private keys
  /etc/ssl/certs/* r,
  /usr/share/ca-certificates/*/** r,

  # Allow reading of /etc/tlsdate/
  /etc/tlsdate/*/** r,

  # Required for getpwnam
  /etc/passwd r,
  /etc/group r,
  /proc/sys/kernel/ngroups_max r,

  # Allow reading of libs and /tmp
  /etc/ld.so.cache r,

  # Random number generation requires these two
  /dev/random r,
  /dev/urandom r,

  # Allow mapping of shared libraries
  /lib{,32,64}/* rm,
  /usr/lib/* rm,
  /lib/@{multiarch}/* rm,
  /usr/lib/@{multiarch}/* rm,

  # We'll allow tlsdate to write a new root to chroot into
  /tmp/ r,
  owner /tmp/tlsdate_*/ rw,
}

/usr/sbin/tlsdated {
  #include <abstractions/consoles>
  #include <abstractions/ssl_certs>

  capability sys_time,
  capability setgid,
  capability setuid,
  capability sys_chroot,

  # IPv4 TCP
  network inet stream,
  # IPv4 UDP for DNS resolution
  network inet dgram,
  # IPv6 TCP
  network inet6 stream,
  # IPv6 UDP
  network inet6 dgram,

  # Required for gethostbyname
  /etc/resolv.conf r,
  /etc/nsswitch.conf r,
  /etc/localtime r,
  /etc/nsswitch.conf r,
  /etc/hosts r,
  /etc/host.conf r,

  # Allow reading public certs but not private keys
  /etc/ssl/certs/* r,
  /usr/share/ca-certificates/*/** r,

  # Allow reading of /etc/tlsdate/
  /etc/tlsdate/*/** r,
  /etc/tlsdate/tlsdated.conf r,

  # Required for getpwnam
  /etc/passwd r,
  /etc/group r,
  /proc/sys/kernel/ngroups_max r,

  # tlsdated looks into proc for answers
  /proc/meminfo r,

  # Allow reading of libs and /tmp
  /etc/ld.so.cache r,

  # Random number generation requires these two
  /dev/random r,
  /dev/urandom r,

  # RTC
  /dev/rtc0 rw,
  /dev/rtc1 rw,

  # Allow mapping of shared libraries
  /lib{,32,64}/* rm,
  /usr/lib/* rm,
  /lib/@{multiarch}/* rm,
  /usr/lib/@{multiarch}/* rm,

  # We'll allow tlsdate to write a new root to chroot into
  /tmp/ r,
  owner /tmp/tlsdate_*/ rw,

  # We'll allow tlsdated to cache the time here
  owner /var/cache/tlsdated/* rw,
  # We'll allow the unprivileged helper to read the time
  /var/cache/tlsdated/* r,

  # We'll allow tlsdated to exec tlsdate-helper
  /usr/bin/tlsdate-helper ixm,
  /usr/bin/tlsdate ixm,
}
