Skip to content
tinAI
Go back

Chế Độ Yolo An Toàn: Chạy Tác Nhân LLM Trong Máy Ảo Với Libvirt và Virsh

Bài gốc: Safe Yolo Mode: Running LLM Agents in VMs with Libvirt and Virsh

Tác giả: Unknown

Ngày đăng: Dịch ngày:

TL;DR

Bài viết này hướng dẫn cách cô lập LLM agents trong máy ảo dùng libvirt và virsh trên máy chủ Linux để giảm thiểu rủi ro bảo mật. Điều này hữu ích khi cho phép agents nhiều quyền hạn, đảm bảo các phiên hoạt động lâu dài và truy cập từ xa.

Chế Độ Yolo An Toàn: Chạy Tác Nhân LLM Trong Máy Ảo Với Libvirt và Virsh

Hướng dẫn này hướng dẫn cách cô lập các tác nhân LLM trong máy ảo sử dụng libvirtvirsh trên máy chủ Linux.

Chạy LLM trong máy ảo giúp cô lập khỏi hệ thống chủ, giảm thiểu nhiều rủi ro bảo mật như các hoạt động phá hủy hoặc truy cập tệp không được phép. Điều này quan trọng khi cho phép LLM agents nhiều quyền hạn, như tự động chấp thuận việc sử dụng công cụ. Nó cũng hữu ích để giữ các phiên hoạt động lâu dài và tương tác từ xa.

Mô Hình Cô Lập VM cho Tác Nhân LLM

Tại Sao Chọn Libvirt và Virsh?

Libvirt là API ảo hóa chuẩn cho Linux, cung cấp giao diện để quản lý các máy ảo trên nhiều hypervisor khác nhau như KVM, QEMU, và Xen. Công cụ dòng lệnh virsh là cách chính để tương tác với libvirt.

Libvirt lý tưởng cho việc cô lập tác nhân LLM cấp độ sản xuất trên máy chủ Linux. Kết hợp với hình ảnh đám mây Ubuntu và cloud-init, việc cung cấp máy ảo trở nên nhanh chóng và dễ dàng.

So sánh Libvirt và Lima

Đặc ĐiểmLibvirt/VirshLima
Tốt Nhất ChoMáy chủ LinuxDesktop macOS, Linux
Sử Dụng Sản XuấtPhổ biến, thử thách qua thời gianChủ yếu cho phát triển
Hỗ Trợ HypervisorKVM/QEMU, Xen, LXC, v.v.Apple’s Virtualization.framework, QEMU
Tài Nguyên Sử DụngThấp hơnHơi cao hơn
Cài ĐặtĐơn giản (apt install)Đơn giản (brew install lima)
Chia Sẻ Thư Mục HostThủ công (9p, virtiofs)Tích hợp sẵn, YAML config, home mặc định (nguy hiểm)
Đẩy CổngCấu hình iptables/NAT thủ côngTích hợp sẵn, YAML config
Công Cụ GUIvirt-manager khả dụngKhông có (chỉ CLI)
SnapshotBản địa, vững chắcKhông hoạt động trên macOS

Cài Đặt

Cài đặt các gói cần thiết trên máy chủ Ubuntu/Debian:

sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system virtinst

Kích hoạt và khởi động libvirt daemon:

sudo systemctl enable --now libvirtd

Kiểm tra cài đặt:

sudo virsh version

Để tránh cần sudo, có thể thêm người dùng của bạn vào nhóm libvirt (yêu cầu đăng nhập lại):

sudo usermod -aG libvirt $USER

Tải Cloud Image

Sử dụng Ubuntu với các ảnh cloud images. Tải ảnh xuống:

wget -O /var/lib/libvirt/images/project1-ubuntu.img https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img

Ghi chú: Sử dụng biến thể arm64 cho máy chủ ARM.

Tăng kích cỡ đĩa:

sudo qemu-img resize /var/lib/libvirt/images/project1-ubuntu.img 40G

Tạo VM

Sử dụng virt-install để tạo máy ảo mới với cloud-init:

sudo virt-install \
  --name project1 \
  --ram 16384 \
  --vcpus 4 \
  --import \
  --disk /var/lib/libvirt/images/project1-ubuntu.img \
  --os-variant ubuntu24.04 \
  --cloud-init

Điều này tạo VM với:

VM sẽ khởi động trong vài giây.

Truy Cập VM

Mở SSH để trải nghiệm tốt hơn! Sử dụng địa chỉ IP nội bộ hoặc thiết lập Tailscale để truy cập từ xa.

Thêm khóa SSH:

vim /home/ubuntu/.ssh/authorized_keys

SSH Sử Dụng IP Nội Bộ

Libvirt thiết lập mạng NAT cung cấp IP nội bộ cho máy ảo:

virsh domifaddr project1

ssh [email protected]

Tailscale Để Truy Cập Từ Xa

Tailscale tạo mạng VPN mã hóa giữa các thiết bị. Cài đặt bên trong VM:

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
tailscale ip -4

Dùng IP trên Tailscale để truy cập VM:

ssh [email protected]

Thiết Lập VM

Công Cụ và Cấu Hình Cơ Bản

Bên trong VM, thiết lập cơ bản:

sudo apt update && sudo apt upgrade -y
sudo apt install -y vim git curl build-essential htop jq ca-certificates pkg-config libssl-dev
sudo timedatectl set-timezone UTC
git config --global user.name "Your Name"
git config --global user.email "[email protected]"

Tmux cho Phiên Hoạt Động Bền Bỉ

Thêm vào ~/.bashrc để tự động khởi động tmux khi đăng nhập:

tee -a ~/.bashrc > /dev/null << 'EOF'
if [[ -z "$TMUX" && $- == *i* && -t 0 ]]; then
  tmux attach -t main 2>/dev/null || tmux new -s main
fi
EOF
source ~/.bashrc

Tiện Ích Bash

Thêm vào /etc/bash.bashrc:

sudo tee -a /etc/bash.bashrc > /dev/null << 'EOF'
export HISTSIZE=262144
alias ll='ls -alh'
alias ai="sudo apt-get install -y"
alias g='git'
alias gs='git status -sb'
EOF

Cài Đặt Công Cụ Cơ Bản

Node.js

NVM_LATEST=$(curl -s https://api.github.com/repos/nvm-sh/nvm/releases/latest | jq -r .tag_name)
curl -fsSL "https://raw.githubusercontent.com/nvm-sh/nvm/${NVM_LATEST}/install.sh" | bash
source ~/.bashrc
nvm install --lts

fzf

FZF_LATEST=$(curl -s https://api.github.com/repos/junegunn/fzf/releases/latest | jq -r .tag_name)
curl -Lo fzf.tar.gz "https://github.com/junegunn/fzf/releases/download/${FZF_LATEST}/fzf-${FZF_LATEST#v}-linux_amd64.tar.gz"
sudo tar -xzf fzf.tar.gz -C /usr/local/bin fzf
rm fzf.tar.gz
echo 'eval "$(fzf --bash)"' >> ~/.bashrc

Golang

GO_LATEST=$(curl -s 'https://go.dev/dl/?mode=json' | jq -r '.[0].files[] | select(.os=="linux" and .arch=="amd64") | .filename')
curl -L "https://go.dev/dl/$GO_LATEST" -o go.tar.gz
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go.tar.gz
rm go.tar.gz

Docker/Containerd + nerdctl

NERDCTL_LATEST=$(curl -s https://api.github.com/repos/containerd/nerdctl/releases/latest | jq -r .tag_name)
curl -sSL "https://github.com/containerd/nerdctl/releases/download/${NERDCTL_LATEST}/nerdctl-full-${NERDCTL_LATEST#v}-linux-amd64.tar.gz" | sudo tar -xz -C /usr/local
sudo systemctl enable --now containerd
sudo systemctl enable --now buildkit
sudo nerdctl ps
sudo nerdctl run --rm hello-world

Cài Tác Nhân LLM

Claude Code

curl -fsSL https://claude.ai/install.sh | bash
echo 'alias claude="claude --dangerously-skip-permissions"' >> ~/.bashrc

Gemini

npm install -g @google/gemini-cli@latest
echo 'alias gemini="gemini --yolo"' >> ~/.bashrc

Codex CLI

npm install -g @openai/codex@latest
echo 'alias codex="codex --dangerously-bypass-approvals-and-sandbox"' >> ~/.bashrc

Lộ Trình Quản Lý VM Với Virsh

Lệnh Chính

virsh list --all
virsh start project1
virsh shutdown project1
virsh destroy project1
virsh undefine project1 --remove-all-storage

Truy Cập Bảng Điều Khiển

virsh console project1
virsh console project1 --force

Thông Tin VM

virsh dominfo project1
virsh domifaddr project1
virsh domblklist project1

Tùy Chỉnh Cloud-Init

Tạo file user-data.yaml:

#cloud-config
users:
  - name: dev
    sudo: ALL=(ALL) NOPASSWD:ALL
    shell: /bin/bash
    ssh_authorized_keys:
      - ssh-ed25519 AAAA... your-key-here

packages:
  - vim
  - htop
  - git
  - build-essential

runcmd:
  - echo "VM provisioned at $(date)" > /var/log/provision.log

Khởi tạo VM với config riêng:

sudo virt-install \
  --name project1 \
  --ram 16384 \
  --vcpus 4 \
  --import \
  --disk /var/lib/libvirt/images/project1-ubuntu.img \
  --os-variant ubuntu24.04 \
  --cloud-init user-data=user-data.yaml

Ảnh Chụp

Lưu và phục hồi trạng thái VM:

virsh snapshot-create-as project1 --name "before-experiment" --description "Clean state"
virsh snapshot-list project1
virsh snapshot-revert project1 --snapshotname "before-experiment"

Sao Chép VMs

Sao chép một VM nhanh chóng:

virsh shutdown project1
virt-clone --original project1 --name project12 --auto-clone
virsh start project12

Cấu Hình Mạng

Libvirt tạo mạng NAT với truy cập internet cho VMs:

virsh net-list --all
virsh net-info default
virsh net-dhcp-leases default

Hy vọng hướng dẫn này sẽ có ích cho bạn! Câu hỏi và phản hồi được chào đón trong phần bình luận.


Read Original (EN) Quay lại Newsletter