我想使用以下命令安装一个名为 42FileChecker 的 bash 脚本:
git clone https://github.com/jgigault/42FileChecker ~/42FileChecker &&
cd ~/42FileChecker &&
bash ./42FileChecker.sh
但我不知道 42FileChecker.sh 是否会在我的 PC 上产生任何奇怪的效果,因为我是初学者,不知道该脚本中发生了什么。有没有办法在虚拟终端或虚拟根文件夹或类似的东西中运行它来查看会发生什么,这样我就可以避免出现格式化驱动器之类的疯狂行为。即使 42FileChecker.sh 是安全的,我也想知道是否有任何方法可以测试未来 shell 脚本的 shell。
答案1
如果您不确定某个脚本的作用,最好不要运行它,直到您确定它的作用为止。减少不良脚本的破坏半径的方法包括使用新用户运行它、在容器中运行它或在虚拟机中运行它。但第一句话仍然适用:如果您不确定某个脚本的作用,请考虑在确定之前不要运行它。
答案2
正如 @ctt 所说,最好先在某种沙箱中运行它。使用虚拟机可能是最简单的解决方案。多程非常简单。
安装 multipass(假设您还没有安装):
sudo snap install multipass --beta --classic
启动一个新的虚拟机:
multipass launch --name myvm
登录到您的新虚拟机:
multipass shell myvm
然后运行你的脚本(在你的虚拟机内):
multipass@myvm:~$ git clone https://github.com/jgigault/42FileChecker ~/42FileChecker && cd ~/42FileChecker && bash ./42FileChecker.sh
答案3
由于您就读的学校已经发布了脚本,因此表达您的担忧的最佳场所是向您的老师提出。
尽管如此,我们可以逐行帮助您解密代码。对于这里的任何人来说,分析代码可能都不切实际全部代码。
你实际上有 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
$
- 没有
rm -rf /
命令可以擦除整个硬盘分区。 - 没有要求必须
sudo
用来运行脚本。 - 该脚本实际上确保
C
在检查的文件中只使用授权的功能。 - 快速浏览 bash/shell 代码表明它是专业编写的并且易于理解。
- 使用外壳检查合并的包含文件仅显示三个语法错误。
- 作者姓名已标明,甚至在其页面上还有主要作者的照片
github
。 - 虽然生活中没有什么保障,但
42FileChecker
使用起来看起来很安全。
你需要担心的并不是人类可读的 Bash 脚本。需要担心的是无法读取的编译二进制对象。例如,一个名为“shiny-bouncy-sphere”的程序可能会在你的屏幕上绘制类似的东西,但在后台它可能会删除你所有的文件。
原始答案
最好询问脚本的作者它的作用。事实上,您几乎可以按照上面显示的内容逐字逐句地发布您的问题。
另请作者:
- 更新了哪些文件?
- 如果由于断电或者程序错误导致崩溃怎么办?
- 可以先进行一次小备份吗?
以及您能想到的任何其他好问题。
编辑 1 – 担心作者恶意。
您应该只使用拥有大量良好公众评价的软件。或者,您也可以选择 Ask Ubuntu 中您信任的作者,例如 Serge、Jacob、Colin King 等。其他受人尊敬的网站(例如 Ask Ubuntu 及其受人尊敬的成员)也应被视为“非恶意的”。
Ask Ubuntu 中“受人尊敬的作者”的优势在于,他们将自己的价值押注于“声誉点数”。如果他们故意编写“窃取”或“损坏”数据的代码,他们很快就会失去声誉。事实上,作者可能会遭受“管理员的愤怒”,被停职和/或被扣掉 10,000 点声誉点数。
编辑 2 - 不要遵循所有说明
我更深入地研究了你的 bash 脚本说明:
git clone https://github.com/jgigault/42FileChecker ~/42FileChecker &&
cd ~/42FileChecker &&
bash ./42FileChecker.sh
“安全”的方法是仅运行第一行:
git clone https://github.com/jgigault/42FileChecker ~/42FileChecker
这会下载脚本但不运行它们。接下来使用nautilus
(文件管理器)检查已安装的目录和文件。很快你就会发现有一组由法国学生编写的 bash 脚本。
脚本的目的是编译和测试 C 程序是否存在不适当的功能和内存泄漏。
答案4
您可以使用 Docker。Docker 容器与主机操作系统隔离,因此任何恶意活动都将保留在容器内,只要您不通过转发端口或挂载文件系统专门将其释放出去。
要安装docker:
sudo apt-get install docker.io
要下载新的 Ubuntu Bionic 容器:
docker pull ubuntu:bionic
之后,登录容器
docker run -it ubuntu:bionic
并在其中执行不正当的操作:
git clone https://github.com/jgigault/42FileChecker ~/42FileChecker && cd ~/42FileChecker && bash ./42FileChecker.sh