树莓派是如何免疫 Meltdown 和 Spectre 漏洞的

原文作者:Eben Upton。参与:路雪、黄小天、李泽南

过去几天,对 Meltdown 和 Spectre 安全漏洞的讨论甚嚣尘上。该漏洞影响了所有的现代英特尔处理器,Spectre 还影响了 AMD 处理器和 ARM 内核。Spectre 漏洞使得攻击者可以绕过软件检查读取当前地址空间中的任意位置数据;Meltdown 漏洞使得攻击者可以读取操作系统核地址空间的任意位置数据(用户程序通常不可访问该数据)。这两种漏洞皆通过边信道攻击(side-channel attack)利用很多现代处理器都有的性能特征(缓存和推测执行)泄漏数据。近日,树莓派创始人 Eben Upton 称树莓派不受这些漏洞的影响,并撰文详解其原因。

谷歌 Project Zero 团队发现的漏洞分别被称为“Meltdown”和“Specter”。这些漏洞允许恶意程序从其它程序的内存中窃取信息,这意味着恶意程序可以监听密码、账户信息、密钥及理论上存储在进程中的任何内容。

其中,“Meltdown”影响英特尔处理器,它打破了用户应用程序和操作系统之间最基本的隔离。这种攻击允许程序访问其它程序和操作系统的内存,这可能导致数据泄露。而“Spectre”除了能影响英特尔处理器外,还能影响 AMD 与 ARM 架构的大量处理器,这意味着除服务器与个人电脑以外,智能手机等终端设备也会受到影响,几乎所有现代计算机处理器均无法幸免。它打破了不同应用程序之间的隔离,这意味着,攻击者可以使用恶意程序来获取被隔离的私有数据。

英特尔近日表示,在未来数周内将有软件补丁发布。尽管大多数 PC 用户不会受到影响,但安全补丁会导致处理器 0-30% 的运算速度下降。

根据Eben Upton所述,大量类似树莓派的廉价计算设备可能同样也不会受到两种安全漏洞的影响,包括很多低端安卓手机。

本文介绍现代处理器设计的一些概念,使用简单的 Python 程序解释这些概念,比如:

t = a+b
u = c+d
v = e+f
w = v+g
x = h+i
y = j+k

尽管你的计算机处理器不会直接执行 Python,但这里的语句足够简单,大致相当于简单的机器指令。本文不详述过多处理器设计中的重要细节(主要是 pipelining 和寄存器重命名),它们对理解 Spectre 和 Meltdown 的工作原理不太重要。

想全面了解处理器设计和现代计算机架构,可参阅 Hennessy 和 Patterson 的经典著作《Computer Architecture: A Quantitative Approach》。

什么是标量处理器?

最简单的现代处理器每次循环执行一个指令,我们称之为标量处理器。上述示例在标量处理器上需要执行六次循环。

树莓派 1 和树莓派 Zero 中使用的 Intel 486 和 ARM1176 都是标量处理器。

什么是超标量处理器?

很明显,加速标量处理器的方式就是提高其时钟频率(clock speed)。但是,我们很快就到达处理器内部逻辑门运行的极限;因此处理器设计人员开始寻找一次性处理多件事情的方式。

有序超标量处理器检查收到的大批指令,尝试在一个 pipeline 中一次性执行多个指令,这取决于指令之间的依赖关系。依赖关系很重要:你或许认为双向超标量处理器可以将 6 个指令配对执行,如下所示:

t, u = a+b, c+d
v, w = e+f, v+g
x, y = h+i, j+k

但是这没有作用:我们必须先计算 v 再计算 w,即第三个和第四个指令无法同时执行。双向超标量处理器实际上无法找到与第三个指令配对的指令,因此,该示例将执行四个循环:

t, u = a+b, c+d
v    = e+f                   # second pipe does nothing here
w, x = v+g, h+i
y    = j+k

超标量处理器包括 Intel Pentium 以及树莓派 2 和树莓派 3 分别使用的 ARM Cortex-A7 和 Cortex-A53。树莓派 3 的时钟频率只比树莓派 2 高 33%,但性能大约是后者的 2 倍:部分原因在于 Cortex-A53 超出 Cortex-A7 的对大量指令的配对执行能力。

什么是无序处理器(out-of-order processor)?

回到我们的示例,我们可以看到即使 v 和 w 之间存在依赖关系,我们也可以找到其他独立的指令填补第二次循环中空的 pipe。无序超标量处理器能够打乱指令的顺序(同样受限于指令之间的依赖关系)以保持每个 pipeline 都处于忙碌状态。

无序处理器可以有效交换 w 和 x 的顺序:

t = a+b
u = c+d
v = e+f
x = h+i
w = v+g
y = j+k

允许执行三次循环:

t, u = a+b, c+d
v, x = e+f, h+i
w, y = v+g, j+k

无序处理器包括 Intel Pentium 2(以及大部分后续 Intel 和 AMD x86 处理器,除了一些 Atom 和 Quark 设备)和很多近期的 ARM 处理器,如 Cortex-A9、-A15、-A17、-A57。

