2019年4月

Linux 系统上的一些文件可能出现在多个位置。按照本文指示查找并识别这些“同卵双胞胎”,还可以了解为什么硬链接会如此有利。

Archana Jarajapu (CC BY 2.0)

识别使用同一个磁盘空间的文件依赖于利用文件使用相同的 inode 这一事实。这种数据结构存储除了文件名和内容之外的所有信息。如果两个或多个文件具有不同的名称和文件系统位置,但共享一个 inode,则它们还共享内容、所有权、权限等。

这些文件通常被称为“硬链接”,不像符号链接(即软链接)那样仅仅通过包含它们的名称指向其他文件,符号链接很容易在文件列表中通过第一个位置的 l 和引用文件的 -> 符号识别出来。

$ ls -l my*
-rw-r--r-- 4 shs shs   228 Apr 12 19:37 myfile
lrwxrwxrwx 1 shs shs     6 Apr 15 11:18 myref -> myfile
-rw-r--r-- 4 shs shs   228 Apr 12 19:37 mytwin

在单个目录中的硬链接并不是很明显,但它仍然非常容易找到。如果使用 ls -i 命令列出文件并按 inode 编号排序,则可以非常容易地挑选出硬链接。在这种类型的 ls 输出中,第一列显示 inode 编号。

$ ls -i | sort -n | more
 ...
 788000 myfile  <==
 788000 mytwin  <==
 801865 Name_Labels.pdf
 786692 never leave home angry
 920242 NFCU_Docs
 800247 nmap-notes

扫描输出,查找相同的 inode 编号,任何匹配都会告诉你想知道的内容。

另一方面,如果你只是想知道某个特定文件是否是另一个文件的硬链接,那么有一种方法比浏览数百个文件的列表更简单,即 find 命令的 -samefile 选项将帮助你完成工作。

$ find . -samefile myfile
./myfile
./save/mycopy
./mytwin

注意,提供给 find 命令的起始位置决定文件系统会扫描多少来进行匹配。在上面的示例中,我们正在查看当前目录和子目录。

使用 find-ls 选项添加输出的详细信息可能更有说服力:

$ find . -samefile myfile -ls
 788000    4 -rw-r--r--   4 shs    shs      228 Apr 12 19:37 ./myfile
 788000    4 -rw-r--r--   4 shs    shs      228 Apr 12 19:37 ./save/mycopy
 788000    4 -rw-r--r--   4 shs    shs      228 Apr 12 19:37 ./mytwin

第一列显示 inode 编号,然后我们会看到文件权限、链接、所有者、文件大小、日期信息以及引用相同磁盘内容的文件的名称。注意,在这种情况下,链接字段是 “4” 而不是我们可能期望的 “3”。这告诉我们还有另一个指向同一个 inode 的链接(但不在我们的搜索范围内)。

如果你想在一个目录中查找所有硬链接的实例,可以尝试以下的脚本来创建列表并为你查找副本:

#!/bin/bash

# seaches for files sharing inodes

prev=""

# list files by inode
ls -i | sort -n > /tmp/$0

# search through file for duplicate inode #s
while read line
do
    inode=`echo $line | awk '{print $1}'`
    if [ "$inode" == "$prev" ]; then
        grep $inode /tmp/$0
    fi
    prev=$inode
done < /tmp/$0

# clean up
rm /tmp/$0
$ ./findHardLinks
 788000 myfile
 788000 mytwin

你还可以使用 find 命令按 inode 编号查找文件,如命令中所示。但是,此搜索可能涉及多个文件系统,因此可能会得到错误的结果。因为相同的 inode 编号可能会在另一个文件系统中使用,代表另一个文件。如果是这种情况,文件的其他详细信息将不相同。

$ find / -inum 788000 -ls 2> /dev/null
 788000   4 -rw-r--r--   4 shs   shs    228 Apr 12 19:37 /tmp/mycopy
 788000   4 -rw-r--r--   4 shs   shs    228 Apr 12 19:37 /home/shs/myfile
 788000   4 -rw-r--r--   4 shs   shs    228 Apr 12 19:37 /home/shs/save/mycopy
 788000   4 -rw-r--r--   4 shs   shs    228 Apr 12 19:37 /home/shs/mytwin

