蚊章汇 - RHCSA
type: channel
link: https://linuxcn.bwsl.wang/tag/RHCSA/
items: RHCSA 系列（十五）： 虚拟化基础和使用 KVM 进行虚拟机管理
items: RHCSA 系列（十四）： 在 RHEL 7 中设置基于 LDAP 的认证
items: RHCSA 系列（十三）： 在 RHEL 7 中使用 SELinux 进行强制访问控制
items: RHCSA 系列（十二）
items: RHCSA 系列（十一）
items: RHCSA 系列（十）
items: RHCSA 系列（九）
items: RHCSA 系列（八）
items: RHCSA 系列（七）
items: RHCSA 系列（六）

RHCSA 系列（十五）： 虚拟化基础和使用 KVM 进行虚拟机管理
type: item
date: 2015-10-07T18:30:00+08:00
description: 假如你在词典中查一下单词 “ 虚拟化 （ virtualize ） ”，你将会发现它的意思是 “创造某些事物的一个虚拟物（而非真实的）”。在计算机行业中，术语 虚拟化 （ virtualization ） 指的是：在相同的物理（硬件）系统上，同时运行多个操作系统，且这几个系统相互隔离的可能性，而那个硬件在虚拟化架构中被称作 宿主机 （ host ） 。RHCSA 系列： 虚拟化基础和使用 KVM 进行虚拟机管理 – Part 15通过使用虚拟机监视器（也被称为 虚拟机管理程序 （ hypervisor ） ），虚拟机（被称为 guest）由底层的硬件来供给虚拟资源（举几个例子来说，如 CPU，RAM，存储介质，网络接口等）。考虑到这一点就可以清楚地看出，虚拟化的主要优点是节约成本（在设备和网络基础设施，及维护工作等方面）和显著地减少容纳所有必要硬件所需的物理空间。由于这个简单的指南不能涵盖所有的虚拟化方法，我鼓励你参考在总结部分中列出的文档，以此对这个话题做更深入的了解。请记住当前文章只是用于在 RHEL 7 中用命令行工具使用 KVM ( Kernel-based Virtual Machine （ 基于内核的虚拟机 ） ) 学习虚拟化基础知识的一个起点，而并不是对这个话题的深入探讨。检查硬件要求并安装软件包为了设置虚拟化，你的 CPU 必须能够支持它。你可以使用下面的命令来查看你的系统是否满足这个要求：# grep -E 'svm|vmx' /proc/cpuinfo 在下面的截图中，我们可以看到当前的系统（带有一个 AMD 的微处理器）支持虚拟化，svm 字样的存在暗示了这一点。假如我们有一个 Intel 系列的处理器，我们将会看到上面命令的结果将会出现 vmx 字样。检查 KVM 支持另外，你需要在你宿主机的硬件（BIOS 或 UEFI）中开启虚拟化。现在，安装必要的软件包：qemu-kvm 是一个开源的虚拟机程序，为 KVM 虚拟机监视器提供硬件仿真，而 qemu-img 则提供了一个操纵磁盘镜像的命令行工具。libvirt 包含与操作系统的虚拟化功能交互的工具。libvirt-python 包含一个模块，它允许用 Python 写的应用来使用由 libvirt 提供的接口。libguestfs-tools 包含各式各样的针对虚拟机的系统管理员命令行工具。virt-install 包含针对虚拟机管理的其他命令行工具。命令如下：# yum update && yum install qemu-kvm qemu-img libvirt libvirt-python libguestfs-tools virt-install 一旦安装完成，请确保你启动并开启了 libvirtd 服务：# systemctl start libvirtd.service # systemctl enable libvirtd.service 默认情况下，每个虚拟机将只能够与放在相同的物理服务器上的虚拟机以及宿主机自身通信。要使得虚拟机能够访问位于局域网或因特网中的其他机器，我们需要像下面这样在我们的宿主机上设置一个桥接接口（比如说 br0）：1、 添加下面的一行到我们的 NIC 主配置中（类似 /etc/sysconfig/network-scripts/ifcfg-enp0s3 这样的文件）：BRIDGE=br0 2、 使用下面的内容（注意，你可能需要更改 IP 地址，网关地址和 DNS 信息）为 br0 创建一个配置文件（/etc/sysconfig/network-scripts/ifcfg-br0）：DEVICE=br0 TYPE=Bridge BOOTPROTO=static IPADDR=192.168.0.18 NETMASK=255.255.255.0 GATEWAY=192.168.0.1 NM_CONTROLLED=no DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_PEERDNS=yes IPV6_PEERROUTES=yes IPV6_FAILURE_FATAL=no NAME=br0 ONBOOT=yes DNS1=8.8.8.8 DNS2=8.8.4.4 3、 最后在文件/etc/sysctl.conf 中设置：net.ipv4.ip_forward = 1 来开启包转发并加载更改到当前的内核配置中：# sysctl -p 注意，你可能还需要告诉 firewalld 让这类的流量应当被允许通过防火墙。假如你需要这样做，记住你可以参…