什么是分支预测器(branch predictor)?

上述示例是直线式代码块。真正的程序不是这样的:他们还包括正向分支(用于实现条件运算,如 if 语句)、反向分支(用于实现 loop)。分支可能是无条件的(通常被采用),也可能是有条件的(是否采用取决于计算值)。

获取指令时,处理器可能遇到依赖于计算值的条件分支(而该值目前尚未计算出)。为了避免停顿,处理器必须猜测下一个要获取的指令:内存顺序(对应未采用分支)或分支目标(对应采用分支)上的下一个指令。分支预测器通过收集某一个分支之前被采用频率的相关统计数据,帮助处理器猜测该分支是否被采用。

现在分支预测器非常复杂,可以生成非常准确的预测。树莓派 3 的额外性能部分是由于 Cortex-A7 和 Cortex-A53 之间分支预测的改进。但是,攻击者也可以通过执行精心设计的一系列分支,误训练分支预测器作出较差的预测。

什么是推测?

重排序顺序指令(reordering sequential instruction)是一种恢复指令级别并行化的强大方法,但是由于处理器变得更宽(能够一次执行三个或四个指令),保证所有 pipeline 处于忙碌状态变得更难了。因此,现代处理器提高了推测能力。推测执行可以处理并不需要的指令:这样就可以保证 pipeline 处于忙碌状态,如果最后该指令没有被执行,我们只需要放弃结果就可以了。

推测执行不必要的指令(以及支持推测和重排序的基础架构)需要耗费大量能源,但是在很多情况下为了获取单线程性能的提升,这种方法是值得的。分支预测器用于选择通过程序最可能的路径,最大化推测获得收益的可能性。

为了展示推测的好处,我们可以看一下另一个示例:

t = a+b
u = t+c
v = u+d
if v:
   w = e+f
   x = w+g
   y = x+h

现在,我们具备从 t 到 u 到 v、从 w 到 x 到 y 的依赖关系,那么没有推测的双向无序处理器无法填充第二个 pipeline。它用三次循环来计算 t、u 和 v,之后处理器知道 if 语句的主体是否被执行,然后用三次循环来计算 w、x 和 y。假设 if(由一个分支指令实现)使用了一次循环,那么该示例可以执行四次(v 是零)或七次循环(v 不是零)。如果分支预测器表明 if 语句的主体很可能被执行,那么推测可以有效打乱程序,如下:

t = a+b
u = t+c
v = u+d
w_ = e+f
x_ = w_+g
y_ = x_+h
if v:
   w, x, y = w_, x_, y_

因此现在我们有了额外的指令级别的并行来保持 pipeline 繁忙:

t, w_ = a+b, e+f
u, x_ = t+c, w_+g
v, y_ = u+d, x_+h
if v:
   w, x, y = w_, x_, y_

循环计数在推测性无序处理器中变得不太明确,但是 w、x 和 y 的分支和条件更新(几乎)是空闲的,因此上述示例几近于执行三个循环。

什么是缓存?

在过去,处理器速度与内存访问速度成正比。我的 BBC Micro(2MHz 6502),可以每 2μs(微秒)执行一次指令,存储周期为 0.25μs。在接下来的 35 年中,处理器已经变的非常快,但是内存几乎没变化:树莓派 3 中的一个 Cortex-A53 可以每 0.5ns(纳秒)执行一次指令,但是可能需要 100ns 才能访问主存。

a = mem[0]
b = mem[1]

需要 200ns。

但在实践中,程序倾向于以相对可预测的方式访问内存,同时展示时间局部性(如果我访问一个定位,我很可能很快再次访问它)和空间局部性(如果我访问一个定位,我很可能很快访问附近的位置)。缓存利用这些属性来降低访问内存的平均成本。

缓存是一个小的片上内存,接近于处理器,存储最近使用的位置(及其近邻)内容的副本,以便在随后的访问中可以快速获取。借助缓存,上述示例的执行将稍微超过 100ns:

a = mem[0]    # 100ns delay, copies mem[0:15] into cache
b = mem[1]    # mem[1] is in the cache

从 Spectre 和 Meltdown 的角度来看,最重要的一点是你可以对内存访问的时间进行计时,你可以知道访问的地址是在缓存之中(短时)或者不在(长时)。

什么是边信道?

来自维基百科:

“边信道攻击是基于从密码系统的物理实现获得的信息的任何攻击,而不是算法中的蛮力或理论弱点(相较于密码分析学)。例如,定时信息、功耗、电磁泄漏甚至声音都可以提供额外的信息源,这些信息可被用来破解系统。”

Spectre 和 Meltdown 属于边信道攻击,通过定时来观察缓存中是否有另一个可访问的位置,以推断内存位置的内容,这些内容通常不应该被访问。

把它放在一起

现在让我们看看如何结合推测和缓存以允许类似 Meltdown 的攻击。考虑下面这个示例,它是一个有时读取所有非法(内核)地址的用户程序,并导致错误(崩溃):

