ntr*_*r42 29 testing scripts safely
我想使用以下命令安装一个名为 42FileChecker 的 bash 脚本:
git clone https://github.com/jgigault/42FileChecker ~/42FileChecker &&
cd ~/42FileChecker &&
bash ./42FileChecker.sh
Run Code Online (Sandbox Code Playgroud)
但是我不知道 42FileChecker.sh 是否会在我的 PC 上做任何奇怪的事情,因为我是初学者并且不知道该脚本中发生了什么。有没有办法在虚拟终端或虚拟根文件夹或类似的东西中运行它以查看会发生什么,以便我避免像格式化驱动器这样的疯狂事情。即使 42FileChecker.sh 是安全的,我也想知道有什么方法可以为未来的 shell 脚本测试 shell。
小智 41
如果您不确定脚本的作用,最好不要运行它,直到您确定它的作用。减少坏脚本损坏半径的方法包括使用新用户运行它、在容器中运行它或在虚拟机中运行它。但是第一个声明仍然成立:如果您不确定某个东西的作用,请考虑在您确定之前不要运行它。
Rya*_*der 29
正如@ctt 所说,首先在某种沙箱中运行它可能是个好主意。使用 VM 可能是最简单的解决方案。多通道非常简单。
安装 multipass(假设您还没有安装):
sudo snap install multipass --beta --classic
Run Code Online (Sandbox Code Playgroud)
启动一个新的虚拟机:
multipass launch --name myvm
Run Code Online (Sandbox Code Playgroud)
登录到您的新虚拟机:
multipass shell myvm
Run Code Online (Sandbox Code Playgroud)
然后运行您的脚本(在您的虚拟机内):
multipass@myvm:~$ git clone https://github.com/jgigault/42FileChecker ~/42FileChecker && cd ~/42FileChecker && bash ./42FileChecker.sh
Run Code Online (Sandbox Code Playgroud)
Win*_*nix 11
也就是说,我们可以帮助您逐行破译密码。对于这里的任何人来说,分析所有代码可能是不切实际的。
您实际上有 40 个 bash 脚本,总共 5,360 行。我将它们组合在一起并寻找可能被滥用的 bash/shell 命令。它们似乎都可以正常使用:
$ cat /tmp/sshellcheck.mrg | grep " rm "
rm -rf "$RETURNPATH"/tmp/*
rm -f "$RETURNPATH"/.mynorminette
rm -f $LOGFILENAME
rm -f $LOGFILENAME
rm -f .mymoulitest
rm -f "${RETURNPATH}/tmp/${FILEN}"
$ cat /tmp/sshellcheck.mrg | grep -i kill
function check_kill_by_name
kill $PROCESSID0
declare -a CHK_MINISHELL_AUTHORIZED_FUNCS='(malloc free access open close read write opendir readdir closedir getcwd chdir stat lstat fstat fork execve wait waitpid wait3 wait4 signal kill exit main)'
check_kill_by_name "${PROGNAME}"
kill -0 "${CURRENT_CHILD_PROCESS_PID}" 2>/dev/null && kill "${CURRENT_CHILD_PROCESS_PID}" 2>/dev/null
display_error "killed pid: ${CURRENT_CHILD_PROCESS_PID}"
check_kill_by_name "$PROGNAME $PROGARGS"
check_kill_by_name "$PROGNAME $PROGARGS"
kill ${PID} 2>/dev/null
$ cat /tmp/sshellcheck.mrg | grep -i root
"check_configure_select ROOT" "Root folder: /"\
'ROOT')
echo "'${ALLOWED_FILES}' must be placed at root folder but was found here:" >>"${LOGFILENAME}"
printf "%s" "'${ALLOWED_FILES}' must be placed at root folder"
$ cat /tmp/sshellcheck.mrg | grep -i sudo
$
Run Code Online (Sandbox Code Playgroud)
rm -rf /擦除整个硬盘分区的命令。sudo用于运行脚本的要求。C在检查的文件中只使用授权的函数。github页面上都有他的照片。42FileChecker使用起来似乎是安全的。您需要担心的不是人类可读的 bash 脚本。它是编译后的二进制对象,您无法阅读,这是令人担忧的。例如,一个名为“shiny-bouncy-sphere”的程序可能会在您的屏幕上绘制类似的内容,但在后台它可能会擦除您的所有文件。
最好询问脚本的作者它的作用是什么。实际上,您几乎可以像上面那样逐字逐句地发布您的问题。
还请教作者:
以及您能想到的任何其他好问题。
您应该只使用具有大量良好公众评价的软件。或者,您在 Ask Ubuntu 中信任的作者,如 Serge、Jacob、Colin King 等。其他受人尊敬的网站,如 Ask Ubuntu 及其受人尊敬的成员也应被视为“非恶意”。
Ask Ubuntu 中“受人尊敬的作者”的优势在于他们将自我价值押在“声誉点”上。如果他们故意编写“窃取”或“损坏”数据的代码,他们将很快失去声誉。事实上,作者可能会遭受“模组的愤怒”并被暂停和/或失去 10,000 的声望点。
我深入研究了您的 bash 脚本说明:
git clone https://github.com/jgigault/42FileChecker ~/42FileChecker &&
cd ~/42FileChecker &&
bash ./42FileChecker.sh
Run Code Online (Sandbox Code Playgroud)
“安全”方法是只运行第一行:
git clone https://github.com/jgigault/42FileChecker ~/42FileChecker
Run Code Online (Sandbox Code Playgroud)
这会下载脚本但不会运行它们。接下来使用nautilus(文件管理器)检查安装的目录和文件。很快您就会发现有一组 bash 脚本是由法国的一群学生编写的。
脚本的目的是编译和测试 C 程序的不正确功能和内存泄漏。
您可以使用 Docker。Docker 容器与主机操作系统隔离,因此任何恶意活动都将保留在容器内,只要您不通过转发端口或挂载文件系统来明确释放它。
安装泊坞窗:
sudo apt-get install docker.io
Run Code Online (Sandbox Code Playgroud)
要下载新的 Ubuntu Bionic 容器:
docker pull ubuntu:bionic
Run Code Online (Sandbox Code Playgroud)
之后,登录容器
docker run -it ubuntu:bionic
Run Code Online (Sandbox Code Playgroud)
并在其中执行狡猾的操作:
git clone https://github.com/jgigault/42FileChecker ~/42FileChecker && cd ~/42FileChecker && bash ./42FileChecker.sh
Run Code Online (Sandbox Code Playgroud)
小智 5
我不是这方面的专家,但我建议使用strace和docker。
因此,首先按照此答案中的说明创建一个 Docker 容器。但补充的是 strace 会告诉你进行了哪些系统调用。或者引用:
strace 是一个用于 Linux 的诊断、调试和指导用户空间实用程序。它用于监视和篡改进程与 Linux 内核之间的交互,包括系统调用、信号传递和进程状态的更改。
您可以将这些命令组合起来
docker exec -it ubuntu_container strace bash ./42FileChecker.sh
Run Code Online (Sandbox Code Playgroud)