介绍隐私和安全正在逐渐成为一个重要的话题。虽然不可能做到 100% 安全，但是，还是能采取一些措施，特别是在 Linux 上，在你浏览网页的时候保护你的在线隐私安全。基于这些目的选择浏览器的时候，火狐或许是你的最佳选择。谷歌 Chrome 不能信任。它是属于谷歌的，一个众所周知的数据收集公司，而且它是闭源的。 Chromium 或许还可以，但并不能保证。只有火狐保持了一定程度的用户权利承诺。火狐设置火狐里有几个你能设定的设置，能更好地保护你的隐私。这些设置唾手可得，能帮你控制那些在你浏览的时候分享的数据。健康报告你首先可以设置的是对火狐健康报告发送的限制，以限制数据发送量。当然，这些数据只是被发送到 Mozilla，但这也是传输数据。打开火狐的菜单，点击 “选项” Preferences 。来到侧边栏里的 “高级” Advanced 选项卡，点击 “数据选项” Data Choices 。这里你能禁用任意数据的报告。搜索新版的火狐浏览器默认使用雅虎搜索引擎。一些发行版会更改设置，替代使用的是谷歌。两个方法都不理想。火狐可以使用 DuckDuckGo 作为默认选项。为了启用 DuckDuckGo，你得打开火狐菜单点击 “选项” Preferences 。直接来到侧边栏的 “搜索” Search 选项卡。然后，在 “默认搜索引擎” Default Search Engine 的下拉菜单中选择 DuckDuckGo 。 请勿跟踪 Do Not Track 这个功能并不完美，但它确实向站点发送了一个信号，告诉它们不要使用分析工具来记录你的活动。这些网页或许会遵从，会许不会。但是，最好启用请勿跟踪，也许它们会遵从呢。再次打开火狐的菜单，点击 “选项” Preferences ，然后是 “隐私” Privacy 。页面的最上面有一个 “跟踪” Tracking 部分。点击那一行写着 “您还可以管理您的‘请勿跟踪’设置” You can also manage your Do Not Track settings 的链接。会出现一个有复选框的弹出窗口，那里允许你启用“请勿跟踪”设置。禁用 Pocket没有任何证据显示 Pocket 正在做一些不好的事情，但是禁用它或许更好，因为它确实连接了一个专有的应用。禁用 Pocket 不是太难，但是你得注意只改变 Pocket 相关设置。要访问你所需的配置页面，在火狐的地址栏里输入about:config。页面会加载一个设置表格，在表格的最上面是搜索栏，在那儿搜索 Pocket 。你将会看到一个包含结果的新表格。找一下名为 extensions.pocket.enabled 的设置。当你找到它的时候，双击使其转变为“否”。你也能在这儿编辑 Pocket 的其他相关设置。不过没什么必要。注意不要编辑那些跟 Pocket 扩展不直接相关的任何东西。 附加组件 Add-ons 火狐最有效地保护你隐私和安全的方式来自附加组件。火狐有大量的附加组件库，其中很多是免费、开源的。在这篇指导中着重提到的附加组件，在使浏览器更安全方面是名列前茅的。HTTPS Everywhere针对大量没有使用 SSL 证书的网页、许多不使用 https 协议的链接、指引用户前往不安全版本的网页等现状， 电子前线基金会 Electronic Frontier Foundation 开发了 HTTPS Everywhere。HTTPS Everywhere 确保了如果该链接存在有一个加密的版本，用户将会使用它。给火狐设计的 HTTPS Everywhere 已经可以使用，在火狐的附加组件搜索网页上。（LCTT 译注：对应的中文页面。）Privacy Badger电子前线基金会同样开发了 Privacy Badger。 Privacy Badger 旨在通过阻止不想要的网页跟踪，弥补“请勿跟踪”功能的不足之处。它同样能通过火狐附加组件仓库安装。。（LCTT 译注：对应的中文页面。）uBlock Origin现在有一类更通用的的隐私附加组件，屏蔽广告。这里的选择是 uBlock Origin，uBlock Origin 是个更轻量级的广告屏蔽插件，几乎不遗漏所有它会屏蔽的广告。 uBlock Origin 将主要屏蔽各种广告，特别是侵入性的广告。你能在这儿找到它。。（LCTT 译注：对应的中文页面。）NoScript阻止 JavaScript 是有点争议， JavaScript 虽说支撑了那么多的网站，但还是臭名昭著，因为 JavaScript 成为侵略隐私和攻击的媒介。NoScript 是应对 JavaScript 的绝佳方案。NoScript 是一个 JavaScript 的白名单，它会屏蔽所有 JavaScript，除非该站点被添加进白名单中。可以通过插件的“选项”菜单，事先将一个站点加入白名单，或者通过在页面上点击 NoScript 图标的方式添加。通过火狐附加组件仓库可以安装 NoScript 如果网页提示不支持你使用的火狐版本，点 “无论如何下载” Download Anyway 。这已经在 Firefox 51 上测试有效。DisconnectDisconnect 做的事情很多跟 Privacy Badger 一样，它只是提供了另一个保护的方法。你能在附加组件仓库中找到它 （LCTT 译注：对应的中文页面）。如果网页提示不支持你使用的火狐版本，点 “无论如何下载” Download Anyway 。这已经在 Firefox 51 上测试有效。Random Agent SpooferRandom Agent Spoofer 能改变火狐浏览器的签名，让浏览器看起来像是在其他任意平台上的其他任意浏览器。虽然有许多其他的用途，但是它也能用于预防浏览器指纹侦查。 浏览器指纹侦查 Browser Fingerprinting 是网站基于所使用的浏览器和操作系统来跟踪用户的另一个方式。相比于 Windows 用户，浏览器指纹侦查更多影响到 Linux 和其他替代性操作系统用户，因为他们的浏览器特征更独特。你能通过火狐附加插件仓库添加 Random Agent Spoofer。（LCTT 译注：对应的中文页面）。像其他附加组件那样，页面或许会提示它不兼容最新版的火狐。再说一次，那并不是真的。你可以通过点击火狐菜单栏上的图标来使用 Random Agent Spoofer。点开后将会出现一个下拉菜单，有不同模拟的浏览器选项。最好的选项之一是选择"Random Desktop" 和任意的切换时间。这样，就绝对没有办法来跟踪你了，也保证了你只能获得网页的桌面版本。系统设置私人 DNS请避免使用公共或者 ISP 的 DNS 服务器！即使你配置你的浏览器满足绝对的隐私标准，你向公共 DNS 服务器发出的 DNS 请求却暴露了所有你访问过的网页。诸如谷歌公共 DNS（IP：8.8.8.8 、8.8.4.4）这类的服务将会记录你的 IP 地址、你的 ISP 和地理位置信息。这些信息或许会被任何合法程序或者强制性的政府请求所分享。当我在使用谷歌公共 DNS 服务时，谷歌会记录什么信息？谷歌公共 DNS 隐私页面有一个完整的收集信息列表。谷歌公共 DNS 遵循谷歌的主隐私政策，在 “隐私中心” Privacy Center 可以看到。 用户的客户端 IP 地址是唯一会被临时记录的（一到两天后删除），但是为了让我们的服务更快、更好、更安全，关于 ISP 和城市/都市级别的信息将会被保存更长的时间。 参考资料： https://developers.google.com/speed/public-dns/faq#privacy由于以上原因，如果可能的话，配置并使用你私人的非转发 DNS 服务器。现在，这项任务或许跟在本地部署一些预先配置好的 DNS 服务器的 Docker 容器一样简单。例如，假设 Docker 服务已经在你的系统安装完成，下列命令将会部署你的私人本地 DNS 服务器：# docker run -d --name bind9 -p 53:53/udp -p 53:53 fike/bind9 DNS 服务器现在已经启动并正在运行：# dig @localhost google.com ; <<>> DiG 9.9.5-9+deb8u6-Debian <<>> @localhost google.com ; (2 servers found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51110 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 5 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;google.com. IN A ;; ANSWER SECTION: google.com. 242 IN A 216.58.199.46 现在，在 /etc/resolv.conf 里设置你的域名服务器：nameserver 127.0.0.1 结束语没有完美的安全隐私解决方案。虽然本篇指导里的步骤可以明显改进它们。如果你真的很在乎隐私，Tor 浏览器 是最佳选择。Tor 对于日常使用有点过犹不及，但是它的确使用了这篇指导里列出的一些措施。via: https://linuxconfig.org/protecting-your-privacy-with-firefox-on-linux作者：Nick Congleton 译者：ypingcn 校对：jasminepeng本文由 LCTT 原创编译，Linux中国 荣誉推出
这是一个关于如何在 Kali Linux 中更改 GRUB 背景的简单指南（实际上它是 Kali Linux 的 GRUB 启动图像）。 Kali 开发团队在这方面做的不多，他们好像太忙了，所以在这篇文章中，我会对 GRUB 解释一二，但是不会冗长到我失去写作的激情。 那么我们开始吧……这通常是所有人首先会遇到的一个问题，在哪里设置？有很多方法来查找 GRUB 设置。每个人都可能有自己的方法，但我发现 update-grub 是最简单的。如果在 VMWare 或 VirtualBox 中执行 update-grub，你将看到如下所示的内容：root@kali:~# update-grub Generating grub configuration file ... Found background image: /usr/share/images/desktop-base/desktop-grub.png Found linux image: /boot/vmlinuz-4.0.0-kali1-amd64 Found initrd image: /boot/initrd.img-4.0.0-kali1-amd64 No volume groups found done root@kali:~# 如果您是双系统，或者三系统，那么您将看到 GRUB 以及其他操作系统入口。然而，我们感兴趣的部分是背景图像，这是在我这里看到的（你会看到完全相同的内容）：Found background image: /usr/share/images/desktop-base/desktop-grub.png GRUB 启动图像搜索顺序在 grub-2.02 中，对基于 Debian 的系统来说，它将按照以下顺序搜索启动背景：/etc/default/grub 里的 GRUB_BACKGROUND 行在 /boot/grub/ 里找到的第一个图像（如果发现多张，将以字母顺序排序）在 /usr/share/desktop-base/grub_background.sh 中指定的在 /etc/grub.d/05_debian_theme 里 WALLPAPER 行列出的现在将此信息留在这里，我们会尽快重新检查它。Kali Linux GRUB 启动图像在我使用 Kali Linux 时（因为我喜欢用它做事），会发现 Kali 正在使用这里的背景图像：/usr/share/images/desktop-base/desktop-grub.png为了确定，我们来检查一下这个 .png 文件的属性。root@kali:~# root@kali:~# ls -l /usr/share/images/desktop-base/desktop-grub.png lrwxrwxrwx 1 root root 30 Oct 8 00:31 /usr/share/images/desktop-base/desktop-grub.png -> /etc/alternatives/desktop-grub root@kali:~# 什么？它只是 /etc/alternatives/desktop-grub 的一个符号链接？ 但是 /etc/alternatives/desktop-grub 不是图片文件。看来我也要检查一下它的属性。root@kali:~# root@kali:~# ls -l /etc/alternatives/desktop-grub lrwxrwxrwx 1 root root 44 Oct 8 00:27 /etc/alternatives/desktop-grub -> /usr/share/images/desktop-base/kali-grub.png root@kali:~# 好吧，真让人费解。 /etc/alternatives/desktop-grub 也是一个符号链接，它指向 /usr/share/images/desktop-base/kali-grub.png，来自最初同样的文件夹。呃！ 无语。 但是现在我们至少可以替换该文件并将其解决。在替换之前，我们需要检查 /usr/share/images/desktop-base/kali-grub.png 的属性，以确保下载相同类型和大小的文件。root@kali:~# root@kali:~# file /usr/share/images/desktop-base/kali-grub.png /usr/share/images/desktop-base/kali-grub.png: PNG image data, 640 x 480, 8-bit/color RGB, non-interlaced root@kali:~# 可以确定这是一个 PNG 图像文件，像素尺寸为 640 x 480。GRUB 背景图像属性可以使用 PNG, JPG/JPEG 以及 TGA 类型的图像文件作为 GRUB 2 的背景。必须符合以下规范：JPG/JPEG 图像必须是 8-bit (256 色)图像应该是非索引的，RGB默认情况下，如果安装了 desktop-base 软件包，符合上述规范的图像将放在 /usr/share/images/desktop-base/ 目录中。在谷歌上很容易找到类似的文件。我也找了一个。root@kali:~# root@kali:~# file Downloads/wallpaper-1.png Downloads/wallpaper-1.png: PNG image data, 640 x 480, 8-bit/color RGB, non-interlaced root@kali:~# 方式 1：替换图像现在我们只需简单的用新文件将 /usr/share/images/desktop-base/kali-grub.png 替换掉。值得注意这是最简单的方法，不需要修改 grub-config 文件。 如果你对 GRUB 很熟，建议你简单的修改 GRUB 的默认配置文件，然后执行 update-grub。像往常一样，我会将原文件重命名为 kali-grub.png.bkp 进行备份。root@kali:~# root@kali:~# mv /usr/share/images/desktop-base/kali-grub.png /usr/share/images/desktop-base/kali-grub.png.bkp root@kali:~# 现在我们将下载的文件重命名为 kali-grub.png。root@kali:~# root@kali:~# cp Downloads/wallpaper-1.png /usr/share/images/desktop-base/kali-grub.png root@kali:~# 最后执行命令 update-grub：root@kali:~# update-grub Generating grub configuration file ... Found background image: /usr/share/images/desktop-base/desktop-grub.png Found linux image: /boot/vmlinuz-4.0.0-kali1-amd64 Found initrd image: /boot/initrd.img-4.0.0-kali1-amd64 No volume groups found done root@kali:~# 下次重新启动你的 Kali Linux 时，你会看到 GRUB 背景变成了你自己的图像（GRUB 启动界面)。下面是我现在正在使用的新 GRUB 启动背景。你呢？要不要试试这个办法？这是最简单最安全的办法，最糟的情况也不过是在 GRUB 看到一个蓝色的背景，但你依然可以登录后修复它们。现在如果你有信心，让我们尝试一个改变 GRUB 设置的更好的方法（有点复杂）。后续步骤更加有趣，而且可以在任何使用 GRUB 引导的 Linux 上使用。现在回忆一下 GRUB 在哪 4 个地方寻找启动背景图像？再看一遍：/etc/default/grub 里的 GRUB_BACKGROUND 行在 /boot/grub/ 里找到的第一个图像（如果发现多张，将以字母顺序排序）在 /usr/share/desktop-base/grub_background.sh 中指定的在 /etc/grub.d/05_debian_theme 里 WALLPAPER 行列出的那么我们再在 Kali Linux 上（或任意使用 GRUB2 的 Linux系统）试一下新的选择。方式 2：在 GRUB\_BACKGROUND 中定义图像路径所以你可以根据上述的查找优先级使用上述任一项，将 GRUB 背景图像改为自己的。以下是我自己系统上 /etc/default/grub 的内容。root@kali:~# vi /etc/default/grub 按照 GRUB_BACKGROUND="/root/World-Map.jpg" 的格式添加一行，其中 World-Map.jpg 是你要作为 GRUB 背景的图像文件。# If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. # For full documentation of the options in this file, see: # info -f grub -n 'Simple configuration' GRUB_DEFAULT=0 GRUB_TIMEOUT=15 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet" GRUB_CMDLINE_LINUX="initrd=/install/gtk/initrd.gz" GRUB_BACKGROUND="/root/World-Map.jpg" 一旦使用上述方式完成更改，务必执行 update-grub 命令，如下所示。root@kali:~# update-grub Generating grub configuration file ... Found background: /root/World-Map.jpg Found background image: /root/World-Map.jpg Found linux image: /boot/vmlinuz-4.0.0-kali1-amd64 Found initrd image: /boot/initrd.img-4.0.0-kali1-amd64 No volume groups found done root@kali:~# 现在重启机器，你会在 GRUB 看到自定义的图像。方式 3：把图像文件放到 /boot/grub/ 文件夹如果没有在 /etc/default/grub 文件中指定 GRUB_BACKGROUND 项，理论上 GRUB 应当使用在 /boot/grub/ 文件夹找到的第一个图像文件作为背景。如果 GRUB 在 /boot/grub/ 找到多个图像文件，它会按字母排序并使用第一个图像文件。方式 4：在 grub\_background.sh 指定图像路径如果没有在 /etc/default/grub 文件中指定 GRUB_BACKGROUND 项，而且 /boot/grub/ 目录下没有图像文件，GRUB 将会开始在 /usr/share/desktop-base/grub_background.sh 文件中指定的图像路径中搜索。Kali Linux 是在这里指定的。每个 Linux 发行版都有自己的特色。方式 5：在 /etc/grub.d/05\_debian\_theme 文件的 WALLPAPER 一行指定图像这是 GRUB 搜寻背景图像的最后一个位置。如果在其他部分都没有找到，它将会在这里查找。结论这篇文章较长，但我想介绍一些基础但很重要的东西。如果你有仔细阅读，你会理解如何在 Kali Linux 上来回跟踪符号链接。当你需要在一些 Linux 系统上查找 GRUB 背景图像的位置时，你会感到得心应手。只要再多阅读一点来理解 GRUB 颜色的工作方式，你就是行家了。via: https://www.blackmoreops.com/2015/11/27/change-grub-background-in-kali-linux/作者：https://www.blackmoreops.com/ 译者：fuowang 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
Samba 系列（五）：将另一台 Ubuntu DC 服务器加入到 Samba DC 实现双域控主机模式
这篇文章将讲解如何使用 Ubuntu 16.04 服务器版系统来创建第二台 Samba4 域控制器，并将其加入到已创建好的 Samba AD DC 林环境中，以便为一些关键的 AD DC 服务提供负载均衡及故障切换功能，尤其是为那些重要的服务，比如 DNS 服务和使用 SAM 数据库的 AD DC LDAP 模式。需求这篇文章是 Samba4 AD DC 系列的第五篇，前边几篇如下：1、在 Ubuntu 系统上使用 Samba4 来创建活动目录架构2、在 Linux 命令行下管理 Samba4 AD 架构3、使用 Windows 10 的 RSAT 工具来管理 Samba4 活动目录架构4、在 Windows 下管理 Samba4 AD 域管制器 DNS 和组策略第一步：为设置 Samba4 进行初始化配置1、在开始把第二个 DC 服务器加入到 Samba4 AD DC 域环境之前，你需要注意一些初始化设置信息，首先，确保这个新系统的主机名包含描述性名称。假设第一个域服务器的主机名叫做 adc1 ，你可以把第二个域服务器命名为 adc2，以保持域控制器名称的一致性。执行下面的命令来修改系统主机名：# hostnamectl set-hostname adc2 或者你也可以手动编辑 /etc/hostname 文件，在新的一行输入你想设置的主机名。# nano /etc/hostname 这里添加主机名。adc2 2、下一步，打开本地系统解析文件并添加一个条目，包含主域控制器的 IP 地址和 FQDN 名称。如下图所示：在这篇教程中，主域控服务器的主机名为 adc1.tecmint.lan ，其对应的 IP 地址为 192.168.1.254 。# nano /etc/hosts 添加如下行：IP_of_main_DC FQDN_of_main_DC short_name_of_main_DC 为 Samba4 AD DC 服务器设置主机名3、下一步，打开 /etc/network/interfaces 配置文件并设置一个静态 IP 地址，如下图所示：注意 dns-nameservers 和 dns-search 这两个参数的值。为了使 DNS 解析正常工作，需要把这两个值设置成主 Samba4 AD DC 服务器的 IP 地址和域名。重启网卡服务以让修改的配置生效。检查 /etc/resolv.conf 文件，确保该网卡上配置的这两个 DNS 的值已更新到这个文件。# nano /etc/network/interfaces 编辑并替换你自定义的 IP 设置：auto ens33 iface ens33 inet static address 192.168.1.253 netmask 255.255.255.0 brodcast 192.168.1.1 gateway 192.168.1.1 dns-nameservers 192.168.1.254 dns-search tecmint.lan 重启网卡服务并确认生效。# systemctl restart networking.service # cat /etc/resolv.conf 配置 Samba4 AD 服务器的 DNS当你通过简写名称（用于构建 FQDN 名）查询主机名时， dns-search 值将会自动把域名添加上。4、为了测试 DNS 解析是否正常，使用一系列 ping 命令测试，命令后分别为简写名， FQDN 名和域名，如下图所示：在所有测试用例中，Samba4 AD DC DNS 服务器都应该返回主域控服务器的 IP 地址。验证 Samba4 AD 环境 DNS 解析是否正常5、最后你需要注意的是确保这个主机跟域控服务器时间同步。你可以通过下面的命令在系统上安装 NTP 客户端工具来实现时间同步功能：# apt-get install ntpdate 6、假设你想手动强制本地服务器与 samba4 AD DC 服务器时间同步，使用 ntpdate 命令加上主域控服务器的主机名，如下所示：# ntpdate adc1 与 Samba4 AD 服务器进行时间同步第 2 步：安装 Samba4 必须的依赖包7、为了让 Ubuntu 16.04 系统加入到你的域中，你需要通过下面的命令从 Ubuntu 官方软件库中安装 Samba4 套件、 Kerberos 客户端 和其它一些重要的软件包以便将来使用：# apt-get install samba krb5-user krb5-config winbind libpam-winbind libnss-winbind 在 Ubuntu 系统中安装 Samba48、在安装的过程中，你需要提供 Kerberos 域名。输入大写的域名然后按回车键完成安装过程。为 Samba4 配置 Kerberos 认证9、所有依赖包安装完成后，通过使用 kinit 命令为域管理员请求一个 Kerberos 票据以验证设置是否正确。使用 klist 命令来列出已授权的 kerberos 票据信息。# kinit domain-admin-user@YOUR_DOMAIN.TLD # klist 在 Samba4 域环境中验证 Kerberos第 3 步：以域控制器的身份加入到 Samba4 AD DC10、在把你的机器集成到 Samba4 DC 环境之前，先把系统中所有运行着的 Samba4 服务停止，并且重命名默认的 Samba 配置文件以便从头开始。在域控制器配置的过程中， Samba 将会创建一个新的配置文件。# systemctl stop samba-ad-dc smbd nmbd winbind # mv /etc/samba/smb.conf /etc/samba/smb.conf.initial 11、在准备加入域前，先启动 samba-ad-dc 服务，之后使用域管理员账号运行 samba-tool 命令将服务器加入到域。# samba-tool domain join your_domain -U "your_domain_admin" 加入域过程部分截图:# samba-tool domain join tecmint.lan DC -U "tecmint_user" 输出示例：Finding a writeable DC for domain 'tecmint.lan' Found DC adc1.tecmint.lan Password for [WORKGROUP\tecmint_user]: workgroup is TECMINT realm is tecmint.lan checking sAMAccountName Deleted CN=ADC2,CN=Computers,DC=tecmint,DC=lan Adding CN=ADC2,OU=Domain Controllers,DC=tecmint,DC=lan Adding CN=ADC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=tecmint,DC=lan Adding CN=NTDS Settings,CN=ADC2,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=tecmint,DC=lan Adding SPNs to CN=ADC2,OU=Domain Controllers,DC=tecmint,DC=lan Setting account password for ADC2$ Enabling account Calling bare provision Looking up IPv4 addresses Looking up IPv6 addresses No IPv6 address will be assigned Setting up share.ldb Setting up secrets.ldb Setting up the registry Setting up the privileges database Setting up idmap db Setting up SAM db Setting up sam.ldb partitions and settings Setting up sam.ldb rootDSE Pre-loading the Samba 4 and AD schema A Kerberos configuration suitable for Samba 4 has been generated at /var/lib/samba/private/krb5.conf Provision OK for domain DN DC=tecmint,DC=lan Starting replication Schema-DN[CN=Schema,CN=Configuration,DC=tecmint,DC=lan] objects[402/1550] linked_values[0/0] Schema-DN[CN=Schema,CN=Configuration,DC=tecmint,DC=lan] objects[804/1550] linked_values[0/0] Schema-DN[CN=Schema,CN=Configuration,DC=tecmint,DC=lan] objects[1206/1550] linked_values[0/0] Schema-DN[CN=Schema,CN=Configuration,DC=tecmint,DC=lan] objects[1550/1550] linked_values[0/0] Analyze and apply schema objects Partition[CN=Configuration,DC=tecmint,DC=lan] objects[402/1614] linked_values[0/0] Partition[CN=Configuration,DC=tecmint,DC=lan] objects[804/1614] linked_values[0/0] Partition[CN=Configuration,DC=tecmint,DC=lan] objects[1206/1614] linked_values[0/0] Partition[CN=Configuration,DC=tecmint,DC=lan] objects[1608/1614] linked_values[0/0] Partition[CN=Configuration,DC=tecmint,DC=lan] objects[1614/1614] linked_values[28/0] Replicating critical objects from the base DN of the domain Partition[DC=tecmint,DC=lan] objects[97/97] linked_values[24/0] Partition[DC=tecmint,DC=lan] objects[380/283] linked_values[27/0] Done with always replicated NC (base, config, schema) Replicating DC=DomainDnsZones,DC=tecmint,DC=lan Partition[DC=DomainDnsZones,DC=tecmint,DC=lan] objects[45/45] linked_values[0/0] Replicating DC=ForestDnsZones,DC=tecmint,DC=lan Partition[DC=ForestDnsZones,DC=tecmint,DC=lan] objects[18/18] linked_values[0/0] Committing SAM database Sending DsReplicaUpdateRefs for all the replicated partitions Setting isSynchronized and dsServiceName Setting up secrets database Joined domain TECMINT (SID S-1-5-21-715537322-3397311598-55032968) as a DC 把域加入到 Samba4 AD DC12、在已安装了 Samba4 套件的 Ubuntu 系统加入域之后，打开 Samba 主配置文件添加如下行：# nano /etc/samba/smb.conf 添加以下内容到 smb.conf 配置文件中。dns forwarder = 192.168.1.1 idmap_ldb:use rfc2307 = yes template shell = /bin/bash winbind use default domain = true winbind offline logon = false winbind nss info = rfc2307 winbind enum users = yes winbind enum groups = yes 使用你自己的 DNS 转发器 IP 地址替换掉上面 dns forwarder 地址。 Samba 将会把域权威区之外的所有 DNS 解析查询转发到这个 IP 地址。13、最后，重启 samba 服务以使修改的配置生效，然后执行如下命令来检查活动目录复制功能是否正常。# systemctl restart samba-ad-dc # samba-tool drs showrepl 配置 Samba4 DNS14、另外，还需要重命名原来的 /etc下的 kerberos 配置文件，并使用在加入域的过程中 Samba 生成的新配置文件 krb5.conf 替换它。Samba 生成的新配置文件在 /var/lib/samba/private 目录下。使用 Linux 的符号链接将该文件链接到 /etc 目录。# mv /etc/krb6.conf /etc/krb5.conf.initial # ln -s /var/lib/samba/private/krb5.conf /etc/ # cat /etc/krb5.conf 配置 Kerberos15、同样，使用 samba 的 krb5.conf 配置文件验证 Kerberos 认证是否正常。通过以下命令来请求一个管理员账号的票据并且列出已缓存的票据信息。# kinit administrator # klist 使用 Samba 验证 Kerberos 认证是否正常第 4 步：验证其它域服务16、你首先要做的一个测试就是验证 Samba4 DC DNS 解析服务是否正常。要验证域 DNS 解析情况，使用 host 命令，加上一些重要的 AD DNS 记录，进行域名查询，如下图所示：每一次查询，DNS 服务器都应该返回两个 IP 地址。# host your_domain.tld # host -t SRV _kerberos._udp.your_domain.tld # UDP Kerberos SRV record # host -t SRV _ldap._tcp.your_domain.tld # TCP LDAP SRV record *验证 Samba4 DC DNS *17、这些 DNS 记录也可以从注册过的已安装了 RSAT 工具的 Windows 机器上查询到。打开 DNS 管理器，展开到你的域 tcp 记录，如下图所示：通过 Windows RSAT 工具来验证 DNS 记录18、下一个验证是检查域 LDAP 复制同步是否正常。使用 samba-tool 工具，在第二个域控制器上创建一个账号，然后检查该账号是否自动同步到第一个 Samba4 AD DC 服务器上。在 adc2 上：# samba-tool user add test_user 在 adc1 上：# samba-tool user list | grep test_user 在 Samba4 AD 服务器上创建账号在 Samba4 AD 服务器上验证同步功能19、你也可以从 Microsoft AD DC 控制台创建一个账号，然后验证该账号是否都出现在两个域控服务器上。默认情况下，这个账号都应该在两个 samba 域控制器上自动创建完成。在 adc1 服务器上使用 wbinfo 命令查询该账号名。从 Microsoft AD UC 创建账号在 Samba4 AD 服务器上验证账号同步功能20、实际上，打开 Windows 机器上的 AD DC 控制台，展开到域控制器，你应该看到两个已注册的 DC 服务器。验证 Samba4 域控制器第 5 步：启用 Samba4 AD DC 服务21、要在整个系统启用 Samba4 AD DC 的服务，首先你得禁用原来的不需要的 Samba 服务，然后执行如下命令仅启用 samba-ad-dc 服务：# systemctl disable smbd nmbd winbind # systemctl enable samba-ad-dc 启用 Samba4 AD DC 服务22、如果你从 Microsoft 客户端远程管理 Samba4 域控制器，或者有其它 Linux 或 Windows 客户机集成到当前域中，请确保在它们的网卡 DNS 服务器地址设置中提及 adc2 服务器的 IP 地址，以实现某种程序上的冗余。下图显示 Windows 和 Debian/Ubuntu 客户机的网卡配置要求。配置 Windows 客户端来管理 Samba4 DC配置 Linux 客户端来管理 Samba4 DC如果第一台 DC 服务器 192.168.1.254 网络不通，则调整配置文件中 DNS 服务器 IP 地址的顺序，以免先查询这台不可用的 DNS 服务器。最后，如果你想在 Linux 系统上使用 Samba4 活动目录账号来进行本地认证，或者为 AD LDAP 账号授予 root 权限，请查看在 Linux 命令行下管理 Samba4 AD 架构 这篇教程的 第 2 步和第 3 步。作者简介：我叫 Ravi Saive，TecMint 网站博主。一个喜欢在网上分享技术知识及经验的电脑极客和 Linux 系统专家。我的大多数的服务器都运行在 Linux 开源平台上。关注我：Twitter ，Facebook 和 Google+ 。via: http://www.tecmint.com/join-additional-ubuntu-dc-to-samba4-ad-dc-failover-replication/作者：Ravi Saive 译者：rusking 校对：jasminepeng本文由 LCTT 原创编译，Linux中国 荣誉推出
如何在 CentOS 7 中在 HHVM 和 Nginx 之上安装 WordPress
HHVM （HipHop Virtual Machine） 是一个用于执行以 PHP 和 Hack 语言编写的代码的虚拟环境。它是由 Facebook 开发的，提供了当前 PHP 7 的大多数功能。要在你的服务器上运行 HHVM，你需要使用 FastCGI 来将 HHVM 和 Nginx 或 Apache 衔接起来，或者你也可以使用 HHVM 中的内置 Web 服务器 Proxygen。在这篇教程中，我将展示给你如何在 Nginx Web 服务器的 HHVM 上安装 WordPress。这里我使用 CentOS 7 作为操作系统，所以你需要懂一点 CentOS 操作的基础。先决条件CentOS 7 - 64位Root 权限步骤 1 - 配置 SELinux 并添加 EPEL 仓库在本教程中，我们将使用 SELinux 的强制模式，所以我们需要在系统上安装一个 SELinux 管理工具。这里我们使用 setools 和 setrobleshoot 来管理 SELinux 的各项配置。CentOS 7 已经默认启用 SELinux，我们可以通过以下命令来确认：# sestatus # getenforce 如图，你能够看到，SELinux 已经开启了强制模式。接下来就是使用 yum 来安装 setools 和 setroubleshoot 了。# yum -y install setroubleshoot setools net-tools 安装好这两个后，再安装 EPEL 仓库。# yum -y install epel-release 步骤 2 - 安装 NginxNginx (发音：engine-x) 是一个高性能、低内存消耗的轻量级 Web 服务器软件。在 CentOS 中可以使用 yum 命令来安装 Nginx 包。确保你以 root 用户登录系统。使用 yum 命令从 CentOS 仓库中安装 nginx。# yum -y install nginx 现在可以使用 systemctl 命令来启动 Nginx，同时将其设置为跟随系统启动。# systemctl start nginx # systemctl enable nginx 为确保 Nginx 已经正确运行于服务器中，在浏览器上输入服务器的 IP，或者如下使用 curl 命令检查显示结果。# curl 192.168.1.110 我这里使用浏览器来验证。步骤 3 - 安装并配置 MariaDBMariaDB 是由原 MySQL 开发者 Monty Widenius 开发的一款开源数据库软件，它由 MySQL 分支而来，与 MySQL 的主要功能保持一致。在这一步中，我们要安装 MariaDB 数据库并为之配置好 root 密码，然后再为所要安装的 WordPress 创建一个新的数据库和用户。安装 mariadb 和 mariadb-server：# yum -y install mariadb mariadb-server 启动 MariaDB 并添加为服务，以便随系统启动。# systemctl start mariadb # systemctl enable mariadb 现在 MariaDB 已经启动了，还需要为 mariadb/mysql 数据库配置 root 用户密码。输入以下命令来设置 MariaDB root 密码。# mysql_secure_installation 提示设置 root 用户密码时，输入新密码进行设置：Set root password? [Y/n] Y New password: Re-enter new password: Remove anonymous users? [Y/n] Y ... Success! Disallow root login remotely? [Y/n] Y ... Success! Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y ... Success! 这样就设置好了 MariaDB 的 root 密码。现在登录到 MariaDB/MySQL shell 并为 WordPress 的安装创建一个新数据库 wordpressdb 和新用户 wpuser，密码设置为 wpuser@。为你的设置选用一个安全的密码。登录到 MariaDB/MySQL shell：# mysql -u root -p 接着输入你刚刚设置的 root 用户密码。创建数据库和用户：MariaDB [(none)]> create database wordpressdb; MariaDB [(none)]> create user wpuser@localhost identified by 'wpuser@'; MariaDB [(none)]> grant all privileges on wordpressdb.* to wpuser@localhost identified by 'wpuser@'; MariaDB [(none)]> flush privileges; MariaDB [(none)]> \q 现在安装好了 MariaDB，并为 WordPress 创建好了数据库。步骤 4 - 安装 HHVM对于 HHVM，我们需要安装大量的依赖项。作为选择，你可以从 GitHub 下载 HHVM 的源码来编译安装，也可以从网络上获取预编译的包进行安装。在本教程中，我使用的是预编译的安装包。为 HHVM 安装依赖项：# yum -y install cpp gcc-c++ cmake git psmisc {binutils,boost,jemalloc,numactl}-devel \ > {ImageMagick,sqlite,tbb,bzip2,openldap,readline,elfutils-libelf,gmp,lz4,pcre}-devel \ > lib{xslt,event,yaml,vpx,png,zip,icu,mcrypt,memcached,cap,dwarf}-devel \ > {unixODBC,expat,mariadb}-devel lib{edit,curl,xml2,xslt}-devel \ > glog-devel oniguruma-devel ocaml gperf enca libjpeg-turbo-devel openssl-devel \ > mariadb mariadb-server libc-client make 然后是使用 rpm 安装从 HHVM 预编译包镜像站点 下载的 HHVM 预编译包。# rpm -Uvh http://mirrors.linuxeye.com/hhvm-repo/7/x86_64/hhvm-3.15.2-1.el7.centos.x86_64.rpm # ln -s /usr/local/bin/hhvm /bin/hhvm 安装好 HHVM 之后使用如下命令按了验证：# hhvm --version 为了能使用 PHP 命令，可以把 hhvm 命令设置为 php。这样在 shell 中输入 php 命令的时候，你会看到和输入 hhvm 命令一样的结果。# sudo update-alternatives --install /usr/bin/php php /usr/bin/hhvm 60 # php --version 步骤 5 - 配置 HHVM这一步中，我们来配置 HHVM 以系统服务来运行。我们不通过端口这种常规的方式来运行它，而是选择使用 unix socket 文件的方式，这样运行的更快速一点。进入 systemd 配置目录，并创建一个 hhvm.service 文件。# cd /etc/systemd/system/ # vim hhvm.service 复制粘贴如下配置到文件中去。[Unit] Description=HHVM HipHop Virtual Machine (FCGI) After=network.target nginx.service mariadb.service [Service] ExecStart=/usr/local/bin/hhvm --config /etc/hhvm/server.ini --user nginx --mode daemon -vServer.Type=fastcgi -vServer.FileSocket=/var/run/hhvm/hhvm.sock [Install] WantedBy=multi-user.target 保存文件退出 vim。接下来，进入 hhvm 目录并编辑 server.ini 文件。# cd /etc/hhvm/ # vim server.ini 将第 7 行 hhvm.server.port 替换为 unix socket，如下：hhvm.server.file_socket = /var/run/hhvm/hhvm.sock 保存文件并退出编辑器。我们已在 hhvm 服务文件中定义了 hhvm 以 nginx 用户身份运行，所以还需要把 socket 文件目录的属主变更为 nginx。然后我们还必须在 SELinux 中修改 hhvm 目录的权限上下文以便让它可以访问这个 socket 文件。# chown -R nginx:nginx /var/run/hhvm/ # semanage fcontext -a -t httpd_var_run_t "/var/run/hhvm(/.*)?" # restorecon -Rv /var/run/hhvm 服务器重启之后，hhvm 将不能运行，因为没有存储 socket 文件的目录，所有还必须在启动的时候自动创建一个。使用 vim 编辑 rc.local 文件。# vim /etc/rc.local 将以下配置粘贴到文件末行。# mkdir -p /var/run/hhvm/ # chown -R nginx:nginx /var/run/hhvm/ # semanage fcontext -a -t httpd_var_run_t "/var/run/hhvm(/.*)?" # restorecon -Rv /var/run/hhvm 保存文件并退出 vim。然后给文件赋予执行权限。# chmod +x /etc/rc.local 重新加载 systemd 服务，启动 hhvm 并设置为随系统启动。# systemctl daemon-reload # systemctl start hhvm # systemctl enable hhvm 要确保无误，使用 netstat 命令验证 hhvm 运行于 socket 文件。# netstat -pl | grep hhvm 步骤 6 - 配置 HHVM 和 Nginx在这个步骤中，我们将配置 HHVM 已让它运行在 Nginx Web 服务中，这需要在 Nginx 目录创建一个 hhvm 的配置文件。进入 /etc/nginx 目录，创建 hhvm.conf 文件。# cd /etc/nginx/ # vim hhvm.conf 粘贴以下内容到文件中。location ~ \.(hh|php)$ { root /usr/share/nginx/html; fastcgi_keep_conn on; fastcgi_pass unix:/var/run/hhvm/hhvm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }然后，保存并退出。接下来，编辑 nginx.conf 文件，添加 hhvm 配置文件到 include 行。# vim nginx.conf 添加配置到第 57 行的 server 指令中。include /etc/nginx/hhvm.conf; 保存并退出。然后修改 SELinux 中关于 hhvm 配置文件的权限上下文。# semanage fcontext -a -t httpd_config_t /etc/nginx/hhvm.conf # restorecon -v /etc/nginx/hhvm.conf 测试 Nginx 配置并重启服务。# nginx -t # systemctl restart nginx 记住确保测试配置没有错误。步骤 7 - 通过 HHVM 和 Nginx 创建虚拟主机在这一步中，我们要为 Nginx 和 hhvm 创建一个新的虚拟主机配置文件。这里我使用域名 natsume.co 来作为例子，你可以使用你主机喜欢的域名，并在配置文件中相应位置以及 WordPress 安装过程中进行替换。进入 nginx 的 conf.d 目录，我们将在该目录存储虚拟主机文件。# cd /etc/nginx/conf.d/ 使用 vim 创建一个名为 natsume.conf 的配置文件。# vim natsume.conf 粘贴以下内容到虚拟主机配置文件中。server { listen 80; server_name natsume.co; # note that these lines are originally from the "location /" block root /var/www/hakase; index index.php index.html index.htm; location / { try_files $uri $uri/ =404; } error_page 404 /404.html; location = /50x.html { root /var/www/hakase; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/hhvm/hhvm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } 保存并退出。在这个虚拟主机配置文件中，我们定义该域名的 Web 根目录为 /var/www/hakase。目前该目录还不存在，所有我们要创建它，并变更属主为 nginx 用户和组。# mkdir -p /var/www/hakase # chown -R nginx:nginx /var/www/hakase 接下来，为该文件和目录配置 SELinux 上下文。# semanage fcontext -a -t httpd_config_t "/etc/nginx/conf.d(/.*)?" # restorecon -Rv /etc/nginx/conf.d 最后，测试 nginx 配置文件以确保没有错误后，重启 nginx：# nginx -t # systemctl restart nginx 步骤 8 - 安装 WordPress在步骤 5 的时候，我们已经为 WordPress 配置好了虚拟主机，现在只需要下载 WordPress 和使用我们在步骤 3 的时候创建的数据库和用户来编辑数据库配置就好了。进入 Web 根目录 /var/www/hakase 并使用 Wget 命令下载 WordPress：# cd /var/www/hakase # wget wordpress.org/latest.tar.gz 解压 latest.tar.gz 并将 wordpress 文件夹中所有的文件和目录移动到当前目录：# tar -xzvf latest.tar.gz # mv wordpress/* . 下一步，复制一份 wp-config-sample.php 并更名为 wp-config.php，然后使用 vim 进行编辑：# cp wp-config-sample.php wp-config.php # vim wp-config.php 将 DB_NAME 设置为 wordpressdb、DB_USER 设置为 wpuser 以及 DB_PASSWORD 设置为 wpuser@。define('DB_NAME', 'wordpressdb'); define('DB_USER', 'wpuser'); define('DB_PASSWORD', 'wpuser@'); define('DB_HOST', 'localhost'); 保存并退出。修改关于 WordPress 目录的 SELinux 上下文。# semanage fcontext -a -t httpd_sys_content_t "/var/www/hakase(/.*)?" # restorecon -Rv /var/www/hakase 现在打开 Web 浏览器，在地址栏输入你之前为 WordPress 设置的域名，我这里是 natsume.co。选择语言并点击 继续 Continue 。根据自身要求填写站点标题和描述并点击 安装 Wordpress Install Wordpress "。耐心等待安装完成。你会见到如下页面，点击 登录 Log In 来登录到管理面板。输入你设置的管理员用户账号和密码，在此点击 登录 Log In 。现在你已经登录到 WordPress 的管理面板了。Wordpress 的主页：至此，我们已经在 CentOS 7 上通过 Nginx 和 HHVM 成功安装 Wordpress。参考链接https://www.nginx.com/blog/nginx-se-linux-changes-upgrading-rhel-6-6/译者简介：GHLandy —— 划不完粉腮柳眉泣别离。via: https://www.howtoforge.com/tutorial/how-to-install-wordpress-with-hhvm-and-nginx-on-centos-7/作者：Muhammad Arul 译者：GHLandy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
养一个孩子和维护一个软件，这两者真的是一样的吗？同样都是充满挑战吧！译者简介：GHLandy —— 生活中所有欢乐与苦闷都应藏在心中，有些事儿注定无人知晓，自己也无从说起。via: http://turnoff.us/geek/the-depressed-developer-12/作者：Daniel Stori 译者：GHLandy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
SSH 安全加固篇：通过“运维密码”小程序实现 SSH 双因子认证
本文讲述了如何通过 Linux中国 所开发的微信小程序“运维密码”实现在 Linux 系统上 OpenSSH 双因子认证，从而对 SSH 进行安全加固。背景近来很多知名企业都出现了密码泄露，通过单一的密码对敏感和重要信息进行保护已经面临越来越多的挑战，因此业内对多重认证的呼声也越来越高，而其中的双因子认证得到了业界的普遍认可。什么是双因子认证 双因子认证 （ Two-factor authentication ） （即 2FA），是一种通过组合两种不同的验证方式进行用户身份验证的机制。在这种多重认证的系统中，用户需要通过两种不同的认证程序：提供他们知道的信息（如用户名/密码）再借助其他工具提供用户所不知道的信息（如用手机生成的一次性密码）SSH 双因子认证实现思路在 SSH 服务器端安装 Google 身份验证器服务器端组件，这样，在使用密码或密钥登录 SSH 服务器时，同时通过与 Google 身份验证器相匹配的客户端所提供的验证信息来确认登录者的身份和权限。这里的客户端可以使用 Google 身份验证器 （ Google Authenticator ） 应用，也可以使用我们开发的、采用同一个 RFC 规范的“运维密码”微信小程序。Google 身份验证器所采用的算法规范基于 TOTP RFC 草案。（题外话，RSA 硬件令牌，也是采用了类似的机制，只不过客户端是硬件的；而最近 Apple 公司的一些服务所需要的双因子认证也是一样的，但是其用于呈现验证信息的是手机或平板上的 iOS 内部组件，非独立应用。）关于Google 身份验证器为了鼓励广泛采用双因子认证的方式，Google 公司发布了 Google 身份验证器 （ Google Authenticator ） ，这是一款开源的、可基于开放规则（如 HMAP/ 基于时间）生成一次性密码的软件。它是一款跨平台软件，可运行在 Linux、Android、iOS 上。Google 公司同时也支持 插件式鉴别模块 （ pluggable authentication module ） PAM ，使其能和其它适用于 PAM 进行验证的工具（如 OpenSSH）协同工作。Google 身份验证器分为两个部分，分别是服务器端组件和客户端应用，都称之为“Google 身份验证器”，这里，我们为了澄清起见，会在说明时指明。关于运维密码Google 公司所开发的身份验证器以简洁著称，但也因此缺乏一些必要的特性，比如备份功能——这使得使用该身份验证器的人时时处于手机丢失的恐慌之中。（虽然 Google 提供的服务器端和自身的服务也提供了紧急验证码，以用于这种情况下的自救，但是很多采用 Google 身份验证器的服务并不支持和提供紧急验证码）作为一家紧密关注于运维安全、积极倡导信息安全的技术社区，Linux 中国 久已有开发一个新的替代品的想法。恰逢微信推出小程序平台，我们感觉到这正是一个良机，可以充分利用到微信和小程序的便利之处，又适合小程序的使用情境。因此，由 Linux 中国旗下的 LCTT 技术组的白宦成同学独立开发了一款旨在移动互联网场景中提供更好的多因子认证体验的小程序：运维密码。顺便说一句，在产品初步成熟之后，我们已经将该小程序开源给社区，代码托管于 GitHub：https://github.com/LCTT/WeApp-Password ，希望更多的人能够受益和共同完善它，有什么功能需求、错误反馈请到 GitHub 上提出 issue，也欢迎发送拉取请求给我们。此外，大家在使用过程中，发现什么问题或需要帮助，也可以加入微信体验群：扫描识别添加上面的好友，验证信息：“运维密码”，可获得入群邀请。言归正传，我们来看看如何使用“运维密码”来为你的 SSH 服务提供双因子认证支持。如何开始首先我们需要一些准备工作：一台运行着 OpenSSH 服务（版本大于 6.2）的 Linux 主机一台能运行微信的智能手机一台支持 SSH 登录的终端在 Linux 系统中安装 Google 身份验证器服务器端组件第一步需要在运行着 OpenSSH 服务的 Linux 主机上安装 Google 身份验证器服务器端组件。按照如下步骤安装 Google 身份验证器及其 PAM 模块。用安装包安装 Google 身份验证器服务器端组件如果你不想自己构建 Google 身份验证器服务器端组件，在几个主流 Linux 发行版上有已经编译好的安装包。安装包里面包含 Google 身份验证器服务器端组件的二进制程序和 PAM 模块。在 Ubuntu 上安装 Google 身份验证器服务器端组件：sudo apt-get install libpam-google-authenticator 在 Fedora 上安装 Google 身份验证器服务器端组件：sudo dnf install google-authenticator 在 CentOS 上安装 Google 身份验证器服务器端组件，需要首先启用 EPEL 软件库，然后运行如下命令：sudo yum install google-authenticator 编译安装 Google 身份验证器服务器端组件提示：编译安装建议对 Linux、pam 等熟悉的同学采用。首先，安装构建 Google 身份验证器所需的软件包。在 Debian、 Ubuntu 或 Linux Mint 上：sudo apt-get install wget make gcc libpam0g-dev 在 CentOS、 Fedora 或 RHEL 上：sudo yum install wget make gcc pam-devel 然后下载 Google 身份验证器服务器端组件的源代码：git clone https://github.com/google/google-authenticator-libpam.git编译安装 Google 身份验证器服务器端组件：cd google-authenticator-libpam ./bootstrap.sh ./configure make 如果构建成功，你会在目录中看到 pam_google_authenticator.so 和 google-authenticator 两个二进制文件。最后，将 Google 身份验证器的服务器端组件安装到合适位置。其默认会安装到 /usr/local/lib/security 下，根据你的系统不同，你可能需要将其符号链接到 pam 库的位置（比如 CentOS 7 会在 /usr/lib64/security）。如下图所示：sudo make install 至此，Google 身份验证器服务器端组件安装完成。配置 Google 身份验证器服务器端组件及“运维密码”小程序完成 Google 身份验证器服务器端组件的安装我们仅仅完成了第一步，接着需要对 Google 身份验证器服务器端组件、“运维密码”、OpenSSH 进行配置才能达到我们预期的效果。配置 google-authenticator 及生成验证密钥使用以下命令生成验证密钥：./google-authenticator 生成验证密钥的时候，会再次确认信息。Do you want authentication tokens to be time-based (y/n) 意思是：你想要生成基于时间生成验证码吗？这里需要需要输入 y。输入 y之后你将看到一个代表着该“场景”密钥的二维码和密钥字符串，它使用如下二维码图形格式表示我们数字形态的密钥（这里也提供了一个用于在浏览器中再次显示该二维码的 URL，但是需要翻墙）。接着我们要用到它在“运维密码”上完成配置。（安装 google-authenticator 过程中若出现二维码无法显示的问题，请检查系统中是否安装了二维码生成器：rpm - q qrencode，若未安装，请运行命令 yum install qrencode -y 安装后重试。）在二维码和密钥字符串后面，接着显示了一个当前的校验码和几个紧急密钥。紧急密钥你可以另行保存的一个安全的地方，以防你在无法使用 Google 身份验证器应用或“运维密码”时使用（紧急密钥是 8 位的，不同于普通的 6 位密钥，也是一次性使用的）。保存 Google 服务器端组件的配置文件，Google 身份验证器虽然运行了，但是相关设置还没有保存，接下来会提示保存：Do you want me to update your "/root/.google_authenticator" file? (y/n) 意思是：你想将配置文件更新到 /root/.google_authenticator 保存吗？输入 y 回车。禁止同一令牌多次登录Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n) 意思是：你是否要禁用同一密钥多次登录，这将限制你每 30 秒只能使用该密钥登录一次，但这能够让你可以更多地被提醒受到了中间人攻击，甚至能够防止这种攻击。输入 y 回车。时间容错设置By default, tokens are good for 30 seconds. In order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. If you experience problems with poor time synchronization, you can increase the window from its default size of +-1min (window size of 3) to about +-4min (window size of 17 acceptable tokens). Do you want to do so? (y/n) 意思是：默认情况下，密钥在 30 秒内有效，为了防止由于客户端与服务器时间偏移（时间相差太大）导致认证失败，google 身份验证器设计了时间容错措施。可以让你使用与当前时间偏移 1 到 4 分钟的密钥。这个可根据实际情况进行配置，一般一分钟就足够了。输入 y回车。暴力破解防护If the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. Do you want to enable rate-limiting (y/n) 意思是：为了避免暴力破解，可以启用速率限制，默认情况下，每 30 秒只能尝试 3 次。输入 y回车。配置完成配置完成后会在home目录下生成一个权限为 400 的隐藏文件，如下图所示：配置运维密码打开微信小程序打开微信，依次点击“发现”，“小程序”，输入“运维密码”并搜索。或长按识别下列二维码：点击“运维密码”进入应用，然后点击列表下方的“添加场景”：这会调起“扫一扫”功能，请扫描配置 google-authenticator 时所生成的二维码，然后会识别出该场景信息，你可以根据需要修改场景信息，点击确定添加场景。这样 Google 身份验证器就和“运维密码”匹配上了。下面我们要使 SSH 服务可以支持该验证。配置 SSH 服务添加认证模块使用如下命令在 /etc/pam.d/sshd 文件添加认证模块：echo "auth required pam_google_authenticator.so" >>/etc/pam.d/sshd 在 Centos 6.6 或更低的版本中如果遇到无法进行 google-authenticator 验证的情况，请将 auth required pam_google_authenticator.so放在 /etc/pam.d/sshd 文件的最顶端进行测试一下。配置挑战式密码认证：sed -i 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/g' /etc/ssh/sshd_config 重启 sshd 服务：systemctl restart sshd.service 切记，如果你是远程登录到服务器上配置，切勿退出当前的 SSH 会话，而应该另外开一个会话去测试 SSH 登录。重启不会中断当前的 SSH 会话。测试登录以上配置完成基本上就搞定了，下面我们进行测试。密码登录测试另外开一个终端窗口进行连接，不要关闭当前的 SSH 连接。输入命令登录主机：ssh root@10.112.2.3 首先输入服务器的密码，接着会让输入“运维密码”生成的 6 位数字密钥。如下图：我们可以看到，在登录的时候，需要配合“运维密码”才能登录服务器。公钥登录测试如果使用公钥登录呢？以上配置是不是也是需要配合“运维密码”才能登录的，我们进行验证一下：首先，我们将本机的公钥复制到远程机器的 authorized_keys 文件中。ssh-copy-id root@10.112.2.3 登录测试：我们可以看到，不需要输入任何密码和一次性密钥，直接登录到了系统。结合运维密码配置增强型SSH安全选项针对上面公钥登录的测试，如果认为还不是很安全，我们可以设定如下登录场景：公钥 + 密码 + 运维密码，我们需要如何做呢？配置 SSH 公钥双因子修改 /etc/ssh/sshd_config 配置文件：echo "AuthenticationMethods publickey,keyboard-interactive:pam" >>/etc/ssh/sshd_config 重启 SSH 服务：systemctl restart sshd.service 登录测试（同样，请新开窗口）：ssh root@10.112.2.3 可以看到，登录的时候是需要验证公钥、密码，及输入“运维密码”生成的密钥才能登录到系统。没有密钥的情况下尝试登录测试，如下图：总结至此，本文结束，更多的使用细节可以参照小程序内的帮助，或此文。如有错误及不足欢迎指正。也欢迎大家加入到这个小程序的开发当中，将这个小程序应用到你的应用场景中。
一周开源新闻：Let's Encrypt 给钓鱼网站颁发了 15000 份欺诈安全证书
免费和开放的证书颁发机构 Let's Encrypt，给钓鱼网站颁发了将近 15000 份包含了 “PayPal” 关键字的证书。这是由加密专家 Vincent Lynch 发现的。他说，Let's Encrypt 去年签发的包含 “PayPal” 关键字的 15,270 份安全证书中，有 96.7% 发给了钓鱼网站。数据显示，证书签发高峰是从 2016 年 11 月开始的。Let's Encrypt 出现的时间并不长。事实上，它是 2015 年 12 月进入公测，2016 年 4 月推出 beta 版。它提供服务的目的是通过加密网站用 TLS 保护用户数据不被窃听。这些证书是为使访客确信站点的网页是安全的。为钓鱼网站发放证书，意味着 Let's Encrypt 证实这些站点的合法性。Vincent Lynch 认为，提供免费证书的政策确实为钓鱼网站创造了非常诱人的环境。此报告发布的几周前，Lynch 请求 Let's Encrypt 停止签发 PayPal 证书，因为这些证书被用于钓鱼目的。那时，他估计包含 PayPal 的证书数量在 1000 以下。 显然，现在根据他的完整调查，情况在迅速恶化。“鼓励 HTTPS 使用的各种动机对钓鱼网站同样有吸引力，有一些性能的好处 (例如 HTTP/2) 只对使用 HTTPS 的站点有效。此外，对使用有效 SSL 证书的站点，浏览器也会给出信任的 UI 提示（如 Chrome 中的安全标签，浏览器的小锁图标等），这些都使钓鱼网站看起来更合法”，Lynch 在报告中写道。Ilia Kolochenko，一家 Web 安全公司 High-Tech Bridge 的 CEO 认为，Let's Encrypt 本应该预见到对其服务的滥用，并采取一些至少很基本的验证，例如拒绝包含流行品牌名的域名申请 SSL 证书。“加密所有 web 流量的想法仍有争议，因为它允许恶意软件轻松绕过各种安全机制，从而给最终用户和公司带来巨大损失。我很确信，如果我们可以看到有多少 Let’s Encrypt 的 SSL 证书被恶意软件利用来泄露盗窃的数据，结果肯定会是惊人的。因此，很难预期 Let’s Encrypt 未来将怎样调整其发展战略，避免它想使 web 更安全的愿望被网络罪犯滥用，”Kolochenko 说道。Fedora 26 再次延期发布，延至 2017 年 6 月 27 日（出于传统，）上周，Fedora 团队宣布由于发现最新的障碍 ，原定 3 月 21 日发布的 Alpha 版本，重新安排到 3 月 28日。现在，根据最新的发布时间表，可以发现所有发布日期再次延迟，Alpha 版本推迟至 4 月 4 日，Beta Freeze 从 5 月 16 日开始，Beta 版本推迟至 5 月 30 日，最终版 Freeze 定于 6 月 13 日，最终版本推迟至 6 月 27 日发布。微软称 Linux 上 OneDrive 运行缓慢问题已解决上周就有报导，Linux 系统通过浏览器连接到 Microsoft OneDrive 时，很多人报告遭遇性能问题。用户抱怨浏览文件夹，编辑文档都非常缓慢，而同样的网络连接在 Windows 上却正常。Microsoft 一位发言人 确认这只是一个 bug，性能问题决不是像一些用户猜测的那样故意为之，目的是为了支持自己的 OS Windows，而仅仅是“忽略了”。微软承诺将对 Linux 系统做更多测试工作。目前，微软已对此问题进行了修复，预期在 Windows 和 Linux 上将有相似的性能体验。Ubuntu 16.04 LTS 和 Ubuntu 16.10 Linux 游戏玩家现已可用 Mesa 17.0.2Canonical 的 Timo Aaltonen 早些时间宣布最新的 Mesa 17.0.2 3D 图形库包已可用，Ubuntu 16.04 LTS 和 Ubuntu 16.10 用户可从他们的 PPA 中获得。Mesa 17.0.2 可以从 "Ubuntu-X" 团队 PPA中安装，用户可在终端 app 中运行下述命令来安装它：sudo add-apt-repository ppa:ubuntu-x-swat/updates -y sudo apt update && sudo apt dist-upgradeMKVToolnix 10.0.0 发布， 改进了 H.264 and H.265 解析器MKVToolnix 开发人员 Moritz Bunkus 宣布他的开源跨平台 MKV 操纵软件升级到一个新的主版本， 10.0.0。根据发布信息，MKVToolnix 10.0.0 改进了 AVC/h.264 和 HEVC/h.265 解析器。你可以点击链接，下载其在 GNU/Linux, macOS, 和 Microsoft Windows 操作系统的版本。
动态主机配置协议（DHCP） 是一种用于使主机能够从服务器自动分配 IP 地址和相关的网络配置的网络协议。DHCP 服务器分配给 DHCP 客户端的 IP 地址处于“租用”状态，租用时间通常取决于客户端计算机要求连接的时间或 DHCP 服务器配置的时间。DHCP 如何工作？以下是 DHCP 实际工作原理的简要说明：一旦客户端（配置为使用 DHCP 的机器）连接到网络后，它会向 DHCP 服务器发送 DHCPDISCOVER 数据包。当 DHCP 服务器收到 DHCPDISCOVER 请求报文后会使用 DHCPOFFER 包进行回复。然后客户端获取到 DHCPOFFER 数据包，并向服务器发送一个 DHCPREQUEST 包，表示它已准备好接收 DHCPOFFER 包中提供的网络配置信息。最后，DHCP 服务器从客户端收到 DHCPREQUEST 报文后，发送 DHCPACK 报文，表示现在允许客户端使用分配给它的 IP 地址。在本文中，我们将介绍如何在 Ubuntu/Debian Linux 中设置 DHCP 服务器，我们将使用 sudo 命令来运行所有命令，以获得 root 用户权限。测试环境设置在这步中我们会使用如下的测试环境。DHCP Server - Ubuntu 16.04DHCP Clients - CentOS 7 and Fedora 25步骤 1：在 Ubuntu 中安装 DHCP 服务器1、 运行下面的命令来安装 DHCP 服务器包，也就是 dhcp3-server。$ sudo apt install isc-dhcp-server 2、 安装完成后，编辑 /etc/default/isc-dhcp-server 使用 INTERFACES 选项定义 DHCPD 响应 DHCP 请求所使用的接口。比如，如果你想让 DHCPD 守护进程监听 eth0，按如下设置：INTERFACES="eth0" 同样记得为上面的接口配置静态地址。步骤 2：在 Ubuntu 中配置 DHCP 服务器3、 DHCP 配置的主文件是 /etc/dhcp/dhcpd.conf， 你必须填写会发送到客户端的所有网络信息。并且 DHCP 配置中定义了两种不同的声明，它们是：parameters - 指定如何执行任务、是否执行任务，还有指定要发送给 DHCP 客户端的网络配置选项。declarations - 定义网络拓扑、指定客户端、为客户端提供地址，或将一组参数应用于一组声明。4、 现在打开并修改主文件，定义 DHCP 服务器选项：$ sudo vi /etc/dhcp/dhcpd.conf 在文件顶部设置以下全局参数，它们将应用于下面的所有声明（请指定适用于你情况的值）：option domain-name "tecmint.lan"; option domain-name-servers ns1.tecmint.lan, ns2.tecmint.lan; default-lease-time 3600; max-lease-time 7200; authoritative; 5、 现在定义一个子网，这里我们为 192.168.10.0/24 局域网设置 DHCP （请使用适用你情况的参数）：subnet 192.168.10.0 netmask 255.255.255.0 { option routers 192.168.10.1; option subnet-mask 255.255.255.0; option domain-search "tecmint.lan"; option domain-name-servers 192.168.10.1; range 192.168.10.10 192.168.10.100; range 192.168.10.110 192.168.10.200; } 步骤 3：在 DHCP 客户端上配置静态地址6、 要给特定的客户机分配一个固定的（静态）的 IP，你需要显式将这台机器的 MAC 地址以及静态分配的地址添加到下面这部分。host centos-node { hardware ethernet 00:f0:m4:6y:89:0g; fixed-address 192.168.10.105; } host fedora-node { hardware ethernet 00:4g:8h:13:8h:3a; fixed-address 192.168.10.106; } 保存并关闭文件。7、 接下来，启动 DHCP 服务，并让它下次开机自启动，如下所示：------------ SystemD ------------ $ sudo systemctl start isc-dhcp-server.service $ sudo systemctl enable isc-dhcp-server.service ------------ SysVinit ------------ $ sudo service isc-dhcp-server.service start $ sudo service isc-dhcp-server.service enable 8、 接下来不要忘记允许 DHCP 服务（DHCP 守护进程监听 67 UDP 端口）的防火墙权限：$ sudo ufw allow 67/udp $ sudo ufw reload $ sudo ufw show 步骤 4：配置 DHCP 客户端9、 此时，你可以将客户端计算机配置为自动从 DHCP 服务器接收 IP 地址。登录到客户端并编辑以太网接口的配置文件（注意接口名称/号码）：$ sudo vi /etc/network/interfaces 定义如下选项：auto eth0 iface eth0 inet dhcp 保存文件并退出。重启网络服务（或重启系统）：------------ SystemD ------------ $ sudo systemctl restart networking ------------ SysVinit ------------ $ sudo service networking restart 另外你也可以使用 GUI 来在进行设置，如截图所示（在 Fedora 25 桌面中）设置将方式设为自动（DHCP）。在 Fedora 中设置 DHCP 网络此时，如果所有设置完成了，你的客户端应该可以自动从 DHCP 服务器接收 IP 地址了。就是这样了！在本篇教程中，我们向你展示了如何在 Ubuntu/Debian 设置 DHCP 服务器。在反馈栏中分享你的想法。如果你正在使用基于 Fedora 的发行版，请阅读如何在 CentOS/RHEL 中设置 DHCP 服务器。作者简介：Aaron Kili 是 Linux 和 F.O.S.S 爱好者，将来的 Linux SysAdmin 和 web 开发人员，目前是 TecMint 的内容创建者，他喜欢用电脑工作，并坚信分享知识。via: http://www.tecmint.com/install-dhcp-server-in-ubuntu-debian/作者：Aaron Kili 译者：geekpi 校对：jasminepeng本文由 LCTT 原创编译，Linux中国 荣誉推出
使用开源工具探索气候数据的奥秘
如今你看地球上的任何地方，都可以找到天气变化的证据，每个月，无论是事实还是数据都在向我们诠释一点 —— 全球变暖。气候学家如是告诫我们，如今的不作为，对于我们的将来可能是致命的。五角大楼的军事战略家最近警告当选总统的川普，向他申明如果不对气候变化有所动作，可能会造成威胁国家安全的灾难。愈趋减少的的水供应和微薄的降雨量会导致作物歉收，这将迫使大量的移民逃往世界各地，到那些可以维持他们生计的地方去。遍览 NASA、美国国防部，以及其他机构针对气候的研究成果，我的心中有个疑惑。那就是是否有开源的工具，使对此感兴趣的人们能够自行去探索气候数据的奥秘，并总结出我们自己的结论。我在网上快速的检索了一下，然后找到了 Open Climate Workbench （开源气候工作台），这是 Apache 软件基金会旗下的一个工程。Open Climate Workbench （缩写 OCW） 开发该软件，对来自 地球系统网格联盟 Earth System Grid Federation （缩写 ESGF）、 协调区域气候降尺度实验 Coordinated Regional Climate Downscaling Experiment （缩写 CORDEX）、美国全球变化研究项目的 国家气候研究 National Climate Assessment 、 北美区域气候评估计划 North American Regional Climate Assessment Program ，以及 NASA、NOAA 和其他组织或机构的数据进行气候模型评价。你可下载 OCW 的 tar 包 并将它安装到满足其条件的 Linux 电脑上。也可以使用 Vagrant 或者 VirtualBox 将 OCW 安装到虚拟机中，详见 OCW 的虚拟机指南。 个人觉得想要了解 OCW 是如何工作的，最便捷的方式就是到 区域气候模式评价系统 Regional Climate Model Evaluation System （缩写 RCMES），下载一个虚拟机镜像。从 RCMES 的网站上看，他们旨在通过为一系列广泛而全面的观测（例如，卫星观测，重新分析，现场观测）和建模资源（例如，ESGF 上的 CMIP 和 CORDEX）提供标准化的访问，以及常规分析和可视化任务的工具（例如，OCW），来促进气候和地球系统模型的区域规模评估。你需要在宿主机上安装 VirtualBox 和 Vagrant。通过它们，你就能看到一个超赞的 OCW 作业示例。RCMES 为下载、导入、运行虚拟机提供了详细的说明。当你的虚拟机开始工作时，你可以用以下身份登陆。用户名：vagrant，密码：vagrant。RCMES 数据样图RCMES 网页上的教程能帮助你迅速上手该软件。他们的社区十分活跃，而且在寻找更多的开发者。 你也可以订阅他们邮件列表。该工程的源代码部署在 GitHub 上，遵寻 Apache License, Version 2.0。(题图源自： Flickr user: theaucitron (CC BY-SA 2.0))作者简介：Don Watkins（唐 沃特金斯） - 教育家，教育技术专家，企业家，开源支持者。教育心理学硕士，Linux 系统管理员，CCNA，使用 Virtual Box 实现虚拟化。twitter 关注 @Don\_Watkins。via: https://opensource.com/article/17/1/apache-open-climate-workbench作者：Don Watkins 译者：martin2011qi 校对：jasminepeng本文由 LCTT 原创编译，Linux中国 荣誉推出
最坚决推行 Linux 桌面系统项目的城市正在转回 Windows 阵营，但 Linux 的命运已经不再与 PC 休戚相关。慕尼黑的 Linux 项目只是开源软件故事中的一小部分在实施从 Windows 系统迁移到 Linux 系统这一项目接近十年之久后，慕尼黑却突然走上了一条戏剧性的转弯。据说是到 2021 年，该城市的地方议会就会开始用 Windows 10 替换运行 LiMux (Ubuntu 的一种自定义版本)的 PC 机。若是回到 15 或者 20 年前，人们可能会争论什么时候 Linux 将会在桌面上取代 Windows。例如，当 Ubuntu 于 2004 年问世时，它是带着 终结 Windows 的抱负 而被设计为标准的桌面操作系统的。剧透：这一切并没有发生。桌面上的 Linux 在今天占有约为 2% 的市场，很多人都认为它复杂晦涩。与此同时，Windows 则航行无虞，在 PC 市场笑傲群雄，天下十有其九。但在商业领域中总还有些许 Linux 桌面的身影，它仍被需要——尤其是对开发者和数据科学家而言。但遗憾的是，它永远也不会成为历史的主流。慕尼黑的 Linux 项目因其规模之大，引起了许多人的兴趣。几乎没有哪家大型组织会做出从 Windows 到 Linux 的迁移，一些个别的案例像 法国宪兵队和都灵市 曾有类似之举。然而，慕尼黑作为模范：在这一事件上的失败将会大大打击那些仍在 试图用 Linux 将 Windows 取而代之的信徒们。但现实就是如此，绝大多数公司乐于去使用主流的桌面操作系统，因为它具有完整一致、用户友好这种优势。工作人员所抱怨的问题中，有多少是归咎于 LiMux 软件以及多少是操作系统无端被责备的，已经不可计数。但重要的是，无论慕尼黑最后何去何从，Linux 的命运都已经脱离了桌面 —— 是的，Linux 在多年前就已经输掉了桌面战争。但这对 Linux 来说无伤大雅，因为它赢得了智能手机之战，并且在云端和物联网之战上也是捷报连连。你的口袋里，有七八成可能装的是一个 Linux 驱动的智能手机（Android 基于 Linux 内核）。你的身边，更是有成千上万 Linux 驱动的设备，虽然这些也许你甚至都没注意到。像树莓派这样运行大量不同类型 Linux 的设备，正在创建一个充满热情和活力的开发者社区，并且提供给初创公司一种低成本的驱动新设备的方法。大部分公有云也是以这样或那样的形式在 Linux 上运行的；即便是微软，也已经敞开大门，拥抱开源软件。无论你站在哪一个软件平台的立场，不可否认地，开发者和用户拥有更多丰富的可选项是一件好事，对决策来说，抑或是对创新来说，都是如此。桌面的主导地位早已不再是当年模样了：它现在只是许多计算平台中的一个。事实上，PC 的软件也已经变得越来越不相关，因为更多的应用程序都在与设备和操作系统解耦，驻留在云中。虽然慕尼黑传奇的曲折变换与 Linux 在桌面上的冒险耐人寻味，但它们却并未给你呈现出一个完整的故事。同意? 还是不同意? 在下面添加你的评论来加入讨论吧！（题图: Getty Images/iStockphoto）via: http://www.zdnet.com/article/windows-wins-the-desktop-but-linux-takes-the-world/作者：Steve Ranger 译者：Meditator-hkx 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出