기본적으로 BusyBox는 내장 애플릿 (에 나열된 명령 busybox --help
) 과 관련하여 특별한 작업을 수행하지 않습니다 .
그러나 컴파일시 FEATURE_SH_STANDALONE
및 FEATURE_PREFER_APPLETS
옵션이 활성화 된 경우 BusyBox sh¹는 알려진 애플릿 이름 인 명령을 실행할 때 일반 PATH
조회를 수행하지 않고 대신 바로 가기를 통해 내장 애플릿을 실행합니다.
- 소스 코드에서 "noexec"로 선언 된 애플릿은 분기 프로세스에서 함수 호출로 실행됩니다. 비지 박스 1.22, 다음 애플릿 NOEXEC 있습니다 :
chgrp
, chmod
, chown
, cksum
, cp
, cut
, dd
, dos2unix
, env
, fold
, hd
, head
, hexdump
, ln
, ls
, md5sum
, mkfifo
, mknod
, sha1sum
, sha256sum
, sha3sum
, sha512sum
, sort
, tac
, unix2dos
.
- 소스 코드에서 "nofork"로 선언 된 애플릿은 동일한 프로세스에서 함수 호출로 실행됩니다. 비지 박스 1.22, 다음 애플릿 nofork 있습니다 :
[[
, [
, basename
, cat
, dirname
, echo
, false
, fsync
, length
, logname
, mkdir
, printenv
, printf
, pwd
, rm
, rmdir
, seq
, sync
, test
, true
, usleep
, whoami
, yes
.
- 다른 애플릿 정말 (로 실행
fork
하고 execve
)하지만, 대신 일의 PATH
조회, 비지 박스가 실행 /proc/self/exe
(일반적으로 리눅스의 경우), 사용 가능한 경우, 그리고 경로 그렇지 않으면 컴파일시에 정의했다.
자세한 내용은에 자세히 설명되어 docs/nofork_noexec.txt
있습니다. 애플릿 선언은 include/applets.src.h
소스 코드에 있습니다.
대부분의 기본 구성은 이러한 기능을 해제하여 BusyBox가 다른 쉘과 같은 외부 명령을 실행하도록합니다. 데비안은이 기능을 패키지 busybox
와 busybox-static
패키지 모두에서 켭니다 .
따라서 FEATURE_SH_STANDALONE
및로 컴파일 된 BusyBox 실행 파일이있는 FEATURE_PREFER_APPLETS
경우 실행 파일이 삭제 된 경우에도 BusyBox 쉘에서 모든 BusyBox 명령을 실행할 수 있습니다 (위에 나열되지 않은 애플릿을 제외하고 /proc/self/exe
는 사용할 수없는 경우).
¹ BusyBox에는 ash와 hush라는 두 가지 "sh"구현이 있지만 이와 관련하여 동일한 방식으로 작동합니다.
is there a way to safely test it?
일반 86 다운로드openwrt
이미지를 새로운 버추얼 머신에 이미지를 첨부