<!--- SPDX-License-Identifier: GPL-2.0-or-later Copyright (c) 2023 Red Hat GmbH Author: Stefano Brivio <sbrivio@redhat.com> --> <link rel="stylesheet" type="text/css" href="/static/asciinema-player.css" /> <script src="/static/asciinema-player.min.js"></script> ## *seitan* was at [DevConf.CZ 2023](https://devconfcz2023.sched.com/event/1MYkc/seitan-a-plant-based-recipe-against-syscall-anxiety)! Check out the [slides](https://seitan.rocks/static/seitan_devconf_2023.pdf) and the [recording](https://seitan.rocks/static/seitan_devconf_2023.webm) <div style="display: grid; grid-template-columns: 60% auto;"> <div> <img src="/static/seitan.svg" alt="seitan diagram" width="98%"> </div> <div style="text-align: justify"> <h2> <i>seitan</i> is a framework to filter, transform and impersonate system calls, enabling privilege reduction in container and virtualisation engines </h2> It allows you to filter and replay only the system calls you need, instead of running things as root, or granting capabilities to processes. <ul> <li><pre style="display: inline">seitan-cooker</pre> builds a BPF program and a bytecode file (<i>gluten</i>) from a recipe with matches on system calls and corresponding actions</li> <li><pre style="display: inline">seitan-eater</pre> loads the BPF program associated to the process context into the kernel, and runs the target process. Container engines such as Podman can directly load this program via OCI annotations instead</li> <li><pre style="display: inline">seitan</pre> is the supervisor, getting notifications via <pre style="display: inline">seccomp_unotify</pre>, interpreting them according to <i>gluten</i>, and triggering the configured actions as a result</li> </ul> <h5>Note that this project and its documentation still have some rough edges! No versions, no packages yet.</h5> <h4>Do you want to know more?</h4> Watch the <a href="#demo-handle-and-impersonate-connect-of-a-target-process-in-several-ways">demos</a> below, ask your questions on the users' <a href="https://lists.seitan.rocks/postorius/lists/seitan-user.seitan.rocks/">list</a>, <a href="https://matrix.to/#/#seitan:libera.chat">chat</a> with us. <h4>Do you want to contribute?</h4> Send patches to the development <a href="https://lists.seitan.rocks/postorius/lists/seitan-dev.seitan.rocks/">list</a>... <u><b>and</b></u> <a href="https://matrix.to/#/#seitan:libera.chat">chat</a> with us! </div> </div> ## Demo: handle and impersonate `connect()` of a target process in several ways <div id="demo_connect" style="width: 99%;"></div> ## Demo: issue `mknod()` on behalf of a Podman container <div id="demo_mknod" style="width: 99%;"></div> <script> AsciinemaPlayer.create('/static/seitan-connect.cast', document.getElementById('demo_connect'), { cols: 112, rows: 24, preload: true, poster: 'npt:0:2' }); AsciinemaPlayer.create('/static/seitan-mknod.cast', document.getElementById('demo_mknod'), { cols: 112, rows: 24, preload: true, poster: 'npt:0:2' }); </script>