{"id":95,"date":"2026-05-26T09:00:00","date_gmt":"2026-05-26T06:00:00","guid":{"rendered":"https:\/\/agentura.ro\/blog\/vm-grade-isolation-security\/"},"modified":"2026-06-19T12:06:31","modified_gmt":"2026-06-19T09:06:31","slug":"vm-grade-isolation-security","status":"publish","type":"post","link":"https:\/\/agentura.ro\/blog\/vm-grade-isolation-security\/","title":{"rendered":"OS-level isolation, need-to-know by design"},"content":{"rendered":"<p class=\"agx-lede\">When your agents handle real customer data, &#8220;we take security seriously&#8221; isn&#8217;t an answer. The architecture is.<\/p>\n<h2>One company, one isolated environment<\/h2>\n<p>On Agentura, every company runs inside its own <strong>OS-isolated environment<\/strong>, enforced by the Linux kernel. That means a dedicated <strong>per-company Linux user<\/strong> with a private <code>0700<\/code> home directory, a <strong>per-company private network<\/strong>, and <strong>every Linux capability dropped<\/strong> by default. Your agents live in their own walled-off slice of the system, not in a shared pool where one tenant&#8217;s process can quietly read another&#8217;s.<\/p>\n<p>The point of this design is what happens in the worst case. Even if an attacker reached container-root inside one company&#8217;s environment, Unix file permissions still block them from listing \u2014 let alone reading \u2014 another company&#8217;s data, the dropped capabilities stop them mounting filesystems or escalating, and the private network gives them no path to anyone else. Crossing the boundary would take a kernel-level or Docker-daemon escape, not a misconfigured policy. Separation isn&#8217;t something you trust someone to enforce \u2014 it&#8217;s enforced by the operating system itself.<\/p>\n<h2>Strong separation, without the VM tax<\/h2>\n<p>The classic way to isolate tenants is to give each one a full virtual machine. It works, but it&#8217;s heavy: slow to start, expensive to run, and wasteful when most of that VM sits idle. Agentura draws its boundaries a different way \u2014 per-company UIDs, private networks, and dropped capabilities, all enforced by the shared host kernel \u2014 so you get hard, OS-level separation between companies at the density and speed of containers, without paying for a fleet of per-tenant virtual machines.<\/p>\n<blockquote>\n<p>The strongest security boundary is the one an attacker can&#8217;t talk their way around. A dropped capability doesn&#8217;t make exceptions.<\/p>\n<\/blockquote>\n<h2>Need-to-know, by design<\/h2>\n<p>Isolation keeps companies apart. <strong>Need-to-know access control<\/strong> keeps things tidy <em>inside<\/em> your company too. Each agent only sees the data and the tools you explicitly grant it \u2014 and a connector that isn&#8217;t granted is never even registered as a tool the agent could call.<\/p>\n<p>That gives you real control over your own AI workforce:<\/p>\n<ul>\n<li>Grant a support agent your customer conversations while withholding the billing connectors \u2014 a denied tool is refused at the call gate, not just hidden.<\/li>\n<li>A back-office agent gets the connectors it needs for its job and none of the others.<\/li>\n<li>New projects start with no connectors and no data; access is something you link, on purpose \u2014 not a default everyone inherits.<\/li>\n<\/ul>\n<p>The result is a system where blast radius is small by construction. Every agent operates with the access you chose for it, so a mistake or a bad instruction is contained, not catastrophic.<\/p>\n<h2>Security you can reason about<\/h2>\n<p>Good security isn&#8217;t a long list of features \u2014 it&#8217;s a model you can actually hold in your head. Companies are isolated at the operating-system level. Agents are scoped to what you grant. Capabilities start at zero and are added deliberately. When the architecture is this explicit, you can give your customers a clear, honest answer about how their data is kept apart \u2014 because the answer is built into how the platform runs.<\/p>\n<p><strong><a href=\"https:\/\/agentura.ro\/\">See how Agentura keeps your data isolated \u2192<\/a><\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Every company runs in its own OS-isolated environment \u2014 separate Linux user, private network, dropped capabilities \u2014 plus need-to-know access. Kernel-enforced AI security.<\/p>\n","protected":false},"author":1,"featured_media":94,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[72,71,13],"class_list":["post-95","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-platform","tag-gdpr","tag-isolation","tag-security"],"_links":{"self":[{"href":"https:\/\/agentura.ro\/blog\/wp-json\/wp\/v2\/posts\/95","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/agentura.ro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/agentura.ro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/agentura.ro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/agentura.ro\/blog\/wp-json\/wp\/v2\/comments?post=95"}],"version-history":[{"count":3,"href":"https:\/\/agentura.ro\/blog\/wp-json\/wp\/v2\/posts\/95\/revisions"}],"predecessor-version":[{"id":165,"href":"https:\/\/agentura.ro\/blog\/wp-json\/wp\/v2\/posts\/95\/revisions\/165"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/agentura.ro\/blog\/wp-json\/wp\/v2\/media\/94"}],"wp:attachment":[{"href":"https:\/\/agentura.ro\/blog\/wp-json\/wp\/v2\/media?parent=95"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/agentura.ro\/blog\/wp-json\/wp\/v2\/categories?post=95"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/agentura.ro\/blog\/wp-json\/wp\/v2\/tags?post=95"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}