注意,错误输出被重定向到 /dev/null,这样我们就不必查看所有 “Permission denied” 错误,否则这些错误将显示在我们不允许查看的其他目录中。

此外,扫描包含相同内容但不共享 inode 的文件(即,简单的文本拷贝)将花费更多的时间和精力。


via: https://www.networkworld.com/article/3387961/how-to-identify-duplicate-files-on-linux.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在深入调查后卡巴斯基表示,华硕并非是 影锤 ShadowHammer 攻击行动的唯一受害者,至少还有6家其他组织被攻击者渗透。除了华硕之外,卡巴斯基表示还有来自泰国的游戏发行商 Electronics Extreme、网页&IT 基础服务公司 Innovative Extremist、韩国游戏公司 Zepetto,另外还有来自韩国的一家视频游戏开发商、一家综合控股公司和一家制药公司。

影锤攻击行动在最初是在华硕的升级服务中发现的新型供应链攻击方式。华硕电脑一般都默认预装了华硕的 Live Update Utility 软件,用于更新华硕电脑专用的驱动、软件、BIOS 和补丁等,用户在使用该软件更新时可能会安装植入后门程序的软件更新包。黑客疑似入侵控制了华硕的更新服务,篡改使用合法证书签署的安装包,在官方给用户推送的升级软件包中加入了恶意代码。

来源:cnBeta.COM

更多资讯

GitHub 公开 Bilibili 寄来的 DMCA 删除通知

根据 GitHub 的透明政策,当一个代码库应版权所有者的要求移除,它会公开对方发来的 DMCA 删除通知。本周早些时候,匿名人士公布了Bilibili 网站后台工程源代码,Bilibili 迅速发出 DMCA 通知删除该代码库。现在,GitHub 公开了 Bilibili 寄来的 DMCA 删除通知。

这个通知引人注目之处在于它非常的不正式。Bilibili 是一个在美国上市的中国知名网站,但它的通知一点不像是一个正式的法律文件,它的开头是“Hello Dear Github:”,然后是“We Are:”,最后一句是“求求你们帮助我们吧,还加了三个感叹号(Please help us!!!)”,就像它的源代码一样,它的通知也在社交网络上引发了广泛热议。

来源: solidot.org

详情: http://t.cn/EajnbX6

腾讯安全提醒:暴风影音等数千款 APP 遭恶意 SDK 嵌入

4 月 24 日消息,公众号“腾讯安全联合实验室”称,近日,腾讯安全反诈骗实验室追踪到一款恶意 SDK 子包,该恶意子包已“潜伏”在掌通家园、暴风影音、天天看、塔读文学等数千款移动应用中,潜在可能影响上千万用户。

来源: 快科技

详情: http://t.cn/EajnfU3

这个黑客靠猜测私钥 成功窃取了 4.5 万个 ETH

4 月 23 日,分析机构 Independent Security Evaluators 发布的一份报告称,一名“区块链强盗”通过成功猜测安全性较弱的私钥,成功窃取了近 4.5 万个 ETH。

来源: 新浪财经综合

详情: http://t.cn/EajnJgS

日媒:日本企业至少 268 万份客户信息可能外泄

中新网 4 月 24 日电,据日本共同社 24 日统计报道,由于遭受网络攻击,2018 年日本企业发生外泄或可能外泄的个人信息至少达到268万份。据悉,日本酒店和大学的信息外泄情况严重。

来源: 中国新闻网

详情: http://t.cn/EajnS0N

(信息来源于网络,安华金和搜集整理)

Big News

已经 14 岁的 Scientific Linux 将停止开发

Scientific Linux 是极少数专注于科学的GNU / Linux 发行版之一,是由费米实验室和其他的研究机构基于 Red Hat Enterprise Linux 开发的针对于科学实验场景下的 Linux 发行版本,主要收录了一些上游产品不会收录的软件包,比如 R 语言等。现在,差不多 14 年后,那些努力维护的人们决定是时候休息了,不再发布新版本的 Scientific Linux。【Softpedia】

Scientific Linux 在过去网络、资源不足的情况下,是一个好的解决方案,但如今各方面的资源都很充沛,我们可以有更好的方案来解决这个问题。

Quick News