RHCSA 系列（十四）： 在 RHEL 7 中设置基于 LDAP 的认证
type: item
date: 2015-10-04T22:41:00+08:00
description: 在这篇文章中，我们将首先罗列一些 LDAP 的基础知识（它是什么，它被用于何处以及为什么会被这样使用），然后向你展示如何使用 RHEL 7 系统来设置一个 LDAP 服务器以及配置一个客户端来使用它达到认证的目的。RHCSA 系列：设置 LDAP 服务器及客户端认证 – Part 14正如你将看到的那样，关于认证，还存在其他可能的应用场景，但在这篇指南中，我们将只关注基于 LDAP 的认证。另外，请记住，由于这个话题的广泛性，在这里我们将只涵盖它的基础知识，但你可以参考位于总结部分中列出的文档，以此来了解更加深入的细节。基于相同的原因，你将注意到：为了简洁起见，我已经决定省略了几个位于 man 页中 LDAP 工具的参考，但相应命令的解释是近在咫尺的（例如，输入 man ldapadd）。那还是让我们开始吧。我们的测试环境我们的测试环境包含两台 RHEL 7机器：Server: 192.168.0.18. FQDN: rhel7.mydomain.com Client: 192.168.0.20. FQDN: ldapclient.mydomain.com 如若你想，你可以使用在 RHCSA 系列（十二）: 使用 Kickstart 完成 RHEL 7 的自动化安装 中使用 Kickstart 安装的机子来作为客户端。LDAP 是什么？LDAP 代表 轻量级目录访问协议 （ Lightweight Directory Access Protocol ） ，并包含在一系列协议之中，这些协议允许一个客户端通过网络去获取集中存储的信息（例如所登录的 shell 的路径，家目录的绝对路径，或者其他典型的系统用户信息），而这些信息可以从不同的地方访问到或被很多终端用户获取到（另一个例子是含有某个公司所有雇员的家庭地址和电话号码的目录）。对于那些被赋予了权限可以使用这些信息的人来说，将这些信息进行集中管理意味着可以更容易地维护和获取。下面的图表提供了一个简化了的关于 LDAP 的示意图，在下面将会进行更多的描述：LDAP 示意图下面是对上面示意图的一个详细解释。在一个 LDAP 目录中，一个 条目 （ entry ） 代表一个独立单元或信息，被所谓的 区别名 （ DN，Distinguished Name ） 唯一识别。一个 属性 （ attribute ） 是一些与某个条目相关的信息（例如地址，有效的联系电话号码和邮箱地址）。每个属性被分配有一个或多个 值 （ value ） ，这些值被包含在一个以空格为分隔符的列表中。每个条目中那个唯一的值被称为一个 相对区别名 （ RDN，Relative Distinguished Name ） 。接下来，就让我们进入到有关服务器和客户端安装的内容。安装和配置一个 LDAP 服务器和客户端在 RHEL 7 中， LDAP 由 OpenLDAP 实现。为了安装服务器和客户端，分别使用下面的命令：# yum update && yum install openldap openldap-clients openldap-servers # yum update && yum install openldap openldap-clients nss-pam-ldapd 一旦安装完成，我们还需要关注一些事情。除非显示地提示，下面的步骤都只在服务器上执行：1. 在服务器和客户端上，为了确保 SELinux 不会妨碍挡道，长久地开启下列的布尔值：# setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0 其中 allow_ypbind 为基于 LDAP 的认证所需要，而 authlogin_nsswitch_use_ldap则可能会被某些应用所需要。2. 开启并启动服务：# systemctl enable slapd.service # systemctl start slapd.service 记住你也可以使用 systemctl 来禁用，重启或停止服务：# systemctl disable slapd.service # systemctl restart slapd.service # systemctl stop slapd.service 3. 由于 slapd 服务是由 ldap 用户来运行的（你可以使用 ps -e -o pid,uname,comm | grep slapd 来验证），为了使得服务器能够更改由管理工具创建的条目，该用户应该有目录 /var/lib/ldap 的所有权，而这些管理工具仅可以由 root 用户来运行（紧接着有更多这方面的内容）。在递归地更改这个目录的所有权之前，将 slapd 的示例数据库配置文件复制…

RHCSA 系列（十三）： 在 RHEL 7 中使用 SELinux 进行强制访问控制
type: item
date: 2015-10-03T17:07:00+08:00
description: 在本系列的前面几篇文章中，我们已经详细地探索了至少两种访问控制方法：标准的 ugo/rwx 权限（RHCSA 系列（三）: 如何管理 RHEL7 的用户和组） 和访问控制列表（RHCSA 系列（七）: 使用 ACL（访问控制列表) 和挂载 Samba/NFS 共享）。RHCSA 认证：SELinux 精要和控制文件系统的访问尽管作为第一级别的权限和访问控制机制是必要的，但它们同样有一些局限，而这些局限则可以由 安全增强 Linux （ Security Enhanced Linux，简称为 SELinux ） 来处理。这些局限的一种情形是：某个用户可能通过一个泛泛的 chmod 命令将文件或目录暴露出现了安全违例，从而引起访问权限的意外传播。结果，由该用户开启的任意进程可以对属于该用户的文件进行任意的操作，最终一个恶意的或有其它缺陷的软件可能会取得整个系统的 root 级别的访问权限。考虑到这些局限性，美国国家安全局（NSA） 率先设计出了 SELinux，一种强制的访问控制方法，它根据最小权限模型去限制进程在系统对象（如文件，目录，网络接口等）上的访问或执行其他的操作的能力，而这些限制可以在之后根据需要进行修改。简单来说，系统的每一个元素只给某个功能所需要的那些权限。在 RHEL 7 中，SELinux 被并入了内核中，且默认情况下以 强制模式 （ Enforcing ） 开启。在这篇文章中，我们将简要地介绍有关 SELinux 及其相关操作的基本概念。SELinux 的模式SELinux 可以以三种不同的模式运行： 强制模式 （ Enforcing ） ：SELinux 基于其策略规则来拒绝访问，这些规则是用以控制安全引擎的一系列准则； 宽容模式 （ Permissive ） ：SELinux 不会拒绝访问，但对于那些如果运行在强制模式下会被拒绝访问的行为进行记录； 关闭 （ Disabled ） (不言自明，即 SELinux 没有实际运行).使用 getenforce 命令可以展示 SELinux 当前所处的模式，而 setenforce 命令（后面跟上一个 1 或 0） 则被用来将当前模式切换到 强制模式 （ Enforcing ） 或 宽容模式 （ Permissive ） ，但只对当前的会话有效。为了使得在登出和重启后上面的设置还能保持作用，你需要编辑 /etc/selinux/config 文件并将 SELINUX 变量的值设为 enforcing，permissive，disabled 中之一：# getenforce # setenforce 0 # getenforce # setenforce 1 # getenforce # cat /etc/selinux/config 设置 SELinux 模式通常情况下，你应该使用 setenforce 来在 SELinux 模式间进行切换（从强制模式到宽容模式，或反之），以此来作为你排错的第一步。假如 SELinux 当前被设置为强制模式，而你遇到了某些问题，但当你把 SELinux 切换为宽容模式后问题不再出现了，则你可以确信你遇到了一个 SELinux 权限方面的问题。SELinux 上下文一个 SELinux 上下文 （ Context ） 由一个访问控制环境所组成，在这个环境中，决定的做出将基于 SELinux 的用户，角色和类型（和可选的级别）：一个 SELinux 用户是通过将一个常规的 Linux 用户账户映射到一个 SELinux 用户账户来实现的，反过来，在一个会话中，这个 SELinux 用户账户在 SELinux 上下文中被进程所使用，以便能够明确定义它们所允许的角色和级别。角色的概念是作为域和处于该域中的 SELinux 用户之间的媒介，它定义了 SELinux 可以访问到哪个进程域和哪些文件类型。这将保护您的系统免受提权漏洞的攻击。类型则定义了一个 SELinux 文件类型或一个 SELinux 进程域。在正常情况下，进程将会被禁止访问其他进程正使用的文件，并禁止对其他进程进行访问。这样只有当一个特定的 SELinux 策略规则允许它访问时，才能够进行访问。下面就让我们看看这些概念是如何在下面的例子中起作用的。例 1：改变 sshd 守护进程的默认端口在 RHCSA 系列（八）: 加固 SSH，设定主机名及启用网络服务 中，我们解释了更改 sshd 所监听的默认端口是加固你的服务器免受外部攻击的首要安全措施。下面，就让我们编辑 /etc/ssh/sshd_config 文件并将端口设置为 9999：Port 9999 保存更改并重启 sshd：# systemctl restart sshd # systemctl status ss…

RHCSA 系列（十二）
type: item
date: 2015-10-02T18:11:00+08:00
description: 无论是在数据中心还是实验室环境，Linux 服务器很少是独立的机器，很可能有时你需要安装多个以某种方式相互联系的机器。假如你将在单个服务器上手动安装 RHEL 7 所花的时间乘以你需要配置的机器数量，这将导致你必须做出一场相当长的努力，而通过使用被称为 kicksta 的无人值守安装工具则可以避免这样的麻烦。在这篇文章中，我们将向你展示使用 kickstart 工具时所需的一切，以便在安装过程中，不用你时不时地照看“处在襁褓中”的服务器。RHCSA： RHEL 7 的自动化 Kickstart 安装Kickstart 和自动化安装简介Kickstart 是一种被用来执行无人值守操作系统安装和配置的自动化安装方法，主要被 RHEL（以及其他 Fedora 的副产品，如 CentOS，Oracle Linux 等）所使用。因此，kickstart 安装方法可使得系统管理员只需考虑需要安装的软件包组和系统的配置，便可以得到相同的系统，从而省去必须手动安装这些软件包的麻烦。准备 Kickstart 安装要执行 kickstart 安装，我们需要遵循下面的这些步骤：创建一个 Kickstart 文件，它是一个带有多个预定义配置选项的纯文本文件。将 Kickstart 文件保存在可移动介质上，如一个硬盘或一个网络位置。kickstart 客户端需要使用 rhel-server-7.0-x86_64-boot.iso 镜像文件，而你还需要可从一个网络资源上获取得到完整的 ISO 镜像 rhel-server-7.0-x86_64-dvd.iso ，例如通过一个 FTP 服务器的 HTTP 服务形式（在我们当前的例子中，我们将使用另一个 IP 地址为 192.168.0.18 的 RHEL 7 机器）。开始 Kickstart 安装。要创建一个 kickstart 文件，请登录你的红帽客户门户网站（Red Hat Customer Portal）帐户，并使用 Kickstart 配置工具 来选择所需的安装选项。在向下滑动之前请仔细阅读每个选项，然后选择最适合你需求的选项：Kickstart 配置工具假如你指定安装将通过 HTTP，FTP，NFS 来执行，请确保服务器上的防火墙允许这些服务通过。尽管你可以使用红帽的在线工具来创建一个 kickstart 文件，但你还可以使用下面的代码来作为参考手动地创建它。例如，你可以注意到，下面的代码指定了安装过程将使用英语环境，使用拉丁美洲键盘布局，并设定时区为 America/Argentina/San\_Luis 时区：lang en_US keyboard la-latin1 timezone America/Argentina/San_Luis --isUtc rootpw $1$5sOtDvRo$In4KTmX7OmcOW9HUvWtfn0 --iscrypted #platform x86, AMD64, or Intel EM64T text url --url=http://192.168.0.18//kickstart/media bootloader --location=mbr --append="rhgb quiet crashkernel=auto" zerombr clearpart --all --initlabel autopart auth --passalgo=sha512 --useshadow selinux --enforcing firewall --enabled firstboot --disable %packages @base @backup-server @print-server %end 在上面的在线配置工具中，在选择以 HTTP 来作为安装源后，设置好在安装过程中使用 192.168.0.18 来作为 HTTP 服务器的地址，/kickstart/tecmint.bin 作为 HTTP 目录。在上面的 kickstart 示例文件中，你需要特别注意url --url=http://192.168.0.18//kickstart/media 这个目录是你展开 DVD 或 ISO 安装介质内容的地方。在执行解压之前，我们将把 ISO 安装文件作为一个回环设备挂载到 /media/rhel 目录下：# mount -o loop /var/www/html/kickstart/rhel-server-7.0-x86_64-dvd.iso /media/rhel 挂载 RHEL ISO 镜像接下来，复制 /media/rhel 中的全部文件到 /var/www/html/kickstart/media 目录：# cp -R /media/rhel /va…