t = a+b
u = t+c
v = u+d
if v:
   w = kern_mem[address]   # if we get here, fault
   x = w&0x100
   y = user_mem[x]

现在,假设我们可以训练分支预测器,使其相信 v 很可能是非零的,那么我们的无序双向超标量处理器就会混洗程序,像这样:

t, w_ = a+b, kern_mem[address]
u, x_ = t+c, w_&0x100
v, y_ = u+d, user_mem[x_]

if v:
   # fault
   w, x, y = w_, x_, y_      # we never get here

即使处理器总是推测性地读取内核地址,它必须推迟产生的错误,直到知道 v 是非零。从表面上看,这是安全的,因为:

  • v 是零,所以非法读取的结果不会被提交给 w
  • v 是非零,但在读取结果被提交给 w 之前发生了错误

然而,假设我们在执行代码之前刷新缓存,并排列 a、b、c、d 以使 v 实际上为零。现在第三个循环中的推测性读取为:

v, y_ = u+d, user_mem[x_]

其将依赖非法读取结果的第八位获取用户地址 0x000 或 0x100,并把地址及其近邻加载进缓存。由于 v 是零,推测性指令的结果将被摈弃,执行将继续。如果我们随后访问其中一个地址,就可以决定哪个地址在缓存之中。恭喜:你刚刚从内核地址空间读取了一个位!

真正的 Meltdown 实际上要比这更复杂(特别是,为了避免错误训练分支预测器,作者无条件地优先执行非法读取,并处理产生的异常),但原理是相同的。Spectre 使用相似方法来颠覆软件阵列边界检查。

结论

现代处理器竭尽全力保持抽象,从而成为直接访问内存的有序标量机器,而事实上,使用包括缓存、指令重排序和推测在内的大量技术来提供比简单处理器更高的性能有望成为现实。Meltdown 和 Spectre 就是当我们在抽象的语境中推理安全性,然后在抽象与现实之间遇到细微差别时会发生的事情的实例。

树莓派使用的 ARM1176、Cortex-A7 和 Cortex-A53 内核中推测的缺失使我们免于此类攻击。

译文出处

本文来自:树莓派实验室

树莓派网络存储(NAS) OpenMediaVault 安装配置

OpenMediaVault,是一个开源的基于 Debian Linux 的下一代网络附加存储(NAS)解决方案。它包含众多服务,如 SSH、(S)FTP、SMB / CIFS、DAAP 媒体服务器、RSync、BitTorrent 客户机等。并具有通过插件可增强的模块化设计框架特性。其核心如下:

  • Debian Linux(Squeeze)系统(i386 or x64)
  • 基于Web方式的系统管理
  • 通过Debian软件包简单的系统升级
  • 用户管理
  • 计划任务
  • 多语言支持(0.4.18版支持繁体中文)
  • 基于DNS-SD(Apple’s protocol)的服务公告
  • 插件系统

下面介绍如何在树莓派上安装配置 OpenMediaVault,方便快捷地搭建 NAS。

一.准备工作