QEMU 4.0.0 发布 几乎可以模拟任何硬件设备的模拟器

QEMU 是一个纯软件实现的通用模拟器和虚拟机,它有三种模式,几乎可以模拟任何硬件设备:

  • 完整系统模拟:可在任何支持的硬件架构上运行任何操作系统
  • 用户模式模拟:运行另一个 Linux/BSD 程序
  • 虚拟化:接近本机性能运行 KVM 和 Xen 虚拟机。

【cnbeta】

深度学习可以帮助我们解决自杀的问题

纽约大学的一项最新研究表明,借助自然语言处理技术,可以实现通过收听录音来分析退伍军人的创伤后应激障碍,从而解决退伍军人自杀的问题。【The Next Web】

MongoDB 收购了移动端数据库解决方案 Realm

Realm 是一个非常好用的移动端数据库解决方案,开发者可以使用 Realm 来替代 SQLite。 Realm 发布了文章说明了其被 MongoDB 收购的信息。【Realm Blog】

Facebook 的马克·扎克伯格启动了他自己的 Podcast

马克·扎克伯格启动了他自己的 Podcast:Tech & Society with Mark Zuckerberg。 在这个播客中,马克·扎克伯格会分享会他和一些其他的人士的一些讨论。【Engadget】

Netflix 是世界上最受欢迎的流媒体服务之一。对,你已经知道了。但你可能不知道的是 Netflix 使用 FreeBSD 向你提供内容。

是的。Netflix 依靠 FreeBSD 来构建其内部内容交付网络(CDN)。

CDN 是一组位于世界各地的服务器。它主要用于向终端用户分发像图像和视频这样的“大文件”。

Netflix 没有选择商业 CDN 服务,而是建立了自己的内部 CDN,名为 Open Connect

Open Connect 使用自定义硬件:Open Connect Appliance。你可以在下面的图片中看到它。它可以每秒处理 40Gb 的数据,存储容量为 248 TB。

Netflix’s Open Connect Appliance runs FreeBSD

Netflix 免费为合格的互联网服务提供商(ISP) 提供 Open Connect Appliance。通过这种方式,大量的 Netflix 流量得到了本地化,ISP 可以更高效地提供 Netflix 内容。

Open Connect Appliance 运行在 FreeBSD 操作系统上,并且几乎完全运行开源软件

Open Connect 使用最新版 FreeBSD

你或许会觉得 Netflix 会在这样一个关键基础设施上使用 FreeBSD 的稳定版本,但 Netflix 会跟踪 FreeBSD 最新/当前版本。Netflix 表示,跟踪“最新版”可以让他们“保持前瞻性,专注于创新”。

以下是 Netflix 跟踪最新版 FreeBSD 的好处:

  • 更快的功能迭代
  • 更快地使用 FreeBSD 的新功能
  • 更快的 bug 修复
  • 实现协作
  • 尽量减少合并冲突
  • 摊销合并“成本”

运行 FreeBSD “最新版” 可以让我们非常高效地向用户分发大量数据,同时保持高速的功能开发。

Netflix

请记得,甚至谷歌也使用 Debian 测试版而不是 Debian 稳定版。也许这些企业更喜欢最先进的功能。

与谷歌一样,Netflix 也计划向上游提供代码。这应该有助于 FreeBSD 和其他基于 FreeBSD 的 BSD 发行版。

那么 Netflix 用 FreeBSD 实现了什么?以下是一些统计数据:

使用 FreeBSD 和商业硬件,我们在 16 核 2.6 GHz CPU 上使用约 55% 的 CPU,实现了 90 Gb/s 的 TLS 加密连接。

Netflix

如果你想了解更多关于 Netflix 和 FreeBSD 的信息,可以参考 FOSDEM 的这个演示文稿。你还可以在这里观看演示文稿的视频。

目前,大型企业主要依靠 Linux 来实现其服务器基础架构,但 Netflix 已经信任了 BSD。这对 BSD 社区来说是一件好事,因为如果像 Netflix 这样的行业领导者重视 BSD,那么其他人也可以跟上。你怎么看?


via: https://itsfoss.com/netflix-freebsd-cdn/

作者:Abhishek Prakash 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

边缘计算环境带来的安全风险迫使公司必须特别关注它的安全措施。

