From: Stefano Brivio <sbrivio@redhat.com>
To: passt-dev@passt.top
Cc: Jon Maloy <jmaloy@redhat.com>,
David Gibson <david@gibson.dropbear.id.au>,
Laurent Vivier <lvivier@redhat.com>
Subject: [PATCH v10 21/23] selinux: Add file context and type enforcement for pesto
Date: Wed, 6 May 2026 15:23:21 +0200 [thread overview]
Message-ID: <20260506132323.1751386-22-sbrivio@redhat.com> (raw)
In-Reply-To: <20260506132323.1751386-1-sbrivio@redhat.com>
Loosely inspired by passt-repair's policy: pesto needs to be able to
run, check networking entries under /proc (for ip_local_port_range),
talk to passt and pasta, wherever the control socket is.
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
---
contrib/selinux/pesto.fc | 11 +++++
contrib/selinux/pesto.te | 95 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 106 insertions(+)
create mode 100644 contrib/selinux/pesto.fc
create mode 100644 contrib/selinux/pesto.te
diff --git a/contrib/selinux/pesto.fc b/contrib/selinux/pesto.fc
new file mode 100644
index 0000000..7ec4d87
--- /dev/null
+++ b/contrib/selinux/pesto.fc
@@ -0,0 +1,11 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+# PESTO - Programmable Extensible Socket Translation Orchestrator
+# front-end for passt(1) and pasta(1) forwarding configuration
+#
+# contrib/selinux/pesto.fc - SELinux: File Context for pesto
+#
+# Copyright (c) 2026 Red Hat GmbH
+# Author: Stefano Brivio <sbrivio@redhat.com>
+
+/usr/bin/pesto system_u:object_r:pesto_exec_t:s0
diff --git a/contrib/selinux/pesto.te b/contrib/selinux/pesto.te
new file mode 100644
index 0000000..991833a
--- /dev/null
+++ b/contrib/selinux/pesto.te
@@ -0,0 +1,95 @@
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+# PESTO - Programmable Extensible Socket Translation Orchestrator
+# front-end for passt(1) and pasta(1) forwarding configuration
+#
+# contrib/selinux/pesto.te - SELinux: Type Enforcement for pesto
+#
+# Copyright (c) 2026 Red Hat GmbH
+# Author: Stefano Brivio <sbrivio@redhat.com>
+
+policy_module(pesto, 0.1)
+
+require {
+ type unconfined_t;
+ type passt_t;
+ type pasta_t;
+ role unconfined_r;
+ class process transition;
+
+ class file { read execute execute_no_trans entrypoint open map };
+ class capability { dac_override dac_read_search };
+ class chr_file { append open getattr read write ioctl };
+
+ type net_conf_t;
+ type proc_net_t;
+ type sysctl_net_t;
+
+ class unix_stream_socket { create connect sendto };
+ class sock_file { read write };
+
+ type console_device_t;
+ type user_devpts_t;
+ type user_tmp_t;
+ type tmp_t;
+
+ # Workaround: pesto needs to needs to access socket files
+ # that passt, started by libvirt, might create under different
+ # labels, depending on whether passt is started as root or not.
+ #
+ # However, libvirt doesn't maintain its own policy, which makes
+ # updates particularly complicated. To avoid breakage in the short
+ # term, deal with that in passt's own policy.
+ type qemu_var_run_t;
+ type virt_var_run_t;
+}
+
+type pesto_t;
+domain_type(pesto_t);
+type pesto_exec_t;
+corecmd_executable_file(pesto_exec_t);
+
+role unconfined_r types pesto_t;
+
+allow pesto_t pesto_exec_t:file { read execute execute_no_trans entrypoint open map };
+type_transition unconfined_t pesto_exec_t:process pesto_t;
+allow unconfined_t pesto_t:process transition;
+
+allow pesto_t self:capability { dac_override dac_read_search };
+
+allow pesto_t proc_net_t:file read;
+kernel_search_network_sysctl(pesto_t)
+allow pesto_t sysctl_net_t:dir search;
+allow pesto_t sysctl_net_t:file { open read };
+
+allow pesto_t console_device_t:chr_file { append open getattr read write ioctl };
+allow pesto_t user_devpts_t:chr_file { append open getattr read write ioctl };
+
+allow pesto_t unconfined_t:unix_stream_socket { connectto read write };
+allow pesto_t passt_t:unix_stream_socket { connectto read write };
+allow pesto_t pasta_t:unix_stream_socket { connectto read write };
+allow pesto_t user_tmp_t:unix_stream_socket { connectto read write };
+
+allow pesto_t user_tmp_t:dir { getattr read search watch };
+
+allow pesto_t unconfined_t:sock_file { getattr read write };
+allow pesto_t passt_t:sock_file { getattr read write };
+allow pesto_t pasta_t:sock_file { getattr read write };
+allow pesto_t user_tmp_t:sock_file { getattr read write };
+allow pesto_t tmp_t:sock_file { getattr read write };
+
+# Workaround: pesto needs to needs to access socket files
+# that passt, started by libvirt, might create under different
+# labels, depending on whether passt is started as root or not.
+#
+# However, libvirt doesn't maintain its own policy, which makes
+# updates particularly complicated. To avoid breakage in the short
+# term, deal with that in passt's own policy.
+allow pesto_t qemu_var_run_t:unix_stream_socket { connectto read write };
+allow pesto_t virt_var_run_t:unix_stream_socket { connectto read write };
+
+allow pesto_t qemu_var_run_t:dir { getattr read search watch };
+allow pesto_t virt_var_run_t:dir { getattr read search watch };
+
+allow pesto_t qemu_var_run_t:sock_file { getattr read write };
+allow pesto_t virt_var_run_t:sock_file { getattr read write };
--
2.43.0
next prev parent reply other threads:[~2026-05-06 13:23 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-06 13:23 [PATCH v10 00/23] Dynamic configuration update implementation Stefano Brivio
2026-05-06 13:23 ` [PATCH v10 01/23] conf, fwd: Stricter rule checking in fwd_rule_add() Stefano Brivio
2026-05-06 13:23 ` [PATCH v10 02/23] fwd_rule: Move ephemeral port probing to fwd_rule.c Stefano Brivio
2026-05-06 13:23 ` [PATCH v10 03/23] fwd, conf: Move rule parsing code to fwd_rule.[ch] Stefano Brivio
2026-05-06 13:23 ` [PATCH v10 04/23] fwd_rule: Move conflict checking back within fwd_rule_add() Stefano Brivio
2026-05-06 13:23 ` [PATCH v10 05/23] fwd: Generalise fwd_rules_info() Stefano Brivio
2026-05-06 13:23 ` [PATCH v10 06/23] pif: Limit pif names to 128 bytes Stefano Brivio
2026-05-06 13:23 ` [PATCH v10 07/23] fwd_rule: Fix some format specifiers Stefano Brivio
2026-05-06 13:23 ` [PATCH v10 08/23] pesto: Introduce stub configuration tool Stefano Brivio
2026-05-06 13:23 ` [PATCH v10 09/23] pesto, log: Share log.h (but not log.c) with pesto tool Stefano Brivio
2026-05-06 13:23 ` [PATCH v10 10/23] pesto, conf: Have pesto connect to passt and check versions Stefano Brivio
2026-05-06 17:52 ` Paul Holzinger
2026-05-06 18:00 ` Stefano Brivio
2026-05-06 13:23 ` [PATCH v10 11/23] pesto: Expose list of pifs to pesto and display them Stefano Brivio
2026-05-06 13:23 ` [PATCH v10 12/23] ip: Prepare ip.[ch] for sharing with pesto tool Stefano Brivio
2026-05-06 13:23 ` [PATCH v10 13/23] inany: Prepare inany.[ch] " Stefano Brivio
2026-05-06 13:23 ` [PATCH v10 14/23] pesto: Read current ruleset from passt/pasta and optionally display it Stefano Brivio
2026-05-06 13:23 ` [PATCH v10 15/23] pesto: Parse and add new rules from command line Stefano Brivio
2026-05-06 13:23 ` [PATCH v10 16/23] pesto, conf: Send updated rules from pesto back to passt/pasta Stefano Brivio
2026-05-06 13:23 ` [PATCH v10 17/23] conf, fwd: Allow switching to new rules received from pesto Stefano Brivio
2026-05-06 13:23 ` [PATCH v10 18/23] fwd_rule: Fix static checkers warnings in fwd_rule_add() Stefano Brivio
2026-05-06 13:23 ` [PATCH v10 19/23] pesto, conf, fwd_rule: Add options and modes to add, delete, clear rules Stefano Brivio
2026-05-06 14:31 ` Laurent Vivier
2026-05-06 13:23 ` [PATCH v10 20/23] apparmor: Add policy file for pesto Stefano Brivio
2026-05-06 13:23 ` Stefano Brivio [this message]
2026-05-06 13:23 ` [PATCH v10 22/23] fedora: Install pesto, its SELinux policy, and the man page from the spec file Stefano Brivio
2026-05-06 13:23 ` [PATCH v10 23/23] hooks: Copy static build of pesto and related man page to server Stefano Brivio
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260506132323.1751386-22-sbrivio@redhat.com \
--to=sbrivio@redhat.com \
--cc=david@gibson.dropbear.id.au \
--cc=jmaloy@redhat.com \
--cc=lvivier@redhat.com \
--cc=passt-dev@passt.top \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://passt.top/passt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).