기본적으로 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이미지를 새로운 버추얼 머신에 이미지를 첨부