RHCSA 系列（十一）
type: item
date: 2015-09-29T18:11:00+08:00
description: 简单来说，防火墙就是一个基于一系列预先定义的规则（例如流量包的目的地或来源，流量的类型等）的安全系统，它控制着一个网络中的流入和流出流量。RHCSA: 使用 FirewallD 和 Iptables 来控制网络流量 – Part 11在本文中，我们将回顾 firewalld 和 iptables 的基础知识。前者是 RHEL 7 中的默认动态防火墙守护进程，而后者则是针对 Linux 的传统的防火墙服务，大多数的系统和网络管理员都非常熟悉它，并且在 RHEL 7 中也可以用。FirewallD 和 Iptables 的一个比较在后台， firewalld 和 iptables 服务都通过相同的接口来与内核中的 netfilter 框架相交流，这不足为奇，即它们都通过 iptables 命令来与 netfilter 交互。然而，与 iptables 服务相反， firewalld 可以在不丢失现有连接的情况下，在正常的系统操作期间更改设定。在默认情况下， firewalld 应该已经安装在你的 RHEL 系统中了，尽管它可能没有在运行。你可以使用下面的命令来确认（firewall-config 是用户界面配置工具）：# yum info firewalld firewall-config 检查 FirewallD 的信息以及，# systemctl status -l firewalld.service 检查 FirewallD 的状态另一方面， iptables 服务在默认情况下没有被包含在 RHEL 系统中，但可以被安装上。# yum update && yum install iptables-services 这两个守护进程都可以使用常规的 systemd 命令来在开机时被启动和开启：# systemctl start firewalld.service | iptables-service.service # systemctl enable firewalld.service | iptables-service.service 另外，请阅读：管理 Systemd 服务的实用命令至于配置文件， iptables 服务使用 /etc/sysconfig/iptables 文件（假如这个软件包在你的系统中没有被安装，则这个文件将不存在）。在一个被用作集群节点的 RHEL 7 机子上，这个文件看起来是这样：Iptables 防火墙配置文件而 firewalld 则在两个目录中存储它的配置文件，即 /usr/lib/firewalld 和 /etc/firewalld：# ls /usr/lib/firewalld /etc/firewalld FirewallD 的配置文件在这篇文章中后面，我们将进一步查看这些配置文件，在那之后，我们将在这两个地方添加一些规则。现在，是时候提醒你了，你总可以使用下面的命令来找到更多有关这两个工具的信息。# man firewalld.conf # man firewall-cmd # man iptables 除了这些，记得查看一下当前系列的第一篇 RHCSA 系列（一）: 回顾基础命令及系统文档，在其中我描述了几种渠道来得到安装在你的 RHEL 7 系统上的软件包的信息。使用 Iptables 来控制网络流量在进一步深入之前，或许你需要参考 Linux 基金会认证工程师（Linux Foundation Certified Engineer,LFCE） 系列中的 配置 Iptables 防火墙 – Part 8 来复习你脑中有关 iptables 的知识。例 1：同时允许流入和流出的网络流量TCP 端口 80 和 443 是 Apache web 服务器使用的用来处理常规（HTTP）和安全（HTTPS）网络流量的默认端口。你可以像下面这样在 enp0s3 接口上允许流入和流出网络流量通过这两个端口：# iptables -A INPUT -i enp0s3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT # iptables -A OUTPUT -o enp0s3 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT # iptables -A INPUT -i enp0s3 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT # iptables -A OUTPUT -o enp0s3 -p tcp --sport 443 -m state --state ESTABLISHED -…

