行第一個(gè)未修改的Linux程序)
如何快速上手LiteBox10分鐘運(yùn)行第一個(gè)未修改的Linux程序【免費(fèi)下載鏈接】liteboxA security-focused library OS supporting kernel- and user-mode execution項(xiàng)目地址: https://gitcode.com/GitHub_Trending/lit/liteboxLiteBoxLiteBox 庫(kù)操作系統(tǒng)是一個(gè)安全優(yōu)先的「library OS」沙箱能在未修改的 Linux 程序與宿主環(huán)境之間建立極窄的接口面從而大幅縮小攻擊面。本文將帶你用 10 分鐘從零克隆、編譯并跑通第一個(gè)未修改的 Linux 程序適合想體驗(yàn) Linux 應(yīng)用沙箱、跨平臺(tái)運(yùn)行的新手與普通用戶(hù)。 上圖為 LiteBox 的整體架構(gòu)上方的North 接口面向各種程序Linux Shim、OPTEE Shim 等下方的South 接口對(duì)接不同平臺(tái)Linux 用戶(hù)態(tài)、Windows 用戶(hù)態(tài)、SEV SNP 等中間的 LiteBox 核心把兩者解耦實(shí)現(xiàn)任意「北-南」組合。一、LiteBox 是什么為什么值得上手一句話(huà)概括LiteBox 讓你把一個(gè)普通的 Linux 可執(zhí)行文件放進(jìn)一個(gè)受控沙箱里運(yùn)行程序代碼完全不用改。它的典型用途包括? 在未修改的 Linux 上沙箱化運(yùn)行 Linux 應(yīng)用 在 Windows 上運(yùn)行未修改的 Linux 程序? 在 AMD SEV SNP 機(jī)密計(jì)算環(huán)境中運(yùn)行程序 在 OP-TEE、LVBS 等安全平臺(tái)上運(yùn)行程序?qū)π率謥?lái)說(shuō)最易上手的場(chǎng)景就是第一個(gè)在 Linux 上用litebox_runner_linux_userland跑一個(gè)現(xiàn)成的二進(jìn)制。二、環(huán)境準(zhǔn)備一鍵安裝步驟開(kāi)始之前請(qǐng)確認(rèn)你的機(jī)器滿(mǎn)足以下條件以 x86-64 Linux 為例依賴(lài)用途說(shuō)明Rust 工具鏈stable 即可編譯項(xiàng)目項(xiàng)目根目錄的 rust-toolchain.toml 指定 stableC 編譯器gcc/cc編譯測(cè)試小程序用于把 C 源碼編譯成 ELFtar打包 rootfs沙箱文件系統(tǒng)以 tar 形式提供內(nèi)核 TUN 模塊可選聯(lián)網(wǎng)功能見(jiàn) litebox_platform_linux_userland/scripts/tun-setup.sh三、10 分鐘跑通完整上手步驟步驟 1克隆 LiteBox 倉(cāng)庫(kù)git clone https://gitcode.com/GitHub_Trending/lit/litebox cd litebox步驟 2編譯運(yùn)行器運(yùn)行器是一個(gè) Cargo 工作區(qū)成員直接構(gòu)建即可首次編譯約幾分鐘cargo build --package litebox_runner_linux_userland步驟 3準(zhǔn)備一個(gè)未修改的 Linux 程序倉(cāng)庫(kù)自帶測(cè)試程序 litebox_runner_linux_userland/tests/hello.c它打印 argv/envp 并調(diào)用clock_gettime是完美的「第一個(gè)程序」。先把它編譯成靜態(tài)或動(dòng)態(tài) ELFgcc -static litebox_runner_linux_userland/tests/hello.c -o /tmp/hello步驟 4在 LiteBox 沙箱中運(yùn)行它關(guān)鍵命令只有一條注意--unstable是必需開(kāi)關(guān)它啟用不穩(wěn)定選項(xiàng)cargo run --package litebox_runner_linux_userland -- \ --unstable --rewrite-syscalls /tmp/hello如果看到類(lèi)似這樣的輸出恭喜你第一個(gè)程序跑通了 argv[0] /tmp/hello Elapsed time: 0.0xxx seconds這條命令在做什么--rewrite-syscalls會(huì)在運(yùn)行前對(duì) ELF 做一次性「系統(tǒng)調(diào)用重寫(xiě)」把二進(jìn)制中每條syscall指令替換成跳轉(zhuǎn)指令掛接到 LiteBox 的樁代碼上詳見(jiàn) litebox_syscall_rewriter/src/lib.rs。整個(gè)過(guò)程不需要 ptrace、seccomp 或內(nèi)核配合開(kāi)銷(xiāo)很低——這是 LiteBox 能在純用戶(hù)態(tài)攔截系統(tǒng)調(diào)用的核心技巧。?? 小提示重寫(xiě)目前僅支持 x86-64 ELF另外它是對(duì)靜態(tài)二進(jìn)制最友好動(dòng)態(tài)鏈接程序需要補(bǔ)齊依賴(lài)庫(kù)見(jiàn)下文。步驟 5運(yùn)行真實(shí)的系統(tǒng)程序進(jìn)階 5 分鐘跑ls這類(lèi)動(dòng)態(tài)鏈接程序時(shí)需要把它的共享庫(kù)一并放進(jìn)沙箱的 tar 文件系統(tǒng)。做法參考 litebox_runner_linux_userland/tests/run.rs 中的標(biāo)準(zhǔn)流程# 1. 建一個(gè)目錄模擬 rootfs放入程序和依賴(lài)庫(kù) mkdir -p /tmp/rootfs/lib cp /usr/bin/ls /tmp/rootfs/ cp $(ldd /usr/bin/ls | awk {print $3} | grep ^/) /tmp/rootfs/lib/ # 2. 打成 tar 包 tar -C /tmp/rootfs -cf /tmp/rootfs.tar . # 3. 運(yùn)行程序路徑是 tar 內(nèi)部的絕對(duì)路徑 cargo run --package litebox_runner_linux_userland -- \ --unstable --initial-files /tmp/rootfs.tar \ --env LD_LIBRARY_PATH/lib --env HOME/ \ -- /bin/ls -a運(yùn)行器會(huì)把這個(gè) tar 包掛成只讀的初始文件系統(tǒng)再執(zhí)行其中的/bin/ls。動(dòng)態(tài)鏈接場(chǎng)景下依賴(lài)庫(kù)需要先用 rewrite 工具預(yù)處理這一點(diǎn)在 litebox_runner_linux_userland/tests/common/mod.rs 的rewrite_with_cache中有現(xiàn)成參考。四、理解架構(gòu)North 接口與 South 平臺(tái)LiteBox 的源碼結(jié)構(gòu)非常清晰核心分三層North北向接口一套 Rust 風(fēng)格的、受nix/rustix啟發(fā)的類(lèi) Unix API供各種 Shim 調(diào)用核心庫(kù)位于 litebox/src/lib.rsSouth南向平臺(tái)最小化的Platform實(shí)現(xiàn)如 litebox_platform_linux_userland 直接利用宿主機(jī) Linux 的調(diào)用Shim模擬器把 Linux 系統(tǒng)調(diào)用翻譯成 North 接口見(jiàn) litebox_shim_linux/src/lib.rs想深入源碼從 litebox_runner_linux_userland/src/lib.rs 的 CLI 參數(shù)定義入手再順著 litebox/src/event/mod.rs、litebox/src/fd/mod.rs 等模塊讀就能摸清事件、文件描述符、虛擬文件系統(tǒng)litebox/src/fs/的完整鏈路。五、可選為沙箱接入網(wǎng)絡(luò)TUN 設(shè)備如果程序需要聯(lián)網(wǎng)先初始化一個(gè) TUN 設(shè)備sudo ./litebox_platform_linux_userland/scripts/tun-setup.sh然后給運(yùn)行器加上--tun-device-name tun0參數(shù)即可沙箱內(nèi)的 TCP 流量會(huì)經(jīng)由該設(shè)備與主機(jī)通信倉(cāng)庫(kù)測(cè)試中就用它跑了iperf3和curl見(jiàn) litebox_runner_linux_userland/tests/run.rs。六、常見(jiàn)問(wèn)題與調(diào)試技巧問(wèn)題解決方法想看到詳細(xì)日志設(shè)置LITEBOX_LOGdebug如LITEBOX_LOGdebug cargo run ...也可按模塊過(guò)濾如LITEBOX_LOGlitebox::fstrace參數(shù)報(bào)「unstable options require -Z」加上--unstable也可寫(xiě)作-Z動(dòng)態(tài)程序缺庫(kù)報(bào)錯(cuò)用ldd列出依賴(lài)逐一拷入 tar 并設(shè)置LD_LIBRARY_PATH程序?qū)懳募ar 文件系統(tǒng)是只讀的屬正常現(xiàn)象用戶(hù)身份相關(guān)報(bào)錯(cuò)運(yùn)行器內(nèi)部固定使用 uid/gid 1000 的 guest 身份見(jiàn) litebox_runner_linux_userland/src/lib.rs七、下一步學(xué)什么 想體驗(yàn)「Linux 程序跑在 Windows 上」看 litebox_platform_windows_userland/ 與 litebox_runner_linux_on_windows_userland/ 想生成自包含的 tar 打包鏡像了解 litebox_packager/ 想給項(xiàng)目做貢獻(xiàn)閱讀 CONTRIBUTING.md 想看基準(zhǔn)測(cè)試方法參考 dev_bench/unixbench/README.md總結(jié)只需 4 步——克隆 → 編譯 → 準(zhǔn)備程序 → 一條命令運(yùn)行你就已經(jīng)體驗(yàn)了 LiteBox 這個(gè)安全優(yōu)先的庫(kù)操作系統(tǒng)如何在未修改的 Linux 程序上建立沙箱。它的 North/South 分層設(shè)計(jì)意味著同一套 Shim 可以平移到 Windows、SEV SNP 等平臺(tái)這也是它最值得關(guān)注的地方?,F(xiàn)在去試試把你的常用工具python3、node、iperf3也搬進(jìn)沙箱吧說(shuō)明項(xiàng)目仍在快速演進(jìn)部分接口可能隨設(shè)計(jì)成熟而變化建議關(guān)注倉(cāng)庫(kù)更新獲取最新用法。【免費(fèi)下載鏈接】liteboxA security-focused library OS supporting kernel- and user-mode execution項(xiàng)目地址: https://gitcode.com/GitHub_Trending/lit/litebox創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考