
私はその有名なものを読んでいます。Unixの回復凡例、突然知りたいです。
BusyBoxシェルを開き、BusyBoxバイナリ自体が削除された場合でも、BusyBoxバイナリに含まれるすべてのコマンドを使用できますか?
明らかに、このコマンドのBBバージョンは利用できませんその他bash
BusyBoxファイル自体はbash
開かず実行されませんので、同じシェルを実行してください。ただし、実行中の BusyBox インスタンスでは、BB が 2 つの方法でコマンドを実行できるようです。
- BusyBox の新しいインスタンスをフォークして実行し、適切な名前で呼び出し、ディスクから BusyBox ファイルを読み込み、これを行います。
- 指定されたコマンドを実行するために、いくつかの内部ロジックを分岐して実行できます(たとえば、関数呼び出しで実行)。
(1)このBusyBoxがどのように機能するかであれば、BBバイナリを削除した後にBusyBoxが提供するいくつかのコマンドが実行中のBBインスタンスで利用できなくなると予想できます。
(2)がこのように動作する場合、BusyBoxはBB自体が削除されたシステムを回復するためにも使用できます。ただし、まだアクセス可能で実行中の BusyBox インスタンスが必要です。
これはどこにも文書化されていますか?そうでなければ安全にテストする方法はありますか?
答え1
デフォルトでは、BusyBoxは組み込みのアプレット(並列コマンドを使用)でbusybox --help
特別な操作を実行しません。
ただし、コンパイル時にオプションFEATURE_SH_STANDALONE
が有効になっている場合、FEATURE_PREFER_APPLETS
BusyBox sh1は既知のアプレット名でコマンドを実行したときに通常の検索を実行せず、代わりにショートカットを介して組み込みPATH
アプレットを実行します。
- ソースコードで「noexec」と宣言されたアプレットは、分岐プロセスで関数呼び出しとして実行されます。BusyBox 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」と宣言されたアプレットは、同じプロセスで関数呼び出しとして実行されます。BusyBox 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
が、BusyBoxはexecve
クエリを実行せず、代わりに可能であればパスを実行し(通常はLinuxでは)、そうでない場合はコンパイル時に定義されたパスを実行します。PATH
/proc/self/exe
これについての詳細は、次の文書で説明されています。docs/nofork_noexec.txt
。アプレット宣言は次の場所にあります。include/applets.src.h
ソースコードから。
ほとんどのデフォルト設定では、BusyBoxが他のシェルのように外部コマンドを実行するようにこれらの機能を無効にします。 Debian は両方のバージョンでこれらの機能を有効にします。busybox
そしてbusybox-static
バッグ。
FEATURE_SH_STANDALONE
したがって、BusyBox実行可能ファイルを使用してコンパイルした場合は、実行可能ファイルが削除されてもFEATURE_PREFER_APPLETS
BusyBoxシェルですべてのBusyBoxコマンドを実行できます(使用できない場合は上記にリストされていないアプレットを除く)。/proc/self/exe
1 BusyBoxには実際にashとhushの2つの「sh」実装がありますが、この点では同じように動作します。
答え2
答え3
is there a way to safely test it?
これはコマンドのエラーメッセージで確認できます。 busyboxから明示的に呼び出されたときに同じ場合、「アドベンチャー」は失敗します。
私のシステムでsash
シェルを実行すると、まだ使用できます。
user@ulmus-thomasii:~$ echo mv b | busybox sh
mv: Fehlender Zieldatei‐Operand hinter 'b'
„mv --help“ liefert weitere Informationen.
user@ulmus-thomasii:~$ /bin/mv b
/bin/mv: Fehlender Zieldatei‐Operand hinter 'b'
„/bin/mv --help“ liefert weitere Informationen.
user@ulmus-thomasii:~$ echo mv b | sash
mv: Fehlender Zieldatei‐Operand hinter 'b'
„mv --help“ liefert weitere Informationen.
user@ulmus-thomasii:~$ echo -mv b | sash
usage: -mv srcName ... destName
user@ulmus-thomasii:~$