1.树莓派1/2/3型 开发板(我用的是3B),适配的5V2A电源;
2.TF卡(不小于4G),TF 读卡器,/boot (vfat)占55.95MB,OWN (ext4) 占3.18GB
3.一台PC,Windows系统。
4.一台显示器或都电视机,HDMI接口,HDMI线。(其实不用显示设备也是可以的,可以SSH在电脑端操作。
5.一块移动硬盘,最好再配个有源USB-Hub
6.TF镜像。找到对应Pi的型号的镜像,omv_2.2.5_rpi2_rpi3.img.gz 或 omv_2.0.15_rpi_rpi2.img.gz 。
下载地址:https://sourceforge.net/projects/openmediavault/files/Raspberry%20Pi%20images/
或者百度网盘(密码: t8gm)。
7.镜像读写工具 win32diskimager
8.磁盘分区工具 DiskGenius
9.远程SSH  PuTTY

二.刷系统

1.解压 omv_2.2.5_rpi2_rpi3.img.gz 得到omv_2.2.5_rpi2_rpi3.img
2.用Win32DiskImager 把omv_2.2.5_rpi2_rpi3.img 镜像写入(Write)TF卡

三.开机测试

1.把刷好的TF插入树莓派,接好HDMI线到显示器,通电开机。第一次开机系统会自动运行脚本把TF卡未分配空间划分给第三分区。当出现”OMV login:” 说明OMV已经完全启动了。对应找到“My IP address is 192.168.xxx.xxx”记下。

2.登录WebUI:在PC端用浏览器(非IE内核,否则页面加载不正常。我用的360极速)打开刚才的IP地址192.168.xxx.xxx,会进WebUI,
选择语言:简体中文
用户名:admin
密 码:openmediavault
点击登录 按钮

3.修改端口,运行后会莫名的80端口无法访问,所以最好改成其它端口(我用82),改完点保存。应用完成生效。

4.修改时间。如果已经改完端口,这时刷新的面是不能正常访问的,要在IP后面加端口号(192.168.xxx.xxx:82)
时区-Asia/Shanghai (亚洲/上海,东八区和中国同时区就好),其他默认,保存->应用

5.登录SSH,打开 PuTTY ,输入IP,端口,点Open,在打开的命令行窗口提示下输入
用户:root
密码:openmediavault   (输入时不会显示任何字符)
当出现root@OMV:~#  时说明登录成功,可以做任何你想得到的操作,前提是你会。不然就去打相关教程好了。

 

四.插件安装(略)

五.备份

做一个备份是好习惯,如果已经用漫长的时间做好基本设置,装好了各种所要用的插件后,在你做各种尝试性操作时,让系统崩溃,而又无从修复时,从备份还原,可以减少很多时间。
1.软关机。点完关机后10s左右,树莓派网卡的灯会熄掉,就说时已经关机了。软关机后,正常的树莓派是不能再次软开机的,只能重新通电的方式开机。

2.从树莓派上取下TF卡,用读卡器连接电脑,打开Win32DiskImager,在Image File 里选择一个位置,并输入文件名.img(xxx.img),在Device选择TF卡的盘符,点 Read,等待Successful(成功)。将备份好的IMG保存好,在需要还原时,参考 “二.刷系统” 操作。

六.挂载移动硬盘

OMV不支持EXT2,3,extFat,所以最好用ext4或NTFS,如果用Fat32可能会在设置权限时出错。
1.格式化移动硬盘。如果用NTFS或Fat,并且硬盘已经是这种分区格式,直接USB连到树莓派上即可。
NTFS/Fat: WinXP/Win7、8、10系统,我的电脑–管理–磁盘管理–建立分区–格式化  ext4:Win系统不能直接格式化,DiskGenius也只能格成ext2。有谁会用DG格ext4请授教。
PuTTY 远程:   对硬盘分区  fdisk /dev/sda
要把分区格式化成Linux Ext4格式,用: mkfs.ext4 /dev/sda?   要把分区格式化成FAT32格式,用: mkfs.vfat -F 32 /dev/sda?
要把分区格式化成NTFS 格式,用: mkfs.ntfs /dev/sda?   —————–sda?  里的“?”是对应分区编号。
如果要用一块硬盘挂载几种不同格的分区,建议先在PC端分成可识别的几种分区,再到SSH,对所需要的分区      格成ext4格式。
如果在WebUI–磁盘管理–擦除,会抹去整张硬盘数据,重新分成并格式化为ext4的一个分区。谨慎操作!!

2.挂载分区
如果硬盘已经正常连接,会在WebUI–磁盘管理–看到对应的硬盘。
点开WebUI–文件系统,分区会自动挂载,如果没有,就选定分区,手动点挂载。

最后,开始使用你的 OpenMediaVault 吧。

本文来自 噪音爵士 的推荐,原文

本文转载自:树莓派实验室

树莓派3 的 64位 Ubuntu 17.04 评测

本文和测试数据来自 chainsx 的推荐。为了避免标题党嫌疑,把原文标题中的倍数略去了,但从数据上看确实有很大幅度提升,最高指标超官方系统60倍。

为了证明树莓派3与ubuntu-17.04的arm64系统更搭配,我用ubuntu64-rpi里的基于f2fs文件系统的ubuntu-17.04-arm64进行了系统评测。

在树莓派实验室里有一篇《树莓派64位系统Debian 9先行测评:性能最高提升30倍!》,可是,他是使用的预览版debian9进行评测,我这里使用的是ubuntu-17.04-arm64,可以说,这次评测是一次相当成功的评测,评测数据可以在ubuntu64-rpi项目主页内找到,这里,也会附出。

关于F2FS文件系统我也不再介绍,在《树莓派64位系统Debian 9先行测评:性能最高提升30倍!》里也已介绍,

硬件测试环境:

  • RaspberryPi 3 Model B
  • 16GB Class 10 TF卡
  • 5v 2.5A电源
  • 以太网网线及能连外网路由设备

软件测试环境:

  • ubuntu64-rpi(使用ubuntu-17.04-arm64 非移植版,由源码构建)
  • sysbench 压力测试软件

这里,为了确保可比较性,我使用的评测工具和《树莓派64位系统Debian 9先行测评:性能最高提升30倍!》里一样

sudo apt-get update && sudo apt-get –y install sysbench htop iperf3

测评结果点击这里查看(直接保存的ssh记录,如有疑问请自测,系统已放出)

总结一下:

  • cpu单线程:12.4798
  • cpu4线程:31.1217
  • cpu8线程 31.0916
  • 八线程测试共享线程锁 14.9217
  • 连续读写 0.3604
  • 随机文件读写 0.5636
  • 互斥锁测试 0.0184
  • 内存连续测试 1.2890
  • 内存随机测试 0.9564

这里,使用《树莓派64位系统Debian 9先行测评:性能最高提升30倍!》里提供的raspbian的数据进行比较(由于我目前没有过多时间来进行对最新版raspbian的评测,这里直接引用该文章提供的数据,这里,感谢该文章作者提供的数据。)

测试项目 Raspbian2017-03-03 ubuntu-17.04-arm64(ubuntu64-rpi) 提升倍数
系统信息 Arm 32bit/ext4文件系统 Arm64bit/f2fs文件系统 见文件系统测试
CPU单线程 367.2971 12.4798 29倍
四线程 1017.6742 31.1217 31倍
八线程 1920.0601 31.0916 62倍
内存随机 5.7678 0.9564 6倍
内存连续 6.3309 1.2890  5倍
文件连续读写 5.7655 0.3604 15倍
随机读写 不支持 0.5636
互斥锁性能 0.0231s 0.0184s 1.2倍

这里我们看到,测试结果让我们大吃一惊,我们的ubuntu-17.04-arm64超官方60倍,我相信,树莓派官方系统仍在不停的改进,测试结果可能与现在的最新版raspbian有出入,但是,我们这里强调的是64位系统的优越性,由此可见,64位系统的却发挥了其应有的优势。

以上测试并非使用64位官方系统,但能够让大家看到软硬件匹配64位之后,树莓派性能上的提升潜力。作为树莓派爱好者,一起期待官方发布64位系统吧!

附上系统项目地址 https://github.com/chainsx/ubuntu64-rpi

本文来自:树莓派实验室

 

 

 

树莓派安装 Arduino IDE 进行 Arduino 开发

Arduino 与 树莓派是 Maker 们创作的两大利器。在接触树莓派之前,我们通常是在 PC 上安装 Arduino 的 IDE 进行 Arduino 开发,而今有了树莓派,PC 的在 Arduino 开发中所起的作用将被树莓派替代了,现在可以直接在树莓派上安装 Arduino IDE 进行 Arduino 开发。下面来介绍具体方法。

由于 Arduino IDE 是图形界面的,所以不用说你的树莓派需要是图形界面版本而非 Lite、Core 版。

一、安装 Arduino IDE

直接命令行安装最简单:

sudo apt-get install arduino

之后主菜单中会出现 Arduino IDE 的菜单。

二、连接 Arduino 开发板

1、通过 USB 将 Arduino 开发板和树莓派连接起来,同 Arduino 连接 PC 一样。
因树莓派 USB 口限流,将 Arduino 板的供电接口同时外接 9-12V 的电源适配器供电更好。

2、配置通信端口
菜单:Tools -> Port:”/dev/ttyxxx” -> 选择”/dev/ttyACM0″

 

 

3、编译测试
菜单:File -> Examples -> 01.Basics -> Blink

点击工具栏 Upload 按钮,将自动完成编译后并下载到板子上,看到界面下方出现 “Done uploading” 即可。

本文来自:树莓派实验室

 

 

一张树莓派全家福,你拥有多少?

Raspberry Pi(树莓派)是为学习计算机编程教育而设计,只有信用卡大小的微型电脑。自问世以来,受众多计算机发烧友和创客的追捧。从第一枚树莓派发布至今,已经有过10种不同的版本,其尺寸从存储棒大小的 Zero 系列、到 A+、再到信用卡大小的 Model B,可用于各类智能产品、可穿戴设备的 DIY。下面发一张树莓派至今(2018年)最完整的全家福,包括了不同的小版本,看看你拥有多少?

Raspberry Pi Family Photo

再来看看不同版本的配置对比,内存从1代的 256MB 到最新的3代 1GB。

P.S.树莓派官方称下一代树莓派4预计在2019年发布,届时配置将达到 CPU BCM4908 64 Bit 1.8GHz\内存 2GB,同时支持 USB3.0。

本文来自:树莓派实验室

Linux/Raspbian 每个目录用途说明

本文转自无聊小博,很多刚接触树莓派/Linux 的同学会在给树莓派安装、卸载、配置软件时,软件和配置文件等存放在哪儿产生疑惑。也会遇到诸如“磁盘分区”、U盘挂载等涉及到的目录路径问题。Linux 的目录是有非常明确的规则的,这里推荐这篇文章助你快速了解、快速上手。

为什么会有这篇文章

因为在使用apt-get purge remove openvpn之后,发现系统里依然有很多openvpn名字的目录或者文件,比如像下面这样

/usr/sbin/openvpn
/etc/default/openvpn
/etc/network/if-down.d/openvpn
/etc/network/if-up.d/openvpn
/etc/bash_completion.d/openvpn
/etc/init.d/openvpn
/run/openvpn

有强迫症+洁癖的我当然就很不爽了,挨个查看之后,就删掉了这些,但是对于一些目录的用户比较感兴趣,就找到了下面这篇文章,英文的,翻译了,留在这里,增加自己对LINUX系统的了解。

Linux和Windows的区别

的显著区别之一就是其不同的目录结构,并不仅仅是格式上的不同,而是不同位置上保存的东西区别很大。

在Windows中,典型的路径可能是这样的 D:\Folder\subfolder\file.txt,而在Linux中,路径则是这样的 /Folder/subfolder/file.txt

斜线倾斜的方向不同,并且,在Linux中,也没有C盘D盘的概念,Linux系统启动之后,根分区 就”挂载”在了在了 / 的位置,并且所有的文件、文件夹、设备以及不同的硬盘光驱之类的,也都挂载在了 /

虽然可能在下面这个例子中并不明显,但是Linux系统对文件或者文路径的名称中的大小写字符是敏感的。

比如 /Folder/subfolder/file.txt 与 /folder/subfolder/file.txt并不是同一个文件。

Linux系统目录说明

Unix中和Linux的目录结构是一个统一的目录结构,所有的目录和文件最终都统一到”/“根文件系统下。文件系统是无论是不是挂载过来的,最终都分层排列到以”/“为起始的文件系统之下。
Linux目录结构遵循”文件系统层次结构(Filesystem Hierarchy Structure,FHS)”,这标准是由“自由标准组织(Free Standards Group)”进行维护的,然而大多数LINUX发行版都有意或者无意的与这一规范背离。

“/” 根路径

这是Linux系统的“根”目录,也是所有目录结构的最底层。在UNIX以及和它兼容的系统中,”/“是一个单独的目录。

/boot

这个目录下包含系统启动文件(boot loader),例如Grub,Lilo或者Kernel,以及initrd,system.map等配置文件。

Initrd ramdisk或者””initrd””是指一个临时文件系统,它在启动阶段被Linux内核调用。initrd主要用于当“根”文件系统被挂载之前,进行准备工作。

/sys

这个目录下包含内核、固件以及系统相关文件。

/sbin

包含系统操作和运作所必需的二进制文件以及管理工具,主要就是可执行文件。类似WINDOWS下的EXE文件。

/bin

包含单用户模式下的二进制文件以及工具程序,比如cat,ls,cp这些命令。

/lib

包含/sbin和/bin目录下二进制文件运行所需要的库文件。

/dev

内含必需的系统文件和驱动器。

/etc

内含系统配置文件,其下的目录,比如 /etc/hosts, /etc/resolv.conf, nsswitch.conf, 以及系统缺省设置,网络配置文件等等。以及一些系统和应用程序的配置文件。

/home

每一个用户的在这个目录下,都会单独有一个以其用户名命令的目录,在这里保存着用户的个人设置文件,尤其是以 profile结尾的文件。但是也有例外,root用户的数据就不在这个目录中,而是单独在根路径下,保存在单独的/root文件夹下。

/media

一个给所有可移动设备比如光驱、USB外接盘、软盘提供的常规挂载点。

/mnt

临时文件系统挂载点。比如,你并不想长期挂载某个驱动器,而是只是临时挂载一会U盘烤个MP3之类的,那么应该挂载在这个位置下。

/opt

在Linux系统中,这个目录用到的并不多,opt是 可选系统程序包(Optional Software Packages)的简称。这个目录在UNIX系统,如Sun Solaris用途要广泛的多。

/usr

用户数据目录,包含了属于用户的实用程序和应用程序。这里有很多重要的,但并非关键的文件系统挂载这个路径下面。在这里,你会重新找到一个 bin、sbin 和 lib目录,其中包含非关键用户和系统二进制文件以及相关的库和共享目录,以及一些库文件。

/usr/sbin

包含系统中非必备和并不是特别重要的系统二进制文件以及网络应用工具。

/usr/bin

包含用户的非必备和并不是特别重要的二进制文件。

/usr/lib

保存着/usr/sbin以及/usr/bin中二进制文件所需要的库文件。

/usr/share

“平台无关”的共享数据目录。

/usr/local

是/usr下的二级目录,这里主要保存着包含系统二进制文件以及运行库在内的本地系统数据。

/var

这个路径下通常保存着包括系统日志、打印机后台文件(spool files)、定时任务(crontab)、邮件、运行进程、进程锁文件等。这个目录尤其需要注意进行日常的检查和维护,因为这个目录下文件的大小可能会增长很快,以致于很快占满硬盘,然后导致系统便会出现各种奇奇怪怪的问题。

/tmp

顾名思义,这是一个临时文件夹,专门用来保存临时文件,每次系统重启之后,这个目录下的”临时”文件便会被清空。同样,/var/tmp 也同样保存着临时文件。两者唯一的不同是,后者 /var/tmp目录保存的文件会受到系统保护,系统重启之后这个目录下的文件也不会被清空。

/proc

这个目录是驻留在系统内存中的虚拟(psuedo,伪)文件系统,其中保存的都是文本格式的系统内核和进程信息。

LINUX系统目录结构图

需要注意的是,不同LINUX发行版本的目录结构会有一些差异,这对LINUX新手来说比较纠结,但是大体上,所以LINUX的不同发行版本,都符合上面这幅图片中的路径结构。

参考文章

1.Linux Directory Structure Overview

本文来自:树莓派实验室

修改树莓派交换分区 SWAP 的正确姿势

Swap分区是磁盘上的一个特殊用途的分区。是当系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。

分配太多的Swap空间,会浪费磁盘空间,而Swap空间太少,则系统会发生错误。一般在内存小于2G的情况下,交换分区应为内存的2倍。对于树莓派来说,可以设置为2GB。当然也需要考虑 microSD 卡容量和使用情况。

错误的做法

下面是错误的做法!错误的做法!错误的做法!重要的事情说三遍!!!

一直以来,我以为树莓派的 swap 和普通 linux 的差不多,也就照着某些网站上的方法修改树莓派的交换分区大小。

熟悉的套路开始了!

首先,查看内存大小:

$ free -m
total used free shared buff/cache available
Mem: 976 35 226 12 714 864
Swap: 99 0 99

然后:

$ sudo dd if=/dev/zero of=/swapfile bs=1024 count=102400
$ sudo mkswap /swapfile
$ sudo chown root:root /swapfile
$ sudo chmod 0600 /swapfile
$ sudo swapon /swapfile
$ sudo vi /etc/fstab

接着,添加以下内容到fstab文件尾:

/swapfile swap swap defaults 0 0

查看是否有swap空间

$ free -m

重启后,你就会发现树莓派的 swap 又回到还原了。

正确的做法

如果你按照上面的方法做了,只需删除 swap 分区:

$ sudo swapoff /swapfile
$ sudo rm /swapfile

然后将自己在 /etc/fstab 文件添加的那一行删除。

下面开始正式修改树莓派的 swap 的大小:

sudo vi /etc/dphys-swapfile

将 CONF_SWAPSIZE 的值修改成你想要的大小。 一般在内存小于2G的情况下,交换分区应为内存的2倍!

然后,重新启动 dphys-swapfile 文件服务:

sudo /etc/init.d/dphys-swapfile restart

最后查看大小:

$ free -h
total used free shared buff/cache available
Mem: 976M 66M 801M 12M 108M 849M
Swap: 2.0G 0B 2.0G

后记

在修改 /etc/fstab 文件的时候,我在下面的注释里发现了这样的两句话:

# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that

不过当时并不知道 dphys-swapfile 是什么,也不知道它在哪。后来通过搜索 dphys-swapfile 查阅到这篇文章 How to change Raspberry Pi’s Swapfile Size on Raspbian,终于找到了正确修改树莓派交换分区的方法。

转载自 树莓派实验室

无线安全审计工具FruityWifi初体验

FruityWIfi是一款有名的无线安全审计的开源工具,其灵感来自于wifipineapple,目前该工具已经更新到2.4。它能够让用户通过web界面来控制和管理模块,十分方便。FriutyWifi最初的设想是能够在树莓派上使用,但是也可以安装在Debian系列的操作系统上,例如Debian,kali Linux等,甚至可以安装在NetHunter上,在某些移动设备上使用。

一、本次使用的环境

硬件为树莓派3B,系统为raspbian jessie。

二、安装方法

-下载zip压缩文件:https://github.com/xtr4nge/FruityWifi

-解压后用root权限运行对应目录下的install-FruityWifi.sh,如果树莓派系统为raspbian stretch,运行install-FruityWifi-PHP7.sh。

安装时很顺利,安装完成后,访问地址为:

http://localhost:8000

https://localhost:8443

三、使用过程

打开页面后会发现一个简约的界面,用户和密码都是admin

进入FruityWifi的web管理界面后可以看到目录上的几个选项。

status:这里可以看到安装的模块,能够控制模块的运行和停止,还能够看到网卡的信息和连接热点设备的ip和名字。

 

status-ws:和status提供的功能和信息一样,不过这里能够看到模块的当前日志信息,适合和移动设备的访问。

config:这里能够设置软AP,可以看到很多模式,能够灵活的对接口进行组合。IN口为内网接口,一般设置为能够提供软AP服务的那个网口。OUT口为外网接口,设置为连上互联网的网络接口。配置好IN口和OUT口的地址后,点击save保存。AP模式最初有两个可以提供选择,分别是Hostpad和Airmon-ng,如果安装了karma和mana后,会多出两个模式来,会增加Hostapd-Mana和Hostapd-Karma两个模式,当使用这两个模块时,配置对应的AP模式即可。当无线网卡使用Realtek芯片时,只能选择Airmon-ng模式,并且只有使用 atheros芯片的无线网卡才支持karma和mana攻击。下载好AP模块后,就能够很好的管理和启动热点。

modules:这里列出了许多可用的插件,可供下载使用。树莓派3B自带的无线网卡是不支持monitor模式的,如果想使用mdk3这种需将网卡设置为monitor模式的模块,需外置个支持monitor模式的USB无线网卡。

下面列举几个常用的基本的模块:

1、Autostart,启用FriutyWifi时自动开启相对应的模块。

2、karma和mana,karma能够响应客户端设备主动扫描的探测请求,并伪造同名热点吸引客户端的连接。由于各厂商改成了被动扫描,karma的攻击逐渐不好用了,而mana可以说是karma的改进,它能够收集周围空间的SSID信息,当收到BoradcastProbeRequest 后,会根据列表中的每一个SSID构成ProbeRsponse向客户端回复。关于karma和mana的具体原理,可以看下这两篇文章:http://www.freebuf.com/articles/77055.html ,http://www.freebuf.com/articles/wireless/145259.html

3、mdk3,能够发起能够发起Beacon Flood、Authentication Dos、 Deauthentication等模式的攻击。需要将网卡设置为monitor模式,在config界面中能够很轻松的设置, mkd3的DOS攻击配和karma|mana能够使客户端断开原来的热点并主动连接钓鱼热点。

4、DetectDeauth,一款检测eauthentication attacks的模块。能够设置周期性的检测deauthentication frame,如果超过自己设置的阈值,则会记录下来。

当客户端连上钓鱼的热点后,客户端设备的所有流量都经过钓鱼热点,这时可以使用一些模块获取想要的数据,例如ngrep来抓取cookie ,URLSnarf抓取URL信息等;也有许多中间人攻击的模块提供使用,比如ettercap ,sslstrip等。有些插件笔者使用时未能正常启动,比如nessus、DeviceFinder 等。

logs:各个模块的输出日志信息,能够很方便的查看。

四、后记

作为一个款无线安全审计工具,FriutyWifi从安装到使用都非常简单,也方便管理。有些模块在树莓派3B上未能正常的使用,希望新版能够修正这些模块,也希望这款开源工具能够越来越丰富,越来越稳定。

 本文作者scu-igroup,转载自FreeBuf.com

 

 

 

树莓派3系统RaspAnd 7.1.2发布:支持7英寸触摸屏和智能电视

RaspAnd开发商Arne Exton发布了新版本的Raspberry Pi 3操作系统,为官方的Raspberry Pi 7英寸触摸屏和智能电视提供支持。在推出最新的Kodi 17.6 “Krypton”媒体中心和TeamViewer 13软件以允许用户从其Raspberry Pi 3 SBC控制其他计算机之前的一个星期之后,RaspAnd 7.1.2 Build 171220支持官方的树莓派7英寸触摸屏。

RaspAnd操作系统在官方Raspberry Pi 7英寸触摸屏上运行

“感谢这个网站上的一位要求支持Raspberry Pi官方7英寸触摸屏的成员,我开始尝试不同的配置。现在成功了!这些变化是如此之好,,我决定今天上传RaspAnd的新版本,“Arne Exton在发布公告中写道。

RaspAnd现在在大屏幕电视上看起来也更好了

对官方的Raspberry 7英寸触摸屏的支持也改变了RaspAnd的支持分辨率从720p(1280×720)改为1080p全高清(1920×1080),这意味着您也可以在大屏幕电视上使用它,而且看起来会好很多之前。 Arne Exton用55英寸三星电视机作为显示器进行测试。

除此之外,RaspAnd 7.1.2 Build 171220预装了Quick Reboot Pro应用程序,因此您不必使用电源开关重新启动Raspberry Pi 3单板计算机上的操作系统。这个新版本是为现有用户免费下载的,但是新用户需要支付9美元

对于那些不熟悉RaspAnd的人来说,这是一个基于Google Android移动操作系统的Raspberry Pi 3 SBC的商业操作系统,所以基本上你可以在你的Raspberry Pi上运行Android。目前,最新的RaspAnd版本是基于Android 7.1.2 Nougat。

在智能电视上运行RaspAnd操作系统

 

本文转载自cnbeta

NEC发布搭载树莓派平台的工程液晶显示器新品

12月14日消息,NEC今日在北京发布了显示器新品C系列、P系列、V系列及EX系列。NEC新款显示器搭载树莓派平台,提供多样化应用。此外,NEC在产品线方面拥有丰富的显示产品群,涉及工程、教育、商务投影机,数字电影放映机,工程液晶显示器及专业色彩显示器。

 

 

 

此次发布的新品包含C系列、P系列和V系列的三大系列的九个型号,主要覆盖40英寸到55英寸,产品亮度覆盖450nit到700nit的产品段及两款专业桌面显示器EX系列。由于内置树莓派和OPS平台的应用,使得显示器能够更便捷地与各种软硬件进行融合协作。采用模块化结构设计,四边等宽度设计,将显示器边框做到了最小化,外形更加美观,都使其在电气性能和工业品质方面表现极为出众,能够完全满足对显示器画质和耐用性要求极高的客户需求,并带来更快捷、可升级、可扩展的优势。此外C系列内置Garnet信发平台,支持开机自动播放、无信号屏保功能和紧急预警功能。此外,45mm超薄机身、表面44%雾度指标、可扩展窄边框设计以及支持7*24小时应用的特性。

发布会现场展示的曲面显示器+投影机融合的解决方案,小尺寸拼接+大尺寸拼接的影院应用方案。

本文转载自cnbeta