From 04dc921eb1ee2fe164015417ec4898044d87ef8e Mon Sep 17 00:00:00 2001 From: Alexandre Pujol Date: Thu, 15 May 2025 22:09:52 +0200 Subject: [PATCH] doc: rewrite the introduction page. --- docs/assets/avatar-icon.png | Bin 0 -> 34202 bytes docs/index.md | 126 +++++++++++++++++++++++++----------- docs/install.md | 4 +- docs/overview.md | 48 ++++++++++++++ mkdocs.yml | 1 + 5 files changed, 141 insertions(+), 38 deletions(-) create mode 100644 docs/assets/avatar-icon.png create mode 100644 docs/overview.md diff --git a/docs/assets/avatar-icon.png b/docs/assets/avatar-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..80170da1e99b85bc3ddf2a25ef03bf23d4284036 GIT binary patch literal 34202 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 literal 0 HcmV?d00001 diff --git a/docs/index.md b/docs/index.md index 39679d01a..5e6c70c56 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,52 +1,106 @@ --- title: AppArmor.d +hide: + - toc --- - + + -### Presentations - -Building the largest set of AppArmor profiles: - -- [Linux Security Summit North America (LSS-NA 2023)](https://events.linuxfoundation.org/linux-security-summit-north-america/) *([Slide](https://lssna2023.sched.com/event/1K7bI/building-the-largest-working-set-of-apparmor-profiles-alexandre-pujol-the-collaboratory-tudublin), [Video](https://www.youtube.com/watch?v=OzyalrOzxE8))* -- [Ubuntu Summit 2023](https://events.canonical.com/event/31/) *([Slide](https://events.canonical.com/event/31/contributions/209/), [Video](https://www.youtube.com/watch?v=GK1J0TlxnFI))* - -### Chat - -A development chat is available on https://matrix.to/#/#apparmor.d:matrix.org +
+
+
+
+ +

apparmor.d

+

Full set of AppArmor policies

+

apparmor.d is a collection of AppArmor profiles designed to restrict the behavior of Linux applications and processes.

+

Its goal is to confine everything, targeting both desktops and servers across all distributions that support AppArmor.

+ + Get started + + + + Demo Server + + +
+
+
+
diff --git a/docs/install.md b/docs/install.md index ff4a1b6bb..a18185fbf 100644 --- a/docs/install.md +++ b/docs/install.md @@ -89,7 +89,7 @@ echo 'Optimize=compress-fast' | sudo tee -a /etc/apparmor/parser.conf !!! warning - **Beware**: do not install a `.deb` made for Debian on Ubuntu, the packages are different. + **Beware**: do not install a `.deb` made for Debian on Ubuntu as the packages are different. If your distribution is based on Ubuntu, you may want to manually set the target distribution by exporting `DISTRIBUTION=ubuntu`. @@ -125,7 +125,7 @@ echo 'Optimize=compress-fast' | sudo tee -a /etc/apparmor/parser.conf !!! warning - **Beware**: do not install a `.deb` made for Ubuntu on Debian, the packages are different. + **Beware**: do not install a `.deb` made for Ubuntu on Debian as the packages are different. If your distribution is based on Debian, you may want to manually set the target distribution by exporting `DISTRIBUTION=debian`. diff --git a/docs/overview.md b/docs/overview.md new file mode 100644 index 000000000..fb6712a14 --- /dev/null +++ b/docs/overview.md @@ -0,0 +1,48 @@ +--- +title: Overview +--- + +!!! danger "Help Wanted" + + This project is still in its early development. Help is very welcome; see [Development](development/index.md) + +**AppArmor.d** is a set of over 1500 AppArmor profiles whose aim is to confine most Linux based applications and processes. + +### Purpose + +- Confine all root processes such as all `systemd` tools, `bluetooth`, `dbus`, `polkit`, `NetworkManager`, `OpenVPN`, `GDM`, `rtkit`, `colord` +- Confine all Desktop environments +- Confine all user services such as `Pipewire`, `Gvfsd`, `dbus`, `xdg`, `xwayland` +- Confine some *"special"* user applications: web browsers, file managers, etc +- Should not break a normal usage of the confined software + +See the [Concepts](concepts.md)' page for more detail on the architecture. + +### Goals + +- Target both desktops and servers +- Support for all distributions that support AppArmor: + * [:material-arch: Arch Linux](install.md#archlinux) + * [:material-ubuntu: Ubuntu 24.04/22.04](install.md#ubuntu) + * [:material-debian: Debian 12/13](install.md#debian) + * [:simple-suse: openSUSE Tumbleweed](install.md#opensuse) +- Support for all major desktop environments: + - [x] :material-gnome: Gnome (GDM) + - [x] :simple-kde: KDE (SDDM) + - [ ] :simple-xfce: XFCE (Lightdm) *(work in progress)* +- [Fully tested](development/tests.md) + +### Demo + +You want to try this project, or you are curious about the advanced usage and security it can provide without installing it on your machine. You can try it online on my AppArmor play machine at https://play.pujol.io/ + +### Presentations + +Building the largest set of AppArmor profiles: + +- [Linux Security Summit North America (LSS-NA 2023)](https://events.linuxfoundation.org/linux-security-summit-north-america/) *([Slide](https://lssna2023.sched.com/event/1K7bI/building-the-largest-working-set-of-apparmor-profiles-alexandre-pujol-the-collaboratory-tudublin), [Video](https://www.youtube.com/watch?v=OzyalrOzxE8))* +- [Ubuntu Summit 2023](https://events.canonical.com/event/31/) *([Slide](https://events.canonical.com/event/31/contributions/209/), [Video](https://www.youtube.com/watch?v=GK1J0TlxnFI))* + +### Chat + +A development chat is available on https://matrix.to/#/#apparmor.d:matrix.org diff --git a/mkdocs.yml b/mkdocs.yml index 153af0d4e..12783b566 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -138,6 +138,7 @@ nav: - Home: - index.md - Getting Started: + - overview.md - concepts.md - install.md - configuration.md