Ana içeriğe atla

Using OpenCode Safely on Fedora

AI coding agents like OpenCode are powerful because they can read files, edit code, run commands, install packages, and access the internet.

That also means you should think about what happens if the agent makes a mistake or executes something you didn't expect.

Start with OpenCode permissions

For a basic setup, use OpenCode's permission system:

{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "edit": "ask",
    "bash": "ask",
    "webfetch": "ask",
    "external_directory": "deny"
  }
}

This keeps OpenCode interactive instead of giving it unrestricted control.

Don't give it your entire home directory

Your home directory may contain sensitive files:

~/.ssh/
~/.aws/
~/.config/
.env

Run OpenCode from the project it actually needs instead of giving it access to your whole $HOME.

Use Bubblewrap for stronger isolation

If OpenCode needs to be more autonomous, Bubblewrap is a lightweight option available on Fedora.

Install it with:

sudo dnf install bubblewrap

Bubblewrap uses Linux namespaces to create a restricted environment around OpenCode.

The goal is to make the project accessible:

~/projects/myapp

while keeping sensitive host directories unavailable:

~/.ssh
~/.aws
~/Documents
~/other-projects

OpenCode + opencode-cwrap

Instead of maintaining a complicated bwrap command yourself, you can use opencode-cwrap, a wrapper designed to run OpenCode inside a Bubblewrap-based sandbox.

The basic workflow is:

cd ~/projects/myapp
opencode-cwrap

The idea is that OpenCode runs inside the sandbox while your current project remains available for reading and writing.

Network access can remain available so OpenCode can communicate with its model provider and Git repositories.

Before relying on the sandbox, it's worth testing what it can access:

pwd
ls
ls ~/.ssh
ls ~/.aws

The important thing to verify is that OpenCode can work with your project without being able to access sensitive files from your normal Fedora environment.

Bubblewrap is not a virtual machine. It still shares the host Linux kernel, so a VM provides a stronger isolation boundary.

Other sandboxing options

On Fedora, you have several options.

Podman can run OpenCode inside a rootless container while mounting only your project.

KVM/QEMU can run OpenCode inside a virtual machine, providing a stronger boundary between the agent and your main Fedora system.

A simple progression is:

OpenCode permissions
        ↓
Bubblewrap / Podman
        ↓
Virtual machine

Use the level of isolation appropriate for what you're doing.

What about NVIDIA OpenShell?

OpenShell is designed specifically for AI-agent environments. It adds policy controls for things like filesystem access, networking, credentials, and model access.

It's useful when you want more sophisticated agent isolation, but Fedora already provides excellent building blocks such as Podman, SELinux, Bubblewrap, and KVM/QEMU.

My approach

For normal personal projects, I'd start with OpenCode's permissions and avoid exposing sensitive directories.

For more autonomous coding, I'd use Bubblewrap with opencode-cwrap or Podman.

For untrusted code or stronger isolation, I'd use a dedicated VM.

The basic rule is simple:

Give an AI agent the minimum access it needs to do its job.

Yorumlar

Bu blogdaki popüler yayınlar

An Awk feature

I was trying to use sub (or gsub) function in awk to delete an \r from the end of line. For that purpose I used dum=sub(/\r/,"",$0) and thought that the variable "dum" will be filled with the changed value of $0. But I realised that sub function only make the change and returns 0,1 accordingly. So I wrote like this sub(/r/,"") ; x=$0;

Centos 6 Postgresql 9.1 Install

Today I have changed my mind and decided to begin learning and using Postgresql. On a Centos 6 host there are some ways of installing Postgresql. I have chosen the easy one: use repos. Here http://yum.pgrpms.org/repopackages.php is the official Postgresql repos for Red Hat related distros. I have chosen the x86_64 rpm for Centos 6 and installed it. Later using yum install postgresql91-server I have installed three packages postgresql91,postgresql91-server and postgresql91-libs which is enough for now to start Postgresql 9.1. Using the instructions at /usr/share/doc/postgresql91-9.1.1/README.rpm-dist , I first did service postgresql-9.1 initdb and then service postgresql-9.1 start.Voila! Now let the journey begin! Edit:  Here is another place to look instructions http://www.postgresonline.com/journal/archives/203-postgresql90-yum.html

OpenBSD Nfsen install

I was  trying to find a solution for network monitoring as a friend's request. OpenBSD is the firewall. I saw the Nfsen packages and installed to a 5.2 server. After some effort trying to understand what is going on behind, I realised that Netflow is a protocol by Cisco designed to export router traffic to outside. And OpenBSD has a support of it with pflow interface. First I made a new pflow0 interface like ifconfig pflow0 flowdst 127.0.0.1:9998 flowsrc 127.0.0.1 up Then made some configuration changesto /etc/nfsen.conf and /var/www/htdocs/nfsen/conf.php. Because Apache in OpenBSD runs in chrooted by default, if you dont make the necessary changes in these pages you got an error stating  ERROR: nfsend connect() error: Permission denied!  ERROR: nfsend - connection failed!!  ERROR: Can not initialize globals! which is because apache cant reach the communication socket which is initially  located at $PIDDIR/nfsen.comm namely /var/db/nfsen/run direc...