蚊章汇 - Phil Zona
type: channel
link: https://linuxcn.bwsl.wang/author/481/
description: Phil Zona
items: 关于 Linux 你可能不是非常了解的七件事
items: Linux 服务器安全简明指南

关于 Linux 你可能不是非常了解的七件事
type: item
date: 2017-10-06T06:08:21+08:00
description: 使用 Linux 最酷的事情之一就是随着时间的推移，你可以不断获得新的知识。每天，你都可能会遇到一个新的实用工具，或者只是一个不太熟悉的奇技淫巧，但是却非常有用。这些零碎的东西并不总是能够改变生活，但是却是专业知识的基础。即使是专家，也不可能事事皆知。无论你有多少经验，可能总会有更多的东西需要你去学习。所以，在这儿我列出了七件关于 Linux 你可能不知道的事情。一个查找命令历史的交互模式你可能对 history 命令非常熟悉，它会读取 bash 历史，然后以编号列表的方式输出到标准输出（stdout）。然而，如果你在 curl 命令的海洋里寻找一个特定的链接（URL），那么这个列表并不总是那么容易阅读的。你还可以有另一个选择，Linux 有一个交互式的反向搜索可以帮助你解决这个问题。你可以通过快捷键 ctrl+r启动交互模式，然后进入一个交互提示中，它将会根据你提供的字符串来向后搜索 bash 历史，你可以通过再次按下 ctrl+r 向后搜索更老的命令，或者按下 ctrl+s 向前搜索。注意，ctrl+s 有时会与 XON/XOFF 流控制冲突，即 XON/XOFF 流控制也会使用该快捷键。你可以通过运行 stty -ixon 命令来禁用该快捷键。在你的个人电脑上，这通常是有用的，但是在禁用前，确保你不需要 XON/XOFF 。Cron 不是安排任务的唯一方式Cron 任务对于任何水平的系统管理员，无论是毫无经验的初学者，还是经验丰富的专家来说，都是非常有用的。但是，如果你需要安排一个一次性的任务，那么 at 命令为你提供了一个快捷的方式来创建任务，从而你不需要接触 crontab 。at 命令的运行方式是在后面紧跟着你想要运行任务的运行时间。时间是灵活的，因为它支持许多时间格式。包括下面这些例子：at 12:00 PM September 30 2017 at now + 1 hour at 9:00 AM tomorrow 当你以带参数的方式输入 at 命令以后，将会提示你该命令将在你的 Linux 系统上运行。这可能是一个备份脚本，一套维护任务，或者甚至是一个普通的 bash 命令。如果要结束任务，可以按 ctrl+d 。另外，你可以使用 atq 命令查看当前用户的所有任务，或者使用 sudo atq 查看所有用户的任务。它将会展示出所有排定好的任务，并且每个任务都伴有一个 ID 。如果你想取消一个排定好的任务，可以使用 atrm 命令，并且以任务 ID 作为参数。你可以按照功能搜索命令，而不仅仅是通过名字记住命令的名字非常困难，特别是对于初学者来说。幸运的是，Linux 附带了一个通过名字和描述来搜索 man 页面的工具。下次，如果你没有记住你想要使用的工具的名称，你可以尝试使用 apropos 命令加上你想要干的事情的描述。比如，apropos build filesystem 将会返回一系列名字和描述包括了 “build” 和 “filesystem” 单词的工具。apropos 命令接受一个或多个字符串作为参数，但同时它也有其他参数，比如你可以使用 -r 参数，从而通过正则表达式来搜索。一个允许你来管理系统版本的替代系统如果你曾进行过软件开发，你就会明白跨项目管理不同版本的语言的支持的重要性。许多 Linux 发行版都有工具可以来处理不同的内建版本。可执行文件比如 java 往往符号链接到目录 /etc/alternatives 下。反过来，该目录会将符号链接存储为二进制文件并提供一个管理这些链接的接口。Java 可能是替代系统最常管理的语言，但是，经过一些配置，它也可以作为其他应用程序替代品，比如 NVM 和 RVM （NVM 和 RVM 分别是 NodeJS 和 Ruby 的版本管理器）。在基于 Debian 的系统中，你可以使用 update-alternatives 命令创建和管理这些链接。在 CentOS 中，这个工具就叫做 alternatives 。通过更改你的 alternatives 文件中的链接，你便可以安装一个语言的多个版本，并且在不同的情况下使用不同的二进制。这个替代系统也提供了对任何你可能在命令行运行的程序的支持。shred 命令是更加安全的删除文件方式我们大多数时候总是使用 rm 命令来删除文件。但是文件去哪儿了呢？真相是 rm 命令所做的事情并不是像你所想像的那样，它仅仅删除了文件系统和硬盘上的数据的硬链接。硬盘上的数据依旧存在，直到被另一个应用重写覆盖。对于非常敏感的数据来说，这会带来一个很大的安全隐患。shred 命令是 rm 命令的升级版。当你使用 shred 命令删除一个文件之后，文件中的数据会被多次随机覆写。甚至有一个选项可以在随机覆写之后对所有的数据进行清零。如果你想安…

