#include profile example flags=(attach_disconnected,mediate_deleted) { #include # Capabilities file, signal (send) set=(kill,term,int,hup,cont), # S6-Overlay /init ix, /bin/** ix, /usr/bin/** ix, /run/{s6,s6-rc*,service}/** ix, /package/** ix, /command/** ix, /etc/services.d/** rwix, /etc/cont-init.d/** rwix, /etc/cont-finish.d/** rwix, /run/{,**} rwk, /dev/tty rw, # Bashio /usr/lib/bashio/** ix, /tmp/** rwk, # Access to options.json and other files within your addon /data/** rw, # Start new profile for service /usr/bin/my_program cx -> my_program, profile my_program flags=(attach_disconnected,mediate_deleted) { #include # Receive signals from S6-Overlay signal (receive) peer=*_example, # Access to options.json and other files within your addon /data/** rw, # Access to mapped volumes specified in config.json /share/** rw, # Access required for service functionality # Note: List was built by doing the following: # 1. Add what is obviously needed based on what is in the script # 2. Add `complain` as a flag to this profile temporarily and run the addon # 3. Review the audit log with `journalctl _TRANSPORT="audit" -g 'apparmor="ALLOWED"'` and add other access as needed # Remember to remove the `complain` flag when you are done /usr/bin/my_program r, /bin/bash rix, /bin/echo ix, /etc/passwd r, /dev/tty rw, } }