# ------------------------------------------------------------------ # # Copyright (C) 2016 Canonical Ltd. # Copyright (C) 2018 Software in the Public Interest, Inc. # # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. # # Authors: Jonathan Davies # Bryan Quigley # Rene Engelhard # # ------------------------------------------------------------------ # This profile should enable the average LibreOffice user to get their # work done while blocking some advanced usage # Namely not tested and likely not working : embedded plugins, # Using the LibreOffice SDK and other development tasks # Everything else should be working #Defines all common supported file formats #Some obscure ones we're excluded (mostly input) #Generic #.txt @{libreoffice_ext} = [tT][xX][tT] #All the open document format @{libreoffice_ext} += {,f,F}[oO][dDtT][tTsSpPbBgGfF] #.xml and xsl @{libreoffice_ext} += [xX][mMsS][lL] #.pdf @{libreoffice_ext} += [pP][dD][fF] #Unified office format @{libreoffice_ext} += [uU][oO][fFtTsSpP] #(x)htm(l) @{libreoffice_ext} += {,x,X}[hH][tT][mM]{,l,L} #.epub @{libreoffice_ext} += [eE][pP][uU][bB] #.ps (printing to file) @{libreoffice_ext} += [pP][sS] #Images @{libreoffice_ext} += [jJ][pP][gG] @{libreoffice_ext} += [jJ][pP][eE][gG] @{libreoffice_ext} += [pP][nN][gG] @{libreoffice_ext} += [sS][vV][gG] @{libreoffice_ext} += [sS][vV][gG][zZ]99251 @{libreoffice_ext} += [tT][iI][fF] @{libreoffice_ext} += [tT][iI][fF][fF] #Writer @{libreoffice_ext} += [dD][oO][cCtT]{,x,X} @{libreoffice_ext} += [rR][tT][fF] #Calc @{libreoffice_ext} += [xX][lL][sStT]{,x,X,m,M} @{libreoffice_ext} += [xX][lL][wW] #.dif dbf @{libreoffice_ext} += [dD][iIbB][fF] #.tsv .csv @{libreoffice_ext} += [cCtT][sS][vV] @{libreoffice_ext} += [sS][lL][kK] #Impress/Draw @{libreoffice_ext} += [pP][pP][tTsS]{,x,X} @{libreoffice_ext} += [pP][oO][tT]{,m,M} #Photoshop @{libreoffice_ext} += [pP][sS][dD] #Math @{libreoffice_ext} += [mM][mM][lL] @{libo_user_dirs} = @{HOME} /mnt /media include profile libreoffice-soffice /usr/lib/libreoffice/program/soffice.bin flags=(complain) { include include include include include include include include include include include include # GnuPG1 only... # include include include include include include include #List directories for file browser / r, /**/ r, owner @{libo_user_dirs}/**/ rw, #allow creating directories that we own owner @{libo_user_dirs}/**~lock.* rw, #lock file support owner @{libo_user_dirs}/**.@{libreoffice_ext} rwk, #Open files rw with the right exts owner @{libo_user_dirs}/{,**/}lu??????????{,?}.tmp rwk, #Temporary file used when saving owner @{libo_user_dirs}/{,**/}.directory r, #Read directory settings on KDE # Settings /etc/libreoffice/ r, /etc/libreoffice/** r, /etc/cups/ppd/*.ppd r, /etc/xml/catalog r, #exporting to .xhtml, for libxml2 /proc/*/status r, owner @{HOME}/.config/libreoffice{,dev}/** rwk, owner @{HOME}/.config/soffice.binrc rwl -> @{HOME}/.config/#[0-9]*, owner @{HOME}/.config/soffice.binrc.* rwl -> @{HOME}/.config/#[0-9]*, owner @{HOME}/.config/soffice.binrc.lock rwk, owner @{HOME}/.cache/fontconfig/** rw, owner @{HOME}/.config/gtk-???/bookmarks r, #Make bookmarks work owner /{,var/}run/user/*/dconf/user rw, owner @{HOME}/.config/dconf/user r, # allow schema to be read /usr/share/glib-*/schemas/ r, /usr/share/glib-*/schemas/** r, # bluetooth send to network bluetooth, /{usr/,}bin/sh rmix, /{usr/,}bin/bash rmix, /{usr/,}bin/dash rmix, /{usr/,}bin/rm rmix, #deleting /tmp/psp1534203998 (printing to file) /usr/bin/bluetooth-sendto rmPUx, /usr/bin/lpr rmPUx, /usr/bin/paperconf rmix, /usr/bin/gpgconf rmix, /usr/bin/gpg rmCx -> gpg, /usr/bin/gpgsm rmCx -> gpg, /usr/bin/gpa rix, /usr/bin/seahorse rix, /usr/bin/kgpg rix, /usr/bin/kleopatra rix, /dev/tty rw, /usr/lib{,32,64}/@{multiarch}/gstreamer???/gstreamer-???/gst-plugin-scanner rmPUx, owner @{HOME}/.cache/gstreamer-???/** rw, unix peer=(addr=@/tmp/.ICE-unix/* label=unconfined), #Gstreamer doesn't work without this /usr/lib{,32,64}/jvm/ r, /usr/lib{,32,64}/jvm/** r, /usr/lib{,32,64}/jvm/**/jre/bin/java mix, /usr/lib{,32,64}/jvm/**/bin/java mix, # should be included in the jvm/** above but there it is # a symlink, so apparmor still doesn't allow it... /etc/java-??-openjdk/security/java.security r, /usr/lib/libreoffice/** rw, /usr/lib/libreoffice/**.so m, /usr/lib/libreoffice/program/soffice.bin mix, /usr/lib/libreoffice/program/xpdfimport px, /usr/lib/libreoffice/program/senddoc px, /usr/bin/xdg-open rPUx, /usr/share/java/**.jar r, /usr/share/hunspell/ r, /usr/share/hunspell/** r, /usr/share/hyphen/ r, /usr/share/hyphen/** r, /usr/share/mythes/ r, /usr/share/mythes/** r, /usr/share/liblangtag/ r, /usr/share/liblangtag/** r, /usr/share/libreoffice/ r, /usr/share/libreoffice/** r, /usr/share/yelp-xsl/xslt/mallard/** r, /usr/share/libexttextcat/* r, /usr/share/icu/** r, /usr/share/locale-bundle/* r, /var/spool/libreoffice/ r, /var/spool/libreoffice/** rw, /var/cache/fontconfig/ rw, #Likely moving to abstractions in the future owner @{HOME}/.icons/*/cursors/* r, /etc/fstab r, # Solid::DeviceNotifier::instance() TODO: deny? /usr/share/*-fonts/conf.avail/*.conf r, /usr/share/fonts-config/conf.avail/*.conf r, /{,var/}run/udev/data/+usb:* r, # Solid::Device::listFromQuery() /{,var/}run/udev/data/{c,b}*:* r, # Solid::Device::description(), Solid::Device::listFromQuery() @{PROC}/sys/kernel/random/boot_id r, # KRecentDocument::add() -> QSysInfo::bootUniqueId() #To avoid "Unable to create io-slave." for file dialog owner /{,var/}run/user/[0-9]*/#[0-9]* rw, #For KIO IO::Slave::createSlave() owner /{,var/}run/user/[0-9]*/soffice.bin*.slave-socket wl -> /{,var/}run/user/[0-9]*/#[0-9]*, owner @{HOME}/.mozilla/firefox/profiles.ini r, owner @{HOME}/.mozilla/firefox/*/secmod.db r, # firefox < 58 owner @{HOME}/.mozilla/firefox/*/cert8.db r, # firefox >= 58 owner @{HOME}/.mozilla/firefox/*/cert9.db r, owner @{HOME}/.local/share/user-places.xbel r, # there is abstractions/gnupg but that's just for gpg1... profile gpg flags=(complain) { include /usr/bin/gpgconf rm, /usr/bin/gpg rm, /usr/bin/gpgsm rm, owner @{HOME}/.gnupg/* r, owner @{HOME}/.gnupg/random_seed rk, } # probably should become a subprofile like gpg above, but then it doesn't # work either as it tries to access stuff only allowed above... owner @{HOME}/.config/kdeglobals r, /usr/lib/libreoffice/program/lo_kde5filepicker rPUx, /usr/share/qt5/translations/* r, /usr/lib/*/qt5/plugins/** rm, /usr/share/plasma/look-and-feel/**/contents/defaults r, # TODO: remove when rules are available in abstractions/kde owner @{HOME}/.cache/ksycoca5_??_* r, # KDE System Configuration Cache owner @{HOME}/.config/baloofilerc r, # indexing options (excludes, etc), used by KFileWidget owner @{HOME}/.config/dolphinrc r, # settings used by KFileWidget owner @{HOME}/.config/kde.org/libphonon.conf r, # for KNotifications::sendEvent() owner @{HOME}/.config/klanguageoverridesrc r, # per-application languages, for KDEPrivate::initializeLanguages() from libKF5XmlGui.so owner @{HOME}/.config/trashrc r, # user by KFileWidget /usr/share/knotifications5/*.notifyrc r, # KNotification::sendEvent # TODO: remove when rules are available in abstractions/kde-write-icon-cache or similar owner @{HOME}/.cache/icon-cache.kcache rw, # for KIconLoader # TODO: remove when rules are available in abstractions/kdeframeworks5 or similar /usr/share/kservices5/*.protocol r, # TODO: use qt5-settings-write abstraction when it is available owner @{HOME}/.config/#[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] rw, owner @{HOME}/.config/QtProject.conf rw, owner @{HOME}/.config/QtProject.conf.?????? l -> @{HOME}/.config/#[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9], owner @{HOME}/.config/QtProject.conf.?????? rw, # for temporary files like QtProject.conf.Aqrgeb owner @{HOME}/.config/QtProject.conf.lock rwk, # TODO: use qt5-compose-cache-write abstraction when it is available owner @{HOME}/.cache/qt_compose_cache_{little,big}_endian_* r, # TODO: use recent-documents-write abstraction when it is available owner @{HOME}/.local/share/RecentDocuments/** r, owner @{HOME}/.local/share/RecentDocuments/*.desktop rwl -> @{HOME}/.local/share/RecentDocuments/#[0-9]*, owner @{HOME}/.local/share/RecentDocuments/#[0-9]* rw, owner @{HOME}/.local/share/RecentDocuments/*.lock rwk, # TODO: use kde-globals-write abstraction when it is available owner @{HOME}/.config/kdeglobals rw, owner @{HOME}/.config/kdeglobals.* rwl -> @{HOME}/.config/#[0-9]*, owner @{HOME}/.config/kdeglobals.lock rwk, }