git bashを使用しています Windowsの場合。 lsを実行したい bashを使用したコマンド 。 lsを実行できます 個別にこのように:
$ ls
f1 f2
ただし、bashを試してみると 、エラーが発生します:
$ bash ls
/usr/bin/ls: /usr/bin/ls: cannot execute binary file
ただし、スクリプトを作成すると正常に機能します:
$ echo "echo [email protected]" > my.sh && bash my.sh
何が問題になる可能性がありますか?
承認された回答:
bash(1)の詳細なマニュアルから :
引数
オプション処理後に引数が残り、-cオプションも
-sオプションも指定されていない場合、最初の引数は
ファイルの名前であると見なされます シェルコマンドを含みます。
lsを実行しますか シェルコマンドが含まれていますか?いいえ、バイナリファイルです。 bash この事実について口論して失敗します。
strace 何が起こっているかを示すのに役立つかもしれません:
$ strace -o alog bash ls
/usr/bin/ls: /usr/bin/ls: cannot execute binary file
alog ファイルは少し乱雑になる可能性がありますが、bashが表示されます lsを探しています 現在の作業ディレクトリ内—誰かがいたずらなlsを配置した場合のセキュリティリスク どこかにファイルします!—そしてPATHを実行します 検索:
$ grep ls alog
execve("/usr/bin/bash", ["bash", "ls"], [/* 43 vars */]) = 0
open("ls", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/bin/ls", 0x7fff349810f0) = -1 ENOENT (No such file or directory)
stat("/usr/bin/ls", {st_mode=S_IFREG|0755, st_size=117672, ...}) = 0
stat("/usr/bin/ls", {st_mode=S_IFREG|0755, st_size=117672, ...}) = 0
access("/usr/bin/ls", X_OK) = 0
stat("/usr/bin/ls", {st_mode=S_IFREG|0755, st_size=117672, ...}) = 0
access("/usr/bin/ls", R_OK) = 0
stat("/usr/bin/ls", {st_mode=S_IFREG|0755, st_size=117672, ...}) = 0
stat("/usr/bin/ls", {st_mode=S_IFREG|0755, st_size=117672, ...}) = 0
access("/usr/bin/ls", X_OK) = 0
stat("/usr/bin/ls", {st_mode=S_IFREG|0755, st_size=117672, ...}) = 0
access("/usr/bin/ls", R_OK) = 0
open("/usr/bin/ls", O_RDONLY) = 3
bash somecmdを実行すると、これがセキュリティリスクになる理由について 誰かがlsを作成した間違ったディレクトリから (またはスクリプトのバグによるその他の既知のコマンド):
$ echo "echo rm -rf /" > ls
$ bash ls
rm -rf /
$