TL;DR
- ProcInsh는 리눅스 프로세스 공간을 3D로 돌아다니며 살펴보는 웹 기반 프로세스 검사기임.
- 지원 환경은 Linux x86-64이며, 설치와 자체 빌드 모두 네이티브 코드 컴파일에 필요한 도구와 커널 BTF 정보를 요구함.
- crates.io 설치에는
cargo install procinsh --locked를 사용하고, 웹 브라우저에서http://127.0.0.1:9090에 접속함. - 자체 빌드에는 Node.js 22 이상, npm,
rustup을 통한 Rust가 추가로 필요하며, 웹 자산 빌드 후 릴리스 바이너리를 컴파일함. - 원격 접속 옵션은 인증 없이 프로세스 메모리와 환경 변수를 노출하므로 주의가 필요하고, WSL2 지원은 매우 제한적임.
ProcInsh 소개
- ProcInsh는 “Process in the Shell”을 뜻하는 리눅스용 웹 기반 프로세스 검사기임.
- “Ghost in the Shell”처럼 고스트와 함께 프로세스 공간을 돌아다니며 탐색하는 방식임.
- 관련 블로그 게시물도 안내함.
사용 및 요구 사항
- Linux x86-64가 필요하며, 두 설치 방법 모두 네이티브 코드를 컴파일함.
- 필요한 도구와 정보는 Rust, C 컴파일러, BPF 백엔드가 포함된
clang,bpftool,pkg-config,libelf및zlib개발 파일,/sys/kernel/btf/vmlinux의 BTF 정보임. - WSL2 지원은 매우 제한적이며, crates.io에서 설치하기보다 소스에서 빌드하는 방식을 권장함.
- Docker 같은 컨테이너 환경에서는 테스트하지 않음.
crates.io에서 설치
- Ubuntu를 기준으로 한 안내이며, 다른 배포판에서는 패키지 설치 명령을 환경에 맞게 해석해야 함.
build-essential,clang,llvm,pkg-config,libelf-dev,zlib1g-dev,python3,linux-tools-common,linux-tools-generic을 설치한 뒤cargo install procinsh --locked로 설치함.- 다음 명령으로 로컬 주소에 서버를 실행하고 브라우저에서
http://127.0.0.1:9090에 접속함. sudo "$HOME/.cargo/bin/procinsh" --listen 127.0.0.1:9090- 원격 접속을 허용하려면
--allow-non-loopback옵션을 사용하지만, 인증 없이 프로세스 메모리와 환경 변수가 노출됨. sudo를 사용하지 않으려면 다음 권한을setcap으로 부여한 뒤 실행함.cap_sys_ptrace,cap_bpf,cap_perfmon,cap_dac_read_search권한을 실행 파일에 설정함.$HOME/.cargo/bin/procinsh에 권한을 설정한 다음--listen 127.0.0.1:9090으로 실행함.
직접 빌드
- Node.js 22 이상, npm,
rustup을 통한 Rust가 추가로 필요함. - Rust 버전과 구성 요소는
rust-toolchain.toml에 고정되어 있으며, 필요한 경우rustup이 자동으로 설치함. - 저장소를 복제한 뒤 필요한 시스템 패키지를 설치하고,
npm ci로 의존성을 설치함. npm run build:web로 웹 부분을 빌드한 다음cargo build --release --locked로 릴리스 빌드를 수행함.- 다음 명령으로 서버를 실행함.
sudo ./target/release/procinsh --listen 127.0.0.1:9090
Ubuntu의 WSL2에서 빌드
- Ubuntu의
bpftool래퍼는 WSL2 커널 버전과 Ubuntu 도구 패키지의 버전이 달라bpftool not found for kernel ...오류를 낼 수 있음. - 래퍼를 우회하려면 패키지에 포함된 실행 파일을 직접 찾아
BPFTOOL환경 변수에 지정함. linux-tools-generic설치 후/usr/lib/linux-tools/*/bpftool을 검색해 실행 가능한 파일을BPFTOOL에 설정하고, 해당 실행 파일의 버전을 확인함.- 지정한
bpftool로/sys/kernel/btf/vmlinux의 BTF를/tmp/procinsh-vmlinux.h에 덤프함. - 이후
npm ci,npm run build:web,cargo build --release --locked순서로 빌드하고sudo ./target/release/procinsh --listen 127.0.0.1:9090으로 실행함. - “이제 어디로 갈까? 프로세스 공간은 광활함.”
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요