AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1141064
Accepted
ntruter42
ntruter42
Asked: 2019-05-07 13:25:23 +0800 CST2019-05-07 13:25:23 +0800 CST 2019-05-07 13:25:23 +0800 CST

如何在“安全环境”中测试 shell 脚本以避免损坏我的计算机?

  • 772

我想使用以下命令安装一个名为 42FileChecker 的特定 bash 脚本:

git clone https://github.com/jgigault/42FileChecker ~/42FileChecker &&
    cd ~/42FileChecker &&
    bash ./42FileChecker.sh

但我不知道 42FileChecker.sh 是否会在我的 PC 上做任何奇怪的事情,因为我是初学者并且不知道该脚本中发生了什么。有没有办法在虚拟终端或虚拟根文件夹或类似的东西中运行它,看看会发生什么,这样我就可以避免像格式化我的驱动器这样的疯狂事情。即使 42FileChecker.sh 是安全的,我也想知道有什么方法可以为将来的 shell 脚本测试 shell。

scripts testing safely
  • 7 7 个回答
  • 8052 Views

7 个回答

  • Voted
  1. ctt
    2019-05-07T13:38:03+08:002019-05-07T13:38:03+08:00

    如果您不确定脚本的作用,最好在确定它的作用之前不要运行它。减少坏脚本的损坏半径的方法包括使用新用户运行它、在容器中运行它或在虚拟机中运行它。但是第一个陈述仍然成立:如果您不确定某事是做什么的,请考虑在您执行之前不要运行它。

    • 42
  2. Ryan J. Yoder
    2019-05-07T13:42:10+08:002019-05-07T13:42:10+08:00

    正如@ctt 所说,首先在某种沙箱中运行它可能是个好主意。使用 VM 可能是最简单的解决方案。多通道非常简单。

    安装多通道(假设你还没有):

    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
    
    • 29
  3. WinEunuuchs2Unix
    2019-05-07T13:52:11+08:002019-05-07T13:52:11+08:00

    由于您所就读的学校已经发布了这些脚本,因此表达您的担忧的最佳场所是您的导师。

    也就是说,我们可以帮助您逐行破译代码。这里的任何人都分析所有代码可能是不切实际的。

    您实际上有 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 代码表明它是专业编写的并且易于理解。
    • 对合并的包含文件使用shellcheck只会显示三个语法错误。
    • github作者姓名被识别,主要作者甚至在他的页面上都有他的照片。
    • 虽然在生活中没有任何保证,但42FileChecker似乎可以安全使用。

    您需要担心的不是人类可读的 bash 脚本。它是您无法读取的编译二进制对象,这是令人担忧的。例如,一个名为“shiny-bouncy-sphere”的程序可能会在您的屏幕上绘制类似的内容,但在后台它可能会擦除您的所有文件。


    原始答案

    最好询问脚本的作者它的作用。事实上,您几乎可以逐字发布您的问题,如上所示。

    还问作者:

    • 更新了哪些文件?
    • 如果由于电源故障或程序错误而崩溃会怎样?
    • 可以先进行小型备份吗?

    以及您能想到的任何其他好问题。


    编辑 1 - 担心恶意作者。

    您应该只使用具有大量良好公众评论的软件。您在 Ask Ubuntu 中信任的其他作者,如 Serge、Jacob、Colin King 等。其他受人尊敬的网站(如 Ask Ubuntu)及其受人尊敬的成员也应被视为“非恶意”。

    Ask Ubuntu 中“受人尊敬的作者”的优势在于他们将自我价值押在“声誉点”上。如果他们故意编写“窃取”或“损坏”数据的代码,他们将很快失去声誉。事实上,作者可能会遭受“mods 的愤怒”并被暂停和/或被带走 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 程序的不当功能和内存泄漏。

    • 11
  4. Syfer Polski
    2019-05-08T11:44:38+08:002019-05-08T11:44:38+08:00

    您可以使用 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
    
    • 5
  5. Best Answer
    Thomas
    2019-05-09T04:18:11+08:002019-05-09T04:18:11+08:00

    我不是这方面的专家,但我建议使用straceand docker。

    因此,首先按照此答案中的说明创建一个 Docker 容器。但是除了 strace 之外,它还会告诉您进行了哪些系统调用。或引用:

    strace 是用于 Linux 的诊断、调试和指导性用户空间实用程序。它用于监视和篡改进程与 Linux 内核之间的交互,包括系统调用、信号传递和进程状态的变化。

    您可以将这些命令组合到

    docker exec -it ubuntu_container strace bash ./42FileChecker.sh
    
    • 5
  6. guest
    2019-05-09T02:53:25+08:002019-05-09T02:53:25+08:00

    考虑通过运行脚本来使用调试模式:

    $ bash -x scriptname
    

    更多有用的 Bash信息

    调试模式不会阻止脚本做坏事,但它会让你逐行检查脚本并检查效果。您还可以检查脚本是否有一些常见的潜在错误和/或漏洞,例如搜索脚本以查找任何出现的情况rm并非常仔细地查看这些命令。许多这些工具都内置了一些帮助来尝试它们,例如 rm 默认情况下不会删除目录,它需要-r、-R或--recursive选项来执行此操作。

    甚至可能有一些类似防病毒的工具会在 bash 脚本中搜索这些模式,但我不知道任何名称。您的示例脚本有点额外的不确定,因为它们下载了其他工具,因此还应该检查每个工具。检查他们联系的服务器也可能是值得的。

    • 3
  7. Damon
    2019-05-08T23:56:00+08:002019-05-08T23:56:00+08:00

    不幸的是,只能在您的评论中找到提供答案的相关信息:

    我在 Ecole 42 课程中学习 C。我正在制作的功能需要通过这个规范检查。我需要在 Ubuntu 中安装 42FileChecker 来运行这个常规检查。

    所以情况是,在实践中,您可以选择跳过课程,或者您可以运行脚本来对您的资源进行规范检查。与您的讲师交谈几乎不是一种选择,因为缺少前者(否则无论如何都不是一种选择,没有学校会改变他们的程序,因为一个学生对此不满意)。
    因此,甚至没有出现如何限制该脚本可能造成的损害的问题。这不是一个大乳房角质女孩通过电子邮件发送给您的随机脚本,您需要运行才能看到她的照片。
    你正在上编程课。这个是这个脚本发挥作用的地方。问题是您是否要遵守成功完成课程的框架条件。

    但是,如果您真的担心,仍然可以在容器或虚拟机中运行脚本,并将您的源代码放在共享文件夹中,或者放在容器/虚拟机公开的网络共享中。这几乎是完全偏执的道路,但是现在虚拟化并没有那么复杂,所以它的成本并不高。

    除非该脚本中包含非常严重的漏洞利用的可能性很小,否则以任何非 root 用户身份登录(在 Ubuntu 上您几乎无法选择这样做)并避免 sudo无缘无故地输入几乎可以防止 99%无论如何都可能发生的所有坏事。比如格式化硬盘,这是你担心的。普通用户无法做到这一点。最糟糕的事情是脚本会擦除用户的主目录。那又怎样,没问题,真的。

    • 2

相关问题

  • 如何每 5 秒运行一次脚本?

  • 如何将必须从其自己的目录中运行的程序添加到面板或主菜单?

  • 如何编写 shell 脚本来安装应用程序列表?

  • Mac OS X Automator 的替代品?

  • 我如何参与 Ubuntu 的测试和 QA?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve