我应该对在互联网上找到的 .debs 采取哪些预防措施?

jrg*_*jrg 29 package-management security deb

所以前几天我在浏览网页,我遇到了一些要我下载.deb文件的地方 - 由于这些是由 root 安装的(因此具有 root 的“权力”和能力),我不是确定。

jrg*_*jrg 32

需要考虑的事项:

  • 该网站的知名度如何?例如,它是一个被广告覆盖的随机博客,它是某个论坛上的一个随机用户,还是一个众所周知的、受人尊敬的网站?

  • 它声称要安装什么?例如,它是否声称安装了内核或图标集,但它只有 1MB 大吗?

  • 你有这个内容有多“重要” .deb

安全测试事物的方法:

我使用arkose它在标准回购 安装 arkose ) 与我的 debs (和其他东西) 沙箱 - 使用它像这样:

sudo arkose -n -c "cd $PWD; $SHELL"

它给了我一个“沙箱”(也称为“YAY I CAN SCREW UP!”),对我计算机上的所有内容(包括我的主目录)进行写时复制访问 - 所以如果讨厌讨厌,.deb'不要丢失任何数据!sudo rm -rf /*

另一件压力不够的事情是MAKE BACKUPS。这些非常有帮助,我们有很多关于这个主题的问题。

简而言之,只要确保你考虑一下,不要只是下载一个随机的 deb 并安装它。

  • 用文件滚轮打开`.deb` 看看里面有什么。虽然我必须说我在 Ubuntu 论坛上的一个随机线程上从一个随机用户那里下载了一个随机 deb 来解决我的打印机问题,但它确实有效。 (2认同)

Lek*_*eyn 20

如果您从不受信任或可疑的来源下载软件包,请保持警惕。在像 ubuntuforums.org 这样的流行论坛上,如果用户的第一篇帖子只包含一个简短的文本,例如“安装这个,对我有用!”,然后是一个链接,请注意该链接和/或说明。

如果可能,不要使用二进制包,尤其是来自不受信任的来源。获取源代码(对于官方 Ubuntu 软件包,可以使用 完成apt-get source package-name)并查看它。

如果有问题的包很小,则可能值得对其进行分析。我更喜欢使用终端,因为我可以快速访问其他强大的命令行工具,例如ls, find, file, less, vim, grep, sed,dpkg以及许多其他工具。利用制表符补全(即点击补Tab全命令和文件名),真的很节省时间!

要下载 .deb 文件,您可以使用浏览器,但复制链接然后使用wget会更快,因为您已经可以对其进行试验。

$ mkdir /tmp/foo && cd /tmp/foo
$ wget http://nl.archive.ubuntu.com/ubuntu/pool/main/n/nvidia-common/nvidia-common_0.2.35_amd64.deb
Run Code Online (Sandbox Code Playgroud)

接下来,是时候检查文件本身了。less(通过lesspipe)可以提供文件内容的快速概览。箭头键、向上/向下翻页、主页/结束可用于导航、Q退出程序。

$ less nvidia-common_0.2.35_amd64.deb
nvidia-common_0.2.35_amd64.deb:
 new debian package, version 2.0.
 size 10802 bytes: control archive= 1877 bytes.
     197 bytes,    11 lines   *  config               #!/bin/sh
     703 bytes,    16 lines      control              
     741 bytes,    10 lines      md5sums              
     163 bytes,     9 lines   *  postinst             #!/bin/sh
     206 bytes,     8 lines   *  postrm               #!/bin/sh
     827 bytes,    38 lines   *  preinst              #!/bin/sh
     263 bytes,    14 lines   *  prerm                #!/bin/sh
     365 bytes,    12 lines      templates            
 Package: nvidia-common
 Version: 1:0.2.35
 Architecture: amd64
 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
 Installed-Size: 156
 Pre-Depends: dpkg (>= 1.15.7.2)
 Depends: python2.7 | python2.6, python (>= 2.7.1-0ubuntu2), python (<< 2.8), debconf (>= 0.5.00) | debconf-2.0, pciutils, python-apt
 Conflicts: nvidia-180-modaliases, nvidia-185-modaliases, nvidia-current-modaliases
 Replaces: nvidia-180-modaliases, nvidia-185-modaliases, nvidia-current-modaliases
 Section: admin
 Priority: optional
 Description: Find obsolete NVIDIA drivers
  This package will find obsolete NVIDIA drivers in use,
  detect the hardware and recommend the most appropriate
  driver.
 Python-Version: 2.6, 2.7

*** Contents:
drwxr-xr-x root/root         0 2011-09-07 11:06 ./
drwxr-xr-x root/root         0 2011-09-07 11:06 ./usr/
drwxr-xr-x root/root         0 2011-09-07 11:06 ./usr/share/
drwxr-xr-x root/root         0 2011-09-07 11:06 ./usr/share/doc/
drwxr-xr-x root/root         0 2011-09-07 11:06 ./usr/share/doc/nvidia-common/
-rw-r--r-- root/root      1174 2011-09-07 11:07 ./usr/share/doc/nvidia-common/changelog.gz
-rw-r--r-- root/root       466 2011-06-24 14:45 ./usr/share/doc/nvidia-common/copyright
...
Run Code Online (Sandbox Code Playgroud)

在此之后,您将大致了解包的依赖关系以及它可能包含的文件类型。是时候提取文件并使用dpkg-deb. 第一个命令在新创建的目录中提取文件树fs,第二个命令将其提取到,DEBIAN因为没有指定其他目标:

$ dpkg-deb -x nvidia-common_0.2.35_amd64.deb fs
$ dpkg-deb -e nvidia-common_0.2.35_amd64.deb
Run Code Online (Sandbox Code Playgroud)

我们将使用less重新分析将使用/安装(和删除)期间运行维护脚本(即文件的内容。prermpreinstpostrmpostinst是剧本后取出之前运行/ /安装这是分析最重要的文件. 使用:n:p在文件之间切换. 通过按=,您可以获得当前文件名和行号以及列表中的文件数。

$ less DEBIAN/*
Run Code Online (Sandbox Code Playgroud)

如果包脚本看起来正常,就该分析已安装的内容(使用制表符补全)。对于 shell 脚本和解释脚本(如 Python),分析更容易(假设您熟悉该语言)。

$ less fs/usr/bin/nvidia-detector    # fs<TAB><TAB>/usr/ <TAB><TAB>bin ...
$ less fs/usr/lib/nvidia/pre-install
$ ls -la fs/usr/lib     # quickly check the directory contents, my memory is weak
drwxr-xr-x 5 peter peter 100 2011-09-07 11:06 .
drwxr-xr-x 5 peter peter 100 2011-09-07 11:06 ..
drwxr-xr-x 2 peter peter  60 2011-09-07 11:06 nvidia
drwxr-xr-x 3 peter peter  60 2011-09-07 11:06 python2.6
drwxr-xr-x 3 peter peter  60 2011-09-07 11:06 python2.7
$ # I conclude: python2.6 is not a symlink to python2.7
$ less fs/usr/lib/python2.7/dist-packages/NvidiaDetector/*
press 'v' to open an editor (e.g. nano, vim) to get syntax highlighting if preferable
Run Code Online (Sandbox Code Playgroud)

请特别注意配置文件,尤其是当它们使用/etc/init(用于启动脚本)或/etc/modprobe.d(用于加载内核模块的选项)等目录时。

对于二进制文件,ldd可以给出一个程序可以用于什么的想法。下面的程序看起来像一个使用 OpenGL 的图形程序。

$ ldd /usr/bin/glxgears
    linux-vdso.so.1 =>  (0x00007fff7d3ff000)
    libGL.so.1 => /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 (0x00007fa2ead11000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa2eaa8d000)
    libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fa2ea754000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa2ea3b5000)
...
Run Code Online (Sandbox Code Playgroud)

你之后确保包装看起来有效,可以继续在VirtualBox中启动安装它关闭一个Live CD和使用ps auxtopstrace -f -o logfile.txt programname作进一步的分析。