RHCSA 系列（十）
type: item
date: 2015-09-26T18:14:00+08:00
description: 在这篇文章中，我们将回顾如何在 RHEL7 中安装，更新和删除软件包。我们还将介绍如何使用 cron 进行任务自动化，并完成如何查找和监控系统日志文件，以及为什么这些技能是系统管理员必备技能。RHCSA: Yum包管理、任务计划和系统监控 – Part 10使用yum 管理包要安装一个包以及所有尚未安装的依赖包，您可以使用：# yum -y install package_name(s) package\_name(s) 需要是至少一个真实的软件包名例如，安装 httpd 和 mlocate（按顺序），输入。# yum -y install httpd mlocate 注意: 字符 y 表示绕过执行下载和安装前的确认提示。如果需要提示，你可以不用它。默认情况下，yum 将安装与操作系统体系结构相匹配的包，除非通过在包名加入架构名。例如，在 64 位系统上，yum install package将安装包的 x86\_64 版本，而 yum install package.x86（如果有的话）将安装 32 位的。有时，你想安装一个包，但不知道它的确切名称。search all 选项可以在当前启用的软件库中的包名称和包描述中搜索它，或者search选项可以在包名称中搜索。比如，# yum search log 将搜索安装的软件库中名字和摘要与该词（log）类似的软件，而# yum search all log 也将在包描述和网址中寻找寻找相同的关键字。一旦搜索返回包列表，您可能希望在安装前显示一些信息。这时 info 选项派上了用场：# yum info logwatch 搜索包信息您可以定期用以下命令检查更新：# yum check-update 上述命令将返回可以更新的所有已安装的软件包。在下图所示的例子中，只有 rhel-7-server-rpms 有可用更新：检查包更新然后，您可以更新该包，# yum update rhel-7-server-rpms 如果有几个包可以一同更新，可以使用 yum update 一次性更新所有的包。当你知道一个可执行文件的名称，如 ps2pdf，但不知道那个包提供了它？你可以通过 yum whatprovides “*/[executable]”找到:# yum whatprovides “*/ps2pdf” 查找文件属于哪个包当删除包时，你可以使用 yum remove Package ，很简单吧？Yum 是一个完整而强大的包管理器。# yum remove httpd 参见： 20 个管理 RHEL 7 软件包的 Yum 命令文本式 RPM 工具RPM（又名 RPM 包管理器，原意是 RedHat 软件包管理器）也可用于安装或更新独立的rpm格式的软件包。往往使用 -Uvh 表明如果这个包没有安装就安装它，如果已存在就尝试更新。这里-U表示更新、-v表示显示详细输出，用-h显示进度条。例如# rpm -Uvh package.rpm rpm 的另一个典型的使用方法是列出所有安装的软件包，# rpm -qa 查询所有包参见： 20 个管理 RHEL 7 软件包的 RPM 命令使用 Cron 调度任务Linux 和 UNIX 类操作系统包括一个称为 Cron 的工具，允许你周期性调度任务（即命令或 shell 脚本）。cron 会每分钟定时检查 /var/spool/cron 目录中有在 /etc/passwd 帐户文件中指定用户名的文件。执行命令时，命令输出是发送到该 crontab 的所有者（或者可以在 /etc/crontab，通过 MAILTO 环境变量中指定用户）。crontab 文件（可以通过键入 crontab -e并按 Enter 键创建）的格式如下：crontab条目因此，如果我们想在每个月第二天上午2:15更新本地文件数据库（用于按名字或通配模式定位文件），我们需要添加以下 crontab 条目：15 02 2 * * /bin/updatedb 以上的条目的意思是：”每年每月第二天的凌晨 2：15 运行 /bin/updatedb，无论是周几”，我想你也猜到了。星号作为通配符。正如我们前面所提到的，添加一个 cron 任务后，你可以看到一个名为 root 的文件被添加在 /var/spool/cron。该文件列出了所有的 crond 守护进程应该运行的任务：# ls -l /var/spool/cron 检查所有cron任务在上图中，显示当前用户的 crontab 可以使用 cat /var/spool/cron 或# crontab -l 如果你需要在一个更精细的时间上运行的任务（例如，一天两次或每月三次），cron 也可以做到。例如，每个月1号和15号运行 /my/s…