Linux 服务器安全简明指南
type: item
date: 2016-12-30T15:56:00+08:00
description: 现在让我们强化你的服务器以防止未授权访问。经常升级系统保持最新的软件是你可以在任何操作系统上采取的最大的安全预防措施。软件更新的范围从关键漏洞补丁到小 bug 的修复，许多软件漏洞实际上是在它们被公开的时候得到修补的。自动安全更新有一些用于服务器上自动更新的参数。Fedora 的 Wiki 上有一篇很棒的剖析自动更新的利弊的文章，但是如果你把它限制到安全更新上，自动更新的风险将是最小的。自动更新的可行性必须你自己判断，因为它归结为你在你的服务器上做什么。请记住，自动更新仅适用于来自仓库的包，而不是自行编译的程序。你可能会发现一个复制了生产服务器的测试环境是很有必要的。可以在部署到生产环境之前，在测试环境里面更新来检查问题。CentOS 使用 yum-cron 进行自动更新。Debian 和 Ubuntu 使用 无人值守升级。Fedora 使用 dnf-automatic。添加一个受限用户账户到目前为止，你已经作为 root 用户访问了你的服务器，它有无限制的权限，可以执行任何命令 - 甚至可能意外中断你的服务器。 我们建议创建一个受限用户帐户，并始终使用它。 管理任务应该使用 sudo 来完成，它可以临时提升受限用户的权限，以便管理你的服务器。不是所有的 Linux 发行版都在系统上默认包含 sudo，但大多数都在其软件包仓库中有 sudo。 如果得到这样的输出 sudo：command not found，请在继续之前安装 sudo。要添加新用户，首先通过 SSH 登录到你的服务器。CentOS / Fedora1、 创建用户，用你想要的名字替换 example_user，并分配一个密码：useradd example_user && passwd example_user 2、 将用户添加到具有 sudo 权限的 wheel 组：usermod -aG wheel example_user Ubuntu1、 创建用户，用你想要的名字替换 example_user。你将被要求输入用户密码：adduser example_user 2、 添加用户到 sudo 组，这样你就有管理员权限了：adduser example_user sudo Debian1、 Debian 默认的包中没有 sudo， 使用 apt-get 来安装：apt-get install sudo 2、 创建用户，用你想要的名字替换 example_user。你将被要求输入用户密码：adduser example_user 3、 添加用户到 sudo 组，这样你就有管理员权限了：adduser example_user sudo 创建完有限权限的用户后，断开你的服务器连接：exit 重新用你的新用户登录。用你的用户名代替 example_user，用你的服务器 IP 地址代替例子中的 IP 地址：ssh example_user@203.0.113.10 现在你可以用你的新用户帐户管理你的服务器，而不是 root。 几乎所有超级用户命令都可以用 sudo（例如：sudo iptables -L -nv）来执行，这些命令将被记录到 /var/log/auth.log 中。加固 SSH 访问默认情况下，密码认证用于通过 SSH 连接到您的服务器。加密密钥对更加安全，因为它用私钥代替了密码，这通常更难以暴力破解。在本节中，我们将创建一个密钥对，并将服务器配置为不接受 SSH 密码登录。创建验证密钥对1、这是在你本机上完成的，不是在你的服务器上，这里将创建一个 4096 位的 RSA 密钥对。在创建过程中，您可以选择使用密码加密私钥。这意味着它不能在没有输入密码的情况下使用，除非将密码保存到本机桌面的密钥管理器中。我们建议您使用带有密码的密钥对，但如果你不想使用密码，则可以将此字段留空。Linux / OS X如果你已经创建了 RSA 密钥对，则这个命令将会覆盖它，这可能会导致你不能访问其它的操作系统。如果你已创建过密钥对，请跳过此步骤。要检查现有的密钥，请运行 ls〜/ .ssh / id_rsa *。ssh-keygen -b 4096 在输入密码之前，按下 回车使用 /home/your_username/.ssh 中的默认名称 id_rsa 和 id_rsa.pub。Windows这可以使用 PuTTY 完成，在我们指南中已有描述：使用 SSH 公钥验证。2、将公钥上传到您的服务器上。 将 example_user 替换为你用来管理服务器的用户名称，将 203.0.113.10 替换为你的服务器的 IP 地址。Linux在本机上：ssh-copy-id example_user@203.0.113.10 OS X在你的服务器上（用你的权限受限用户登录）：mk…