说数据安全是高管们和董事会最关注的问题已经是陈词滥调了。但问题是:数据安全问题不会自己消失。

骇客和攻击者一直在寻找利用缺陷的新方法。就像公司开始使用人工智能和机器学习等新兴技术来自动化地保护他们的组织一样,那些不良分子们也在使用这些技术来达成他们的目的。

简而言之,安全问题是一定不能忽视的。现在,随着越来越多的公司开始使用边缘计算,如何保护这些边缘计算环境,需要有新的安全考量。

边缘计算的风险更高

正如 Network World 的一篇文章所说,边缘计算的安全架构应该将重点放在物理安全上。这并不是说要忽视保护传输过程中的数据。而是说,实际的物理环境和物理设备更加值得关注。

例如,边缘计算的硬件设备通常位于较大的公司或者广阔空间中,有时候是在很容易进入的共享办公室和公共区域里。从表面上看,这节省了成本,能更快地访问到相关的数据,而不必在后端的数据中心和前端的设备之间往返。

但是,如果没有任何级别的访问控制,这台设备就会暴露在恶意操作和简单人为错误的双重风险之下。想象一下办公室的清洁工意外地关掉了设备,以及随之而来的停机所造成的后果。

另一个风险是 “影子边缘 IT”。有时候非 IT 人员会部署一个边缘设备来快速启动项目,却没有及时通知 IT 部门这个设备正在连接到网络。例如,零售商店可能会主动安装他们自己的数字标牌,或者,销售团队会将物联网传感器应用到电视中,并在销售演示中实时地部署它们。

在这种情况下,IT 部门很少甚至完全看不到这些边缘设备,这就使得网络可能暴露在外。

保护边缘计算环境

部署微型数据中心(MDC)是规避上述风险的一个简单方法。

“在历史上,大多数这些[边缘]环境都是不受控制的,”施耐德电气安全能源部门的首席技术官和创新高级副总裁 Kevin Brown 说。“它们可能是第 1 级,但很可能是第 0 级类型的设计 —— 它们就像开放的配线柜。它们现在需要像微型数据中心一样的对待。你管理它需要像管理关键任务数据中心一样”

单说听起来的感觉,这个解决方案是一个安全、独立的机箱,它包括在室内和室外运行程序所需的所有存储空间、处理性能和网络资源。它同样包含必要的电源、冷却、安全和管理工具。

而它最重要的是高级别的安全性。这个装置是封闭的,有上锁的门,可以防止非法入侵。通过合适的供应商,DMC 可以进行定制,包括用于远程数字化管理的监控摄像头、传感器和监控技术。

随着越来越多的公司开始利用边缘计算的优势,他们必须利用安全解决方案的优势来保护他们的数据和边缘环境。

在 APC.com 上了解保护你的边缘计算环境的最佳方案。


via: https://www.networkworld.com/article/3388130/enhanced-security-at-the-edge.html#tk.rss_all

作者:Anne Taylor 选题:lujun9972 译者:hopefully2333 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Shell 脚本很棒,你可以非常轻松地写出有用的东西来。甚至像是下面这个傻瓜式的命令:

# 用含有 Go 的词汇起名字:
$ grep -i ^go /usr/share/dict/* | cut -d: -f2 | sort -R | head -n1
goldfish

如果用其他编程语言,就需要花费更多的脑力,用多行代码实现,比如用 Ruby 的话:

puts(Dir['/usr/share/dict/*-english'].map do |f|
  File.open(f)
    .readlines
    .select { |l| l[0..1].downcase == 'go' }
end.flatten.sample.chomp)

Ruby 版本的代码虽然不是那么长,也并不复杂。但是 shell 版是如此简单,我甚至不用实际测试就可以确保它是正确的。而 Ruby 版的我就没法确定它不会出错了,必须得测试一下。而且它要长一倍,看起来也更复杂。

这就是人们使用 Shell 脚本的原因,它简单却实用。下面是另一个例子:

curl https://nl.wikipedia.org/wiki/Lijst_van_Nederlandse_gemeenten |
    grep '^<li><a href=' |
    sed -r 's|<li><a href="/wiki/.+" title=".+">(.+)</a>.*</li>|\1|' |
    grep -Ev '(^Tabel van|^Lijst van|Nederland)'

这个脚本可以从维基百科上获取荷兰基层政权的列表。几年前我写了这个临时的脚本,用来快速生成一个数据库,到现在它仍然可以正常运行,当时写它并没有花费我多少精力。但要用 Ruby 完成同样的功能则会麻烦得多。


现在来说说 shell 的缺点吧。随着代码量的增加,你的脚本会变得越来越难以维护,但你也不会想用别的语言重写一遍,因为你已经在这个 shell 版上花费了很多时间。

我把这种情况称为“Shell 脚本编程陷阱”,这是沉没成本谬论的一种特例(LCTT 译注:“沉没成本谬论”是一个经济学概念,可以简单理解为,对已经投入的成本可能被浪费而念念不忘)。

实际上许多脚本会增长到超出预期的大小,你经常会花费过多的时间来“修复某个 bug”,或者“添加一个小功能”。如此循环往复,让人头大。

如果你从一开始就使用 Python、Ruby 或是其他类似的语言来写这个程序,你可能会在写第一版的时候多花些时间,但以后维护起来就容易很多,bug 也肯定会少很多。

以我的 packman.vim 脚本为例。它起初只包含一个简单的用来遍历所有目录的 for 循环,外加一个 git pull,但在这之后就刹不住车了,它现在有 200 行左右的代码,这肯定不能算是最复杂的脚本,但假如我一上来就按计划用 Go 来编写它的话,那么增加一些像“打印状态”或者“从配置文件里克隆新的 git 库”这样的功能就会轻松很多;添加“并行克隆”的支持也几乎不算个事儿了,而在 shell 脚本里却很难实现(尽管不是不可能)。事后看来,我本可以节省时间,并且获得更好的结果。

出于类似的原因,我很后悔写出了许多这样的 shell 脚本,而我在 2018 年的新年誓言就是不要再犯类似的错误了。

附录:问题汇总

需要指出的是,shell 编程的确存在一些实际的限制。下面是一些例子:

  • 在处理一些包含“空格”或者其他“特殊”字符的文件名时,需要特别注意细节。绝大多数脚本都会犯错,即使是那些经验丰富的作者(比如我)编写的脚本,因为太容易写错了,只添加引号是不够的
  • 有许多所谓“正确”和“错误”的做法。你应该用 which 还是 command?该用 $@ 还是 $*,是不是得加引号?你是该用 cmd $arg 还是 cmd "$arg"?等等等等。
  • 你没法在变量里存储空字节(0x00);shell 脚本处理二进制数据很麻烦。
  • 虽然你可以非常快速地写出有用的东西,但实现更复杂的算法则要痛苦许多,即使用 ksh/zsh/bash 扩展也是如此。我上面那个解析 HTML 的脚本临时用用是可以的,但你真的不会想在生产环境中使用这种脚本。
  • 很难写出跨平台的通用型 shell 脚本。/bin/sh 可能是 dash 或者 bash,不同的 shell 有不同的运行方式。外部工具如 grepsed 等,不一定能支持同样的参数。你能确定你的脚本可以适用于 Linux、macOS 和 Windows 的所有版本吗(无论是过去、现在还是将来)?
  • 调试 shell 脚本会很难,特别是你眼中的语法可能会很快变得记不清了,并不是所有人都熟悉 shell 编程的语境。
  • 处理错误会很棘手(检查 $? 或是 set -e),排查一些超过“出了个小错”级别的复杂错误几乎是不可能的。
  • 除非你使用了 set -u,变量未定义将不会报错,而这会导致一些“搞笑事件”,比如 rm -r ~/$undefined 会删除用户的整个家目录(瞅瞅 Github 上的这个悲剧)。
  • 所有东西都是字符串。一些 shell 引入了数组,能用,但是语法非常丑陋和费解。带分数的数字运算仍然难以应付,并且依赖像 bcdc 这样的外部工具($(( .. )) 这种方式只能对付一下整数)。

反馈

你可以发邮件到 [email protected],或者在 GitHub 上创建 issue 来向我反馈,提问等。


via: https://arp242.net/weblog/shell-scripting-trap.html

作者:Martin Tournoij 选题:lujun9972 译者:jdh8383 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出