RHCSA 系列（九）
type: item
date: 2015-09-24T22:11:45+08:00
description: Web 服务器（也被称为 HTTP 服务器）是在网络中将内容（最为常见的是网页，但也支持其他类型的文件）进行处理并传递给客户端的服务。FTP 服务器是最为古老且最常使用的资源之一（即便到今天也是这样），在身份认证不是必须的情况下，它可通过客户端在一个网络访问文件，因为 FTP 使用没有加密的用户名和密码，所以有些情况下不需要验证也行。在 RHEL 7 中可用的 web 服务器是版本号为 2.4 的 Apache HTTP 服务器。至于 FTP 服务器，我们将使用 Very Secure Ftp Daemon (又名 vsftpd) 来建立用 TLS 加固的连接。RHCSA: 安装，配置及加固 Apache 和 FTP 服务器 – Part 9在这篇文章中，我们将解释如何在 RHEL 7 中安装、配置和加固 web 和 FTP 服务器。安装 Apache 和 FTP 服务器在本指导中，我们将使用一个静态 IP 地址为 192.168.0.18/24 的 RHEL 7 服务器。为了安装 Apache 和 VSFTPD，运行下面的命令：# yum update && yum install httpd vsftpd 当安装完成后，这两个服务在开始时是默认被禁用的，所以我们需要暂时手动开启它们并让它们在下一次启动时自动地开启它们：# systemctl start httpd # systemctl enable httpd # systemctl start vsftpd # systemctl enable vsftpd 另外，我们必须打开 80 和 21 端口，它们分别是 web 和 ftp 守护进程监听的端口，为的是允许从外面访问这些服务：# firewall-cmd --zone=public --add-port=80/tcp --permanent # firewall-cmd --zone=public --add-service=ftp --permanent # firewall-cmd --reload 为了确认 web 服务工作正常，打开你的浏览器并输入服务器的 IP，则你应该可以看到如下的测试页面：确认 Apache Web 服务器对于 ftp 服务器，在确保它如期望中的那样工作之前，我们必须进一步地配置它，我们将在几分钟后来做这件事。配置并加固 Apache Web 服务器Apache 的主要配置文件位于 /etc/httpd/conf/httpd.conf 中，但它可能依赖 /etc/httpd/conf.d 中的其他文件。尽管默认的配置对于大多数的情形都够用了，但熟悉在 官方文档 中介绍的所有可用选项是一个不错的主意。同往常一样，在编辑主配置文件前先做一个备份：# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.$(date +%Y%m%d) 然后用你钟爱的文本编辑器打开它，并查找下面这些变量：ServerRoot： 服务器的配置，错误和日志文件保存的目录。Listen： 通知 Apache 去监听特定的 IP 地址或端口。Include: 允许包含其他配置文件，要包含的文件必须存在，否则，服务器将会失败。它恰好与 IncludeOptional 相反，假如特定的配置文件不存在，它将静默地忽略掉它们。User 和 Group： 运行 httpd 服务的用户/组的名称。DocumentRoot： Apache 为你的文档所服务的目录。默认情况下，所有的请求将在这个目录中被获取，但符号链接和别名可能会被用于指向其他位置。ServerName： 这个指令将设定用于识别它自身的主机名（或 IP 地址）和端口。安全措施的第一步将包含创建一个特定的用户和组（如 tecmint/tecmint）来运行 web 服务器，以及更改默认的端口为一个更高的端口（在这个例子中为 9000） （LCTT 译注：如果你的 Web 服务器对外公开提供服务，则不建议修改为非默认端口。）：ServerRoot "/etc/httpd" Listen 192.168.0.18:9000 User tecmint Group tecmint DocumentRoot "/var/www/html" ServerName 192.168.0.18:9000 你可以使用下面的命令来测试配置文件：# apachectl configtest 假如一切 OK，接着重启 web 服务器。# systemctl restart httpd 并别忘了在防火墙中开启新的端口（并禁用旧的端口）：# firewall-cmd --zone=public --remove-port=80/tcp …

RHCSA 系列（八）
type: item
date: 2015-09-23T16:01:00+08:00
description: 作为一名系统管理员，你将经常使用一个终端模拟器来登录到一个远程的系统中，执行一系列的管理任务。你将很少有机会坐在一个真实的（物理）终端前，所以你需要设定好一种方法来使得你可以登录到你需要去管理的那台远程主机上。事实上，当你必须坐在一台物理终端前的时候，就可能是你登录到该主机的最后一种方法了。基于安全原因，使用 Telnet 来达到以上目的并不是一个好主意，因为穿行在线缆上的流量并没有被加密，它们以明文方式在传送。另外，在这篇文章中，我们也将复习如何配置网络服务来使得它在开机时被自动开启，并学习如何设置网络和静态或动态地解析主机名。RHCSA: 安全 SSH 和开启网络服务 – Part 8安装并确保 SSH 通信安全对于你来说，要能够使用 SSH 远程登录到一个 RHEL 7 机子，你必须安装 openssh，openssh-clients 和 openssh-servers 软件包。下面的命令不仅将安装远程登录程序，也会安装安全的文件传输工具以及远程文件复制程序：# yum update && yum install openssh openssh-clients openssh-servers 注意，也安装上服务器所需的相应软件包是一个不错的主意，因为或许在某个时刻，你想使用同一个机子来作为客户端和服务器。在安装完成后，如若你想安全地访问你的 SSH 服务器，你还需要考虑一些基本的事情。下面的设定应该出现在文件 /etc/ssh/sshd_config 中。1、 更改 sshd 守护进程的监听端口，从 22（默认的端口值）改为一个更高的端口值（2000 或更大），但首先要确保所选的端口没有被占用。例如，让我们假设你选择了端口 2500 。使用 netstat 来检查所选的端口是否被占用：# netstat -npltu | grep 2500 假如 netstat 没有返回任何信息，则你可以安全地为 sshd 使用端口 2500，并且你应该在上面的配置文件中更改端口的设定，具体如下：Port 2500 2、 只允许协议 2（LCTT 译注：SSHv1 已经被证明不安全，默认情况下 SSHv1 和 SSHv2 都支持，所以应该显示去掉如下配置行的注释，并只支持 SSHv2。）：Protocol 2 3、 配置验证超时的时间为 2 分钟，不允许以 root 身份登录，并将允许通过 ssh 登录的人数限制到最小：LoginGraceTime 2m PermitRootLogin no AllowUsers gacanepa 4、 假如可能，使用基于公钥的验证方式而不是使用密码：PasswordAuthentication no RSAAuthentication yes PubkeyAuthentication yes 这假设了你已经在你的客户端机子上创建了带有你的用户名的一个密钥对，并将公钥复制到了你的服务器上。开启 SSH 无密码登录配置网络和名称的解析1、 每个系统管理员都应该对下面这个系统配置文件非常熟悉：/etc/hosts 被用来在小型网络中解析“名称” “IP 地址”。文件 /etc/hosts 中的每一行拥有如下的结构：IP address - Hostname - FQDN 例如，192.168.0.10 laptop laptop.gabrielcanepa.com.ar 2、 /etc/resolv.conf 特别指定 DNS 服务器的 IP 地址和搜索域，它被用来在没有提供域名后缀时，将一个给定的查询名称对应为一个全称域名。在正常情况下，你不必编辑这个文件，因为它是由系统管理的。然而，若你非要改变 DNS 服务器的 IP 地址，建议你在该文件的每一行中，都应该遵循下面的结构：nameserver - IP address 例如，nameserver 8.8.8.8 3、 /etc/host.conf 特别指定在一个网络中主机名被解析的方法和顺序。换句话说，告诉名称解析器使用哪个服务，并以什么顺序来使用。尽管这个文件由几个选项，但最为常见和基本的设置包含如下的一行：order bind,hosts 它意味着解析器应该首先查看 resolv.conf 中特别指定的域名服务器，然后到 /etc/hosts 文件中查找解析的名称。4、 /etc/sysconfig/network 包含了所有网络接口的路由和全局主机信息。下面的值可能会被使用：NETWORKING=yes|no HOSTNAME=value 其中的 value 应该是 全称域名 （ FQDN ） 。GATEWAY=XXX.XXX.XXX.XXX 其中的 XXX.XXX.XXX.XXX 是网关的 IP 地址。GATEWAYDEV=value 在一个带…

RHCSA 系列（七）
type: item
date: 2015-09-22T17:07:00+08:00
description: 在上一篇文章(RHCSA 系列（六）)中，我们解释了如何使用 parted 和 ssm 来设置和配置本地系统存储。RHCSA 系列: 配置 ACL 及挂载 NFS/Samba 共享 – Part 7我们也讨论了如何创建和在系统启动时使用一个密码来挂载加密的卷。另外，我们告诫过你要避免在挂载的文件系统上执行危险的存储管理操作。记住了这点后，现在，我们将回顾在 RHEL 7 中最常使用的文件系统格式，然后将涵盖有关手动或自动挂载、使用和卸载网络文件系统（CIFS 和 NFS）的话题以及在你的操作系统上实现 访问控制列表 （ Access Control List ） 的使用。前提条件在进一步深入之前，请确保你可使用 Samba 服务和 NFS 服务（注意在 RHEL 7 中 NFSv2 已不再被支持）。在本次指导中，我们将使用一个IP 地址为 192.168.0.10 且同时运行着 Samba 服务和 NFS 服务的机器来作为服务器，使用一个 IP 地址为 192.168.0.18 的 RHEL 7 机器来作为客户端。在这篇文章的后面部分，我们将告诉你在客户端上你需要安装哪些软件包。RHEL 7 中的文件系统格式从 RHEL 7 开始，由于 XFS 的高性能和可扩展性，它已经被作为所有的架构中的默认文件系统。根据 Red Hat 及其合作伙伴在主流硬件上执行的最新测试，当前 XFS 已支持最大为 500 TB 大小的文件系统。另外，XFS 启用了 user_xattr（扩展用户属性） 和 acl（POSIX 访问控制列表）来作为默认的挂载选项，而不像 ext3 或 ext4（对于 RHEL 7 来说，ext2 已过时），这意味着当挂载一个 XFS 文件系统时，你不必显式地在命令行或 /etc/fstab 中指定这些选项（假如你想在后一种情况下禁用这些选项，你必须显式地使用 no_acl 和 no_user_xattr）。请记住扩展用户属性可以给文件和目录指定，用来存储任意的额外信息如 mime 类型，字符集或文件的编码，而用户属性中的访问权限由一般的文件权限位来定义。访问控制列表作为一名系统管理员，无论你是新手还是专家，你一定非常熟悉与文件和目录有关的常规访问权限，这些权限为所有者，所有组和“世界”（所有的其他人）指定了特定的权限（可读，可写及可执行）。但如若你需要稍微更新下你的记忆，请参考 RHCSA 系列（三）.但是，由于标准的 ugo/rwx 集合并不允许为不同的用户配置不同的权限，所以 ACL 便被引入了进来，为的是为文件和目录定义更加详细的访问权限，而不仅仅是这些特别指定的特定权限。事实上， ACL 定义的权限是由文件权限位所特别指定的权限的一个超集。下面就让我们看看这个转换是如何在真实世界中被应用的吧。存在两种类型的 ACL：访问 ACL，可被应用到一个特定的文件或目录上；以及默认 ACL，只可被应用到一个目录上。假如目录中的文件没有 ACL，则它们将继承它们的父目录的默认 ACL 。从一开始， ACL 就可以为每个用户，每个组或不在文件所属组中的用户配置相应的权限。ACL 可使用 setfacl 来设置（和移除），可相应地使用 -m 或 -x 选项。例如，让我们创建一个名为 tecmint 的组，并将用户 johndoe 和 davenull 加入该组：# groupadd tecmint # useradd johndoe # useradd davenull # usermod -a -G tecmint johndoe # usermod -a -G tecmint davenull 并且让我们检验这两个用户都已属于追加的组 tecmint：# id johndoe # id davenull 检验用户现在，我们在 /mnt 下创建一个名为 playground 的目录，并在该目录下创建一个名为 testfile.txt 的文件。我们将设定该文件的属组为 tecmint，并更改它的默认 ugo/rwx 权限为 770（即赋予该文件的属主和属组可读、可写和可执行权限）：# mkdir /mnt/playground # touch /mnt/playground/testfile.txt # chown :tecmint /mnt/playground/testfile.txt # chmod 770 /mnt/playground/testfile.txt 接着，依次切换为 johndoe 和 davenull 用户，并在文件中写入一些信息：# su johndoe $ echo "My name is John Doe" > /mnt/playground/testfile.txt $ su davenull…

RHCSA 系列（六）
type: item
date: 2015-09-21T16:23:00+08:00
description: 在本篇文章中，我们将讨论在 RHEL 7 中如何使用传统的工具来设置和配置本地系统存储，并介绍系统存储管理器（也称为 SSM），它将极大地简化上面的任务。RHCSA: 配置和加密系统存储 – Part 6请注意，我们将在这篇文章中展开这个话题，但由于该话题的宽泛性，我们将在下一期中继续介绍有关它的描述和使用。在 RHEL 7 中创建和修改分区在 RHEL 7 中， parted 是默认的用来处理分区的程序，且它允许你：展示当前的分区表操纵（扩大或缩小分区的大小）现有的分区利用空余的磁盘空间或额外的物理存储设备来创建分区强烈建议你在试图增加一个新的分区或对一个现有分区进行更改前，你应当确保该设备上没有任何一个分区正在使用（umount /dev/分区），且假如你正使用设备的一部分来作为 swap 分区，在进行上面的操作期间，你需要将它禁用（swapoff -v /dev/分区） 。实施上面的操作的最简单的方法是使用一个安装介质例如一个 RHEL 7 的 DVD 或 USB 安装盘以急救模式启动 RHEL（Troubleshooting → Rescue a Red Hat Enterprise Linux system），然后当让你选择一个选项来挂载现有的 Linux 安装时，选择“跳过”这个选项，接着你将看到一个命令行提示符，在其中你可以像下图显示的那样开始键入与在一个未被使用的物理设备上创建一个正常的分区时所用的相同的命令。RHEL 7 急救模式要启动 parted，只需键入：# parted /dev/sdb 其中 /dev/sdb 是你将要创建新分区所在的设备；然后键入 print 来显示当前设备的分区表：创建新的分区正如你所看到的那样，在这个例子中，我们正在使用一个 5 GB 的虚拟驱动器。现在我们将要创建一个 4 GB 的主分区，然后将它格式化为 xfs 文件系统，它是 RHEL 7 中默认的文件系统。你可以从一系列的文件系统中进行选择。你将需要使用 mkpart 来手动地创建分区，接着和平常一样，用 mkfs.类型 来对分区进行格式化，因为 mkpart 并不支持许多现代的文件系统的到即开即用。在下面的例子中，我们将为设备设定一个标记，然后在 /dev/sdb 上创建一个主分区 (p)，它从设备的 0% 开始，并在 4000MB(4 GB) 处结束。标记分区的名称接下来，我们将把分区格式化为 xfs 文件系统，然后再次打印出分区表，以此来确保更改已被应用。# mkfs.xfs /dev/sdb1 # parted /dev/sdb print 格式化分区为 XFS 文件系统对于旧一点的文件系统，在 parted 中你可以使用 resize 命令来改变分区的大小。不幸的是，这只适用于 ext2, fat16, fat32, hfs, linux-swap, 和 reiserfs （若 libreiserfs 已被安装）。因此，改变分区大小的唯一方式是删除它然后再创建它（所以，确保你对你的数据做了完整的备份！）。毫无疑问，在 RHEL 7 中默认的分区方案是基于 LVM 的。使用 parted 来移除一个分区，可以用：# parted /dev/sdb print # parted /dev/sdb rm 1 移除或删除分区逻辑卷管理(LVM)一旦一个磁盘被分好了分区，再去更改分区的大小就是一件困难或冒险的事了。基于这个原因，假如我们计划在我们的系统上对分区的大小进行更改，我们应当考虑使用 LVM 的可能性，而不是使用传统的分区系统。这样多个物理设备可以组成一个逻辑组，以此来存放任意数目的逻辑卷，而逻辑卷的增大或减少不会带来任何麻烦。简单来说，你会发现下面的示意图对记住 LVM 的基础架构或许有用。LVM 的基本架构创建物理卷，卷组和逻辑卷遵循下面的步骤是为了使用传统的卷管理工具来设置 LVM。由于你可以通过阅读这个网站上的 LVM 系列来扩展这个话题，我将只是概要的介绍设置 LVM 的基本步骤，然后与使用 SSM 来实现相同功能做个比较。注: 我们将使用整个磁盘 /dev/sdb 和 /dev/sdc 来作为物理卷（PV），但是否执行相同的操作完全取决于你。1. 使用 /dev/sdb 和 /dev/sdc 中 100% 的可用磁盘空间来创建分区 /dev/sdb1 和 /dev/sdc1：# parted /dev/sdb print # parted /dev/sdc print 创建新分区2. 分别在 /dev/sdb1 和 /dev/sdc1 上共创建 2 个物理卷。# pvcreate /dev/sdb1 # pvcreate /dev/sdc1 创建两个物理卷记住，你可以使用 pvdisplay /dev…