我应该在互联网上找到什么预防措施.debs?
前几天我正在浏览网页,我遇到了一些希望我下载.deb
文件的地方 – 因为那些是由root安装的(因此具有root的“权限”和function),我不知道不确定。
需要考虑的事项:
-
这个网站有多知名? 例如,它是一个广告覆盖的随机博客,它是一个论坛上的随机用户,还是一个众所周知的,受人尊敬的网站?
-
声称要安装什么? 例如,它声称安装内核或iconset,但它只有1MB大吗?
-
你有这个
.deb
的内容是多么“重要”?
安全测试方法:
我使用arkose
( 它在标准的回购中 用我的debs(以及其他东西)沙盒 – 用这样的东西:
sudo arkose -n -c "cd $PWD; $SHELL"
这是什么给了我一个“沙箱”(也称为“我可以搞砸了!”),我可以通过写入访问权限访问我的计算机上的所有内容,包括我的主目录 – 所以如果令人讨厌的讨厌.deb
执行sudo rm -rf /*
, 我不会丢失任何数据!
另一个不够强调的是MAKE BACKUPS 。 这些非常有用, 我们对这个主题有很多疑问。
简而言之,只要确保你考虑一下,不要只是下载一个随机的deb并安装它。
如果您从不受信任或可疑来源下载包,请偏执。 在像ubuntuforums.org这样的热门论坛上,如果用户发表的第一篇文章只包含一个简短的文字,例如“安装此版本,适合我!”,然后是链接,请注意该链接和/或说明。
如果可能,请勿使用二进制包,尤其是来自不受信任的来源。 获取源代码(对于官方Ubuntu软件包,可以使用apt-get source package-name
)并查看它。
如果有问题的包装很小,可能值得分析。 我更喜欢使用终端,因为我可以快速访问其他强大的命令行工具,如ls
, find
, file
, less
, vim
, grep
, sed
, dpkg
等等。 利用tab-completion(即点击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
接下来,是时候检查文件本身了。 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 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 ...
在此之后,您将获得包依赖关系及其可能包含的文件类型的概述。 是时候使用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
我们将再次使用less
来分析维护者脚本的内容(即在安装(和删除)期间将使用/运行的文件prerm
, preinst
, postrm
, postinst
是在删除/安装之前/之后运行的脚本,它们是要分析的最重要的文件。使用:n
和:p
在文件之间切换。按=
,可以获得当前文件名和行号以及列表中的文件数。
$ less DEBIAN/*
如果包脚本看起来很清晰,那么就该分析已安装的内容了(使用tab-completion)。 对于shell脚本和解释脚本(如Python),分析更容易(假设您已熟悉该语言)。
$ less fs/usr/bin/nvidia-detector # fs/usr/ 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 (eg nano, vim) to get syntax highlighting if preferable
特别注意配置文件,特别是当它们使用/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) ...
在确定程序包看起来有效之后,您可以继续在VirtualBox中安装它,从Live CD启动并使用ps aux
, top
, strace -f -o logfile.txt programname
进行进一步分析。