Gabriel Cánepa 发布的文章

假如你在词典中查一下单词 “ 虚拟化 virtualize ”,你将会发现它的意思是 “创造某些事物的一个虚拟物(而非真实的)”。在计算机行业中,术语 虚拟化 virtualization 指的是:在相同的物理(硬件)系统上,同时运行多个操作系统,且这几个系统相互隔离的可能性,而那个硬件在虚拟化架构中被称作 宿主机 host

KVM 虚拟化基础和 KVM 虚拟机管理

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 支持

检查 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 让这类的流量应当被允许通过防火墙。假如你需要这样做,记住你可以参考这个系列的 使用 firewalld 和 iptables 来控制网络流量

创建虚拟机镜像

默认情况下,虚拟机镜像将会被创建到 /var/lib/libvirt/images 中,且强烈建议你不要更改这个设定,除非你真的需要那么做且知道你在做什么,并能自己处理有关 SELinux 的设定(这个话题已经超出了本教程的讨论范畴,但你可以参考这个系列的第 13 部分 使用 SELinux 来进行强制访问控制,假如你想更新你的知识的话)。

这意味着你需要确保你在文件系统中分配了必要的空间来容纳你的虚拟机。

下面的命令将使用位于 /home/gacanepa/ISOs目录下的 rhel-server-7.0-x86\_64-dvd.iso 镜像文件和 br0 这个网桥来创建一个名为 tecmint-virt01 的虚拟机,它有一个虚拟 CPU,1 GB(=1024 MB)的 RAM,20 GB 的磁盘空间(由/var/lib/libvirt/images/tecmint-virt01.img所代表):

# virt-install \
--network bridge=br0
--name tecmint-virt01 \
--ram=1024 \
--vcpus=1 \
--disk path=/var/lib/libvirt/images/tecmint-virt01.img,size=20 \
--graphics none \
--cdrom /home/gacanepa/ISOs/rhel-server-7.0-x86_64-dvd.iso
--extra-args="console=tty0 console=ttyS0,115200"

假如安装文件位于一个 HTTP 服务器上,而不是存储在你磁盘中的镜像中,你必须将上面的 -cdrom 替换为 -location,并明确地指出在线存储仓库的地址。

至于上面的 –graphics none 选项,它告诉安装程序只以文本模式执行安装过程。假如你使用一个 GUI 界面和一个 VNC 窗口来访问主虚拟机控制台,则可以省略这个选项。最后,使用 –extra-args 参数,我们将传递内核启动参数给安装程序,以此来设置一个串行的虚拟机控制台。

现在,所安装的虚拟机应当可以作为一个正常的(真实的)服务来运行了。假如没有,请查看上面列出的步骤。

管理虚拟机

作为一个系统管理员,还有一些典型的管理任务需要你在虚拟机上去完成。注:下面所有的命令都需要在你的宿主机上运行:

1. 列出所有的虚拟机:

# virsh list --all

你必须留意上面命令输出中的虚拟机 ID(尽管上面的命令还会返回虚拟机的名称和当前的状态),因为你需要它来执行有关某个虚拟机的大多数管理任务。

2. 显示某个虚拟机的信息:

# virsh dominfo [VM Id]

3. 开启,重启或停止一个虚拟机操作系统:

# virsh start | reboot | shutdown [VM Id]

4. 假如网络无法连接且在宿主机上没有运行 X 服务器,可以使用下面的命令来访问虚拟机的串行控制台:

# virsh console [VM Id]

:这需要你添加一个串行控制台配置信息到 /etc/grub.conf 文件中(参考刚才创建虚拟机时传递给-extra-args选项的参数)。

5. 修改分配的内存或虚拟 CPU:

首先,关闭虚拟机:

# virsh shutdown [VM Id]

为 RAM 编辑虚拟机的配置:

# virsh edit [VM Id]

然后更改

<memory>[内存大小,注意不要加上方括号]</memory>

使用新的设定重启虚拟机:

# virsh create /etc/libvirt/qemu/tecmint-virt01.xml

最后,可以使用下面的命令来动态地改变内存的大小:

# virsh setmem [VM Id] [内存大小,这里没有括号]

对于 CPU,使用:

# virsh edit [VM Id]

然后更改

<cpu>[CPU 数目,这里没有括号]</cpu>

至于更深入的命令和细节,请参考 RHEL 5 虚拟化指南(这个指南尽管有些陈旧,但包括了用于管理虚拟机的 virsh 命令的详尽清单)的第 26 章里的表 26.1。

总结

在这篇文章中,我们涵盖了在 RHEL 7 中如何使用 KVM 和虚拟化的一些基本概念,这个话题是一个广泛且令人着迷的话题。并且我希望它能成为你在随后阅读官方的 RHEL 虚拟化入门RHEL 虚拟化部署和管理指南 ,探索更高级的主题时的起点教程,并给你带来帮助。

另外,为了分辨或拓展这里解释的某些概念,你还可以参考先前包含在 KVM 系列 中的文章。


via: http://www.tecmint.com/kvm-virtualization-basics-and-guest-administration/

作者:Gabriel Cánepa 译者:FSSlc 校对:wxy

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

在这篇文章中,我们将首先罗列一些 LDAP 的基础知识(它是什么,它被用于何处以及为什么会被这样使用),然后向你展示如何使用 RHEL 7 系统来设置一个 LDAP 服务器以及配置一个客户端来使用它达到认证的目的。

设置 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 示意图

下面是对上面示意图的一个详细解释。

  • 在一个 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 的示例数据库配置文件复制进这个目录:

# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# chown -R ldap:ldap /var/lib/ldap

4. 设置一个 OpenLDAP 管理用户并设置密码:

# slappasswd

正如下一幅图所展示的那样:

设置 LDAP 管理密码

设置 LDAP 管理密码

然后以下面的内容创建一个 LDIF 文件(ldaprootpasswd.ldif):

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD

其中:

  • PASSWORD 是先前得到的经过哈希处理的字符串。
  • cn=config 指的是全局配置选项。
  • olcDatabase 指的是一个特定的数据库实例的名称,并且通常可以在 /etc/openldap/slapd.d/cn=config 目录中发现。

根据上面提供的理论背景,ldaprootpasswd.ldif 文件将添加一个条目到 LDAP 目录中。在那个条目中,每一行代表一个属性键值对(其中 dn,changetype,add 和 olcRootPW 为属性,每个冒号右边的字符串为相应的键值)。

随着我们的进一步深入,请记住上面的这些,并注意到在这篇文章的余下部分,我们使用相同的 通用名 Common Names (cn=),而这些余下的步骤中的每一步都将与其上一步相关。

5. 现在,通过特别指定相对于 ldap 服务的 URI ,添加相应的 LDAP 条目,其中只有 protocol/host/port 这几个域被允许使用。

# ldapadd -H ldapi:/// -f ldaprootpasswd.ldif

上面命令的输出应该与下面的图像相似:

LDAP 配置

LDAP 配置

接着从 /etc/openldap/schema 目录导入一个基本的 LDAP 定义:

# for def in cosine.ldif nis.ldif inetorgperson.ldif; do ldapadd -H ldapi:/// -f /etc/openldap/schema/$def; done

LDAP 定义

LDAP 定义

6. 让 LDAP 在它的数据库中使用你的域名。

以下面的内容创建另一个 LDIF 文件,我们称之为 ldapdomain.ldif, 然后酌情替换这个文件中的域名(在 域名部分 Domain Component dc=) 和密码:

dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
  read by dn.base="cn=Manager,dc=mydomain,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=mydomain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=mydomain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
  dn="cn=Manager,dc=mydomain,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=mydomain,dc=com" write by * read

接着使用下面的命令来加载:

# ldapmodify -H ldapi:/// -f ldapdomain.ldif

LDAP 域名配置

LDAP 域名配置

7. 现在,该是添加一些条目到我们的 LDAP 目录的时候了。在下面的文件中,属性和键值由一个冒号(:) 所分隔,这个文件我们将命名为 baseldapdomain.ldif:

dn: dc=mydomain,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: mydomain com
dc: mydomain

dn: cn=Manager,dc=mydomain,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager

dn: ou=People,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: Group

添加条目到 LDAP 目录中:

# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f baseldapdomain.ldif

添加 LDAP 域名,属性和键值

添加 LDAP 域名,属性和键值

8. 创建一个名为 ldapuser 的 LDAP 用户(adduser ldapuser),然后在ldapgroup.ldif 中为一个 LDAP 组创建定义。

# adduser ldapuser
# vi ldapgroup.ldif

添加下面的内容:

dn: cn=Manager,ou=Group,dc=mydomain,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: 1004

其中 gidNumber 是 ldapuser 在 /etc/group 中的 GID,然后加载这个文件:

# ldapadd -x -W -D "cn=Manager,dc=mydomain,dc=com" -f ldapgroup.ldif

9. 为用户 ldapuser 添加一个带有定义的 LDIF 文件(ldapuser.ldif):

dn: uid=ldapuser,ou=People,dc=mydomain,dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: ldapuser
uid: ldapuser
uidNumber: 1004
gidNumber: 1004
homeDirectory: /home/ldapuser
userPassword: {SSHA}fiN0YqzbDuDI0Fpqq9UudWmjZQY28S3M
loginShell: /bin/bash
gecos: ldapuser
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0

并加载它:

# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f ldapuser.ldif

LDAP 用户配置

LDAP 用户配置

相似地,你可以删除你刚刚创建的用户条目:

# ldapdelete -x -W -D cn=Manager,dc=mydomain,dc=com "uid=ldapuser,ou=People,dc=mydomain,dc=com"

10. 允许有关 ldap 的通信通过防火墙:

# firewall-cmd --add-service=ldap

11. 最后,但并非最不重要的是使用 LDAP 开启客户端的认证。

为了在最后一步中对我们有所帮助,我们将使用 authconfig 工具(一个配置系统认证资源的界面)。

使用下面的命令,在通过 LDAP 服务器认证成功后,假如请求的用户的家目录不存在,则将会被创建:

# authconfig --enableldap --enableldapauth --ldapserver=rhel7.mydomain.com --ldapbasedn="dc=mydomain,dc=com" --enablemkhomedir --update

LDAP 客户端认证

LDAP 客户端认证

总结

在这篇文章中,我们已经解释了如何利用一个 LDAP 服务器来设置基本的认证。若想对当前这个指南里描述的设置进行更深入的配置,请参考位于 RHEL 系统管理员指南里的 第 13 章 – LDAP 的配置,并特别注意使用 TLS 来进行安全设定。

请随意使用下面的评论框来留下你的提问。


via: http://www.tecmint.com/setup-ldap-server-and-configure-client-authentication/

作者:Gabriel Cánepa 译者:FSSlc 校对:wxy

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

在本系列的前面几篇文章中,我们已经详细地探索了至少两种访问控制方法:标准的 ugo/rwx 权限(RHCSA 系列(三): 如何管理 RHEL7 的用户和组) 和访问控制列表(RHCSA 系列(七): 使用 ACL(访问控制列表) 和挂载 Samba/NFS 共享)。

RHCSA 认证:SELinux 精要和控制文件系统的访问

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 模式

设置 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 sshd

更改 SSH 的端口

重启 SSH 服务

正如你看到的那样, sshd 启动失败,但为什么会这样呢?

快速检查 /var/log/audit/audit.log 文件会发现 sshd 已经被拒绝在端口 9999 上开启(SELinux 的日志信息包含单词 "AVC",所以这类信息可以被轻易地与其他信息相区分),因为这个端口是 JBoss 管理服务的保留端口:

# cat /var/log/audit/audit.log | grep AVC | tail -1

查看 SSH 日志

查看 SSH 日志

在这种情况下,你可以像先前解释的那样禁用 SELinux(但请不要这样做!),并尝试重启 sshd,且这种方法能够起效。但是, semanage 应用可以告诉我们在哪些端口上可以开启 sshd 而不会出现任何问题。

运行:

# semanage port -l | grep ssh

便可以得到一个 SELinux 允许 sshd 在哪些端口上监听的列表:

Semanage 工具

Semanage 工具

所以让我们在 /etc/ssh/sshd_config 中将端口更改为 9998 端口,增加这个端口到 sshportt 的上下文,然后重启 sshd 服务:

# semanage port -a -t ssh_port_t -p tcp 9998
# systemctl restart sshd
# systemctl is-active sshd

Semanage 添加端口

semanage 添加端口

如你所见,这次 sshd 服务被成功地开启了。这个例子告诉我们一个事实:SELinux 用它自己的端口类型的内部定义来控制 TCP 端口号。

例 2:允许 httpd 访问 sendmail

这是一个 SELinux 管理一个进程来访问另一个进程的例子。假如在你的 RHEL 7 服务器上,你要为 Apache 配置 mod\_security 和 mod\_evasive,你需要允许 httpd 访问 sendmail,以便在遭受到 (D)DoS 攻击时能够用邮件来提醒你。在下面的命令中,如果你不想使得更改在重启后仍然生效,请去掉 -P 选项。

# semanage boolean -1 | grep httpd_can_sendmail
# setsebool -P httpd_can_sendmail 1
# semanage boolean -1 | grep httpd_can_sendmail

允许 Apache 发送邮件

允许 Apache 发送邮件

从上面的例子中,你可以知道 SELinux 布尔设定(或者只是布尔值)分别对应于 true 或 false,被嵌入到了 SELinux 策略中。你可以使用 semanage boolean -l 来列出所有的布尔值,也可以管道至 grep 命令以便筛选输出的结果。

例 3:在一个特定目录而非默认目录下提供一个静态站点服务

假设你正使用一个不同于默认目录(/var/www/html)的目录来提供一个静态站点服务,例如 /websites 目录(这种情形会出现在当你把你的网络文件存储在一个共享网络设备上,并需要将它挂载在 /websites 目录时)。

a). 在 /websites 下创建一个 index.html 文件并包含如下的内容:

<html>
<h2>SELinux test</h2>
</html>

假如你执行

# ls -lZ /websites/index.html

你将会看到这个 index.html 已经被标记上了 default\_t SELinux 类型,而 Apache 不能访问这类文件:

检查 SELinux 文件的权限

检查 SELinux 文件的权限

b). 将 /etc/httpd/conf/httpd.conf 中的 DocumentRoot 改为 /websites,并不要忘了 更新相应的 Directory 块。然后重启 Apache。

c). 浏览 http://<web server IP address>,则你应该会得到一个 503 Forbidden 的 HTTP 响应。

d). 接下来,递归地改变 /websites 的标志,将它的标志变为 httpd_sys_content_t 类型,以便赋予 Apache 对这些目录和其内容的只读访问权限:

# semanage fcontext -a -t httpd_sys_content_t "/websites(/.*)?"

e). 最后,应用在 d) 中创建的 SELinux 策略:

# restorecon -R -v /websites

现在重启 Apache 并再次浏览到 http://<web server IP address>,则你可以看到被正确展现出来的 html 文件:

确认 Apache 页面

确认 Apache 页面

总结

在本文中,我们详细地介绍了 SELinux 的基础知识。请注意,由于这个主题的广泛性,在单篇文章中做出一个完全详尽的解释是不可能的,但我们相信,在这个指南中列出的基本原则将会对你进一步了解更高级的话题有所帮助,假如你想了解的话。

假如可以,请让我推荐两个必要的资源来入门 SELinux:NSA SELinux 页面针对用户和系统管理员的 RHEL 7 SELinux 指南

假如你有任何的问题或评论,请不要犹豫,让我们知晓吧。


via: http://www.tecmint.com/selinux-essentials-and-control-filesystem-access/

作者:Gabriel Cánepa 译者:FSSlc 校对:wxy

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

无论是在数据中心还是实验室环境,Linux 服务器很少是独立的机器,很可能有时你需要安装多个以某种方式相互联系的机器。假如你将在单个服务器上手动安装 RHEL 7 所花的时间乘以你需要配置的机器数量,这将导致你必须做出一场相当长的努力,而通过使用被称为 kicksta 的无人值守安装工具则可以避免这样的麻烦。

在这篇文章中,我们将向你展示使用 kickstart 工具时所需的一切,以便在安装过程中,不用你时不时地照看“处在襁褓中”的服务器。

RHEL 7 的自动化 Kickstart 安装

RHCSA: RHEL 7 的自动化 Kickstart 安装

Kickstart 和自动化安装简介

Kickstart 是一种被用来执行无人值守操作系统安装和配置的自动化安装方法,主要被 RHEL(以及其他 Fedora 的副产品,如 CentOS,Oracle Linux 等)所使用。因此,kickstart 安装方法可使得系统管理员只需考虑需要安装的软件包组和系统的配置,便可以得到相同的系统,从而省去必须手动安装这些软件包的麻烦。

准备 Kickstart 安装

要执行 kickstart 安装,我们需要遵循下面的这些步骤:

  1. 创建一个 Kickstart 文件,它是一个带有多个预定义配置选项的纯文本文件。
  2. 将 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 机器)。
  3. 开始 Kickstart 安装。

要创建一个 kickstart 文件,请登录你的红帽客户门户网站(Red Hat Customer Portal)帐户,并使用 Kickstart 配置工具 来选择所需的安装选项。在向下滑动之前请仔细阅读每个选项,然后选择最适合你需求的选项:

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 镜像

挂载 RHEL ISO 镜像

接下来,复制 /media/rhel 中的全部文件到 /var/www/html/kickstart/media 目录:

# cp -R /media/rhel /var/www/html/kickstart/media

这一步做完后,/var/www/html/kickstart/media 目录中的文件列表和磁盘使用情况将如下所示:

Kickstart 媒体文件

Kickstart 媒体文件

现在,我们已经准备好开始 kickstart 安装了。

不管你如何选择创建 kickstart 文件的方式,在执行安装之前检查下这个文件的语法是否有误总是一个不错的主意。为此,我们需要安装 pykickstart 软件包。

# yum update && yum install pykickstart

然后使用 ksvalidator 工具来检查这个文件:

# ksvalidator /var/www/html/kickstart/tecmint.bin

假如文件中的语法正确,你将不会得到任何输出,反之,假如文件中存在错误,你得到警告,向你提示在某一行中语法不正确或出错原因未知。

执行 Kickstart 安装

首先,使用 rhel-server-7.0-x86\_64-boot.iso 来启动你的客户端。当初始屏幕出现时,选择安装 RHEL 7.0 ,然后按 Tab 键来追加下面这一句,接着按 Enter 键:

# inst.ks=http://192.168.0.18/kickstart/tecmint.bin

RHEL Kickstart 安装

RHEL Kickstart 安装

其中 tecmint.bin 是先前创建的 kickstart 文件。

当你按了 Enter 键后,自动安装就开始了,且你将看到一个列有正在被安装的软件的列表(软件包的数目和名称根据你所选择的程序和软件包组而有所不同):

RHEL 7 的自动化 Kickstart 安装

RHEL 7 的自动化 Kickstart 安装

当自动化过程结束后,将提示你移除安装介质,接着你就可以启动到你新安装的系统中了:

RHEL 7 启动屏幕

RHEL 7 启动屏幕

尽管你可以像我们前面提到的那样,手动地创建你的 kickstart 文件,但你应该尽可能地考虑使用受推荐的方式:你可以使用在线配置工具,或者使用在安装过程中创建的位于 root 家目录下的 anaconda-ks.cfg 文件。

这个文件实际上就是一个 kickstart 文件,你或许想在选择好所有所需的选项(可能需要更改逻辑卷布局或机器上所用的文件系统)后手动地安装第一个机器,接着使用产生的 anaconda-ks.cfg 文件来自动完成其余机器的安装过程。

另外,使用在线配置工具或 anaconda-ks.cfg 文件来引导将来的安装将允许你在系统安装时以加密的形式设置 root 密码。

总结

既然你知道了如何创建 kickstart 文件并如何使用它们来自动完成 RHEL 7 服务器的安装,你就可以不用时时照看安装进度的过程了。这将给你时间来做其他的事情,或者若你足够幸运,你还可以用来休闲一番。

无论以何种方式,请使用下面的评论栏来让我们知晓你对这篇文章的看法。提问也同样欢迎!

另外,请阅读:使用 PXE 和 kickstart 来自动化安装多个 RHEL/CentOS 7 发行版本


via: http://www.tecmint.com/automatic-rhel-installations-using-kickstart/

作者:Gabriel Cánepa 译者:FSSlc 校对:wxy

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

简单来说,防火墙就是一个基于一系列预先定义的规则(例如流量包的目的地或来源,流量的类型等)的安全系统,它控制着一个网络中的流入和流出流量。

使用 FirewallD 和 Iptables 来控制网络流量

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 的信息

检查 FirewallD 的信息

以及,

# systemctl status -l firewalld.service

检查 FirewallD 的状态

检查 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 防火墙配置文件

Iptables 防火墙配置文件

而 firewalld 则在两个目录中存储它的配置文件,即 /usr/lib/firewalld/etc/firewalld

# ls /usr/lib/firewalld /etc/firewalld

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 -j ACCEPT

例 2:从某个特定网络中阻挡所有(或某些)流入连接

或许有时你需要阻挡来自于某个特定网络的所有(或某些)类型的来源流量,比方说 192.168.1.0/24:

# iptables -I INPUT -s 192.168.1.0/24 -j DROP

上面的命令将丢掉所有来自 192.168.1.0/24 网络的网络包,而

# iptables -A INPUT -s 192.168.1.0/24 --dport 22 -j ACCEPT

将只允许通过端口 22 的流入流量。

例 3:将流入流量重定向到另一个目的地

假如你不仅使用你的 RHEL 7 机子来作为一个软件防火墙,而且还将它作为一个硬件防火墙,使得它位于两个不同的网络之间,那么在你的系统上 IP 转发一定已经被开启了。假如没有开启,你需要编辑 /etc/sysctl.conf 文件并将 net.ipv4.ip_forward 的值设为 1,即:

net.ipv4.ip_forward = 1

接着保存更改,关闭你的文本编辑器,并最终运行下面的命令来应用更改:

# sysctl -p /etc/sysctl.conf

例如,你可能在一个内部的机子上安装了一个打印机,它的 IP 地址为 192.168.0.10,CUPS 服务在端口 631 上进行监听(同时在你的打印服务器和你的防火墙上)。为了从防火墙另一边的客户端传递打印请求,你应该添加下面的 iptables 规则:

# iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 631 -j DNAT --to 192.168.0.10:631

请记住 iptables 会逐条地读取它的规则,所以请确保默认的策略或后面的规则不会重载上面例子中那些规则。

FirewallD 入门

firewalld 引入的一个变化是区域(zone) (注:翻译参考了 https://fedoraproject.org/wiki/FirewallD/zh-cn )。这个概念允许将网路划分为拥有不同信任级别的区域,由用户决定将设备和流量放置到哪个区域。

要获取活动的区域,使用:

# firewall-cmd --get-active-zones

在下面的例子中,public 区域是激活的,并且 enp0s3 接口被自动地分配到了这个区域。要查看有关一个特定区域的所有信息,可使用:

# firewall-cmd --zone=public --list-all

列出所有的 Firewalld 区域

列出所有的 Firewalld 区域

由于你可以在 RHEL 7 安全指南 中阅读到更多有关区域的知识,这里我们将仅列出一些特别的例子。

例 4:允许服务通过防火墙

要获取受支持的服务的列表,可以使用:

# firewall-cmd --get-services

列出所有受支持的服务

列出所有受支持的服务

要立刻生效且在随后重启后都可以让 http 和 https 网络流量通过防火墙,可以这样:

# firewall-cmd --zone=MyZone --add-service=http
# firewall-cmd --zone=MyZone --permanent --add-service=http
# firewall-cmd --zone=MyZone --add-service=https
# firewall-cmd --zone=MyZone --permanent --add-service=https
# firewall-cmd --reload

假如 -–zone 被忽略,则使用默认的区域(你可以使用 firewall-cmd –get-default-zone来查看)。

若要移除这些规则,可以在上面的命令中将 add 替换为 remove

例 5:IP 转发或端口转发

首先,你需要查看在目标区域中,伪装(masquerading)是否被开启:

# firewall-cmd --zone=MyZone --query-masquerade

在下面的图片中,我们可以看到对于外部区域,伪装已被开启,但对于公用区域则没有:

在 firewalld 中查看伪装状态

查看伪装状态

你可以为公共区域开启伪装:

# firewall-cmd --zone=public --add-masquerade

或者在外部区域中使用伪装。下面是使用 firewalld 来重复例 3 中的任务所需的命令:

# firewall-cmd --zone=external --add-forward-port=port=631:proto=tcp:toport=631:toaddr=192.168.0.10

不要忘了重新加载防火墙。

在 RHCSA 系列的 第九部分 你可以找到更深入的例子,在那篇文章中我们解释了如何允许或禁用通常被 web 服务器和 ftp 服务器使用的端口,以及在针对这两个服务所使用的默认端口被改变时,如何更改相应的规则。另外,你或许想参考 firewalld 的 wiki 来查看更深入的例子。

总结

在这篇文章中,我们已经解释了防火墙是什么,介绍了在 RHEL 7 中用来实现防火墙的几个可用的服务,并提供了可以帮助你入门防火墙的几个例子。假如你有任何的评论,建议或问题,请随意使用下面的评论框来让我们知晓。这里就事先感谢了!


via: http://www.tecmint.com/firewalld-vs-iptables-and-control-network-traffic-in-firewall/

作者:Gabriel Cánepa 译者:FSSlc 校对:wxy

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

在这篇文章中,我们将回顾如何在 RHEL7 中安装,更新和删除软件包。我们还将介绍如何使用 cron 进行任务自动化,并完成如何查找和监控系统日志文件,以及为什么这些技能是系统管理员必备技能。

Yum Package Management Cron Jobs Log Monitoring Linux

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

Search Package Information

搜索包信息

您可以定期用以下命令检查更新:

# yum check-update

上述命令将返回可以更新的所有已安装的软件包。在下图所示的例子中,只有 rhel-7-server-rpms 有可用更新:

Check For Package Updates

检查包更新

然后,您可以更新该包,

# yum update rhel-7-server-rpms

如果有几个包可以一同更新,可以使用 yum update 一次性更新所有的包。

当你知道一个可执行文件的名称,如 ps2pdf,但不知道那个包提供了它?你可以通过 yum whatprovides “*/[executable]”找到:

# yum whatprovides “*/ps2pdf”

Find Package Belongs to Which Package

查找文件属于哪个包

当删除包时,你可以使用 yum remove Package ,很简单吧?Yum 是一个完整而强大的包管理器。

# yum remove httpd

文本式 RPM 工具

RPM(又名 RPM 包管理器,原意是 RedHat 软件包管理器)也可用于安装或更新独立的rpm格式的软件包。

往往使用 -Uvh 表明如果这个包没有安装就安装它,如果已存在就尝试更新。这里-U表示更新、-v表示显示详细输出,用-h显示进度条。例如

# rpm -Uvh package.rpm

rpm 的另一个典型的使用方法是列出所有安装的软件包,

# rpm -qa

Query All RPM Packages

查询所有包

使用 Cron 调度任务

Linux 和 UNIX 类操作系统包括一个称为 Cron 的工具,允许你周期性调度任务(即命令或 shell 脚本)。cron 会每分钟定时检查 /var/spool/cron 目录中有在 /etc/passwd 帐户文件中指定用户名的文件。

执行命令时,命令输出是发送到该 crontab 的所有者(或者可以在 /etc/crontab,通过 MAILTO 环境变量中指定用户)。

crontab 文件(可以通过键入 crontab -e并按 Enter 键创建)的格式如下:

Crontab Entries

crontab条目

因此,如果我们想在每个月第二天上午2:15更新本地文件数据库(用于按名字或通配模式定位文件),我们需要添加以下 crontab 条目:

15 02 2 * * /bin/updatedb

以上的条目的意思是:”每年每月第二天的凌晨 2:15 运行 /bin/updatedb,无论是周几”,我想你也猜到了。星号作为通配符。

正如我们前面所提到的,添加一个 cron 任务后,你可以看到一个名为 root 的文件被添加在 /var/spool/cron。该文件列出了所有的 crond 守护进程应该运行的任务:

# ls -l /var/spool/cron

Check All Cron Jobs

检查所有cron任务

在上图中,显示当前用户的 crontab 可以使用 cat /var/spool/cron

# crontab -l

如果你需要在一个更精细的时间上运行的任务(例如,一天两次或每月三次),cron 也可以做到。

例如,每个月1号和15号运行 /my/script 并将输出导出到 /dev/null (丢弃输出),您可以添加如下两个crontab 条目:

01 00 1 * * /myscript > /dev/null 2>&1
01 00 15 * * /my/script > /dev/null 2>&1

不过为了简单,你可以将他们合并:

01 00 1,15 * *  /my/script > /dev/null 2>&1

跟着前面的例子,我们可以在每三个月的第一天的凌晨1:30运行 /my/other/script。

30 01 1 1,4,7,10 * /my/other/script > /dev/null 2>&1

但是当你必须每隔某分钟、小时、天或月来重复某个任务时,你可以通过所需的频率来划分正确的时间。以下与前一个 crontab 条目具有相同的意义:

30 01 1 */3 * /my/other/script > /dev/null 2>&1

或者也许你需要在一个固定的频率或系统启动后运行某个固定的工作,你可以使用下列五个字符串中的一个字符串来指示你想让你的任务计划工作的确切时间:

@reboot     仅系统启动时运行
@yearly     一年一次, 类似与 00 00 1 1 *
@monthly    一月一次, 类似与 00 00 1 * *
@weekly     一周一次, 类似与 00 00 * * 0
@daily      一天一次, 类似与 00 00 * * *
@hourly     一小时一次, 类似与 00 * * * *

定位和查看日志

系统日志存放(并轮转)在 /var/log 目录。根据 Linux 的文件系统层次标准(Linux Filesystem Hierarchy Standard),这个目录包括各种日志文件,并包含一些必要的子目录(如 audit、 httpd 或 samba ,如下图),并由相应的系统守护进程操作:

# ls /var/log

Linux Log Files Location

Linux 日志的位置

其他感兴趣的日志比如 dmesg(包括了所有内核层缓冲区的消息),secure(记录要求用户认证的连接请求),messages(系统级信息),和 wtmp(记录了所有用户的登录、登出)。

日志是非常重要的,它们让你可以看到任何时刻发生在你的系统的事情,以及已经过去的事情。他们是无价的工具,可以排错和监测一个 Linux 服务器,通常使用 tail -f 命令来实时显示正在发生和写入日志的事件。

举个例子,如果你想看你的内核相关的日志,你需要输入如下命令:

# tail -f /var/log/dmesg

同样的,如果你想查看你的 Web 服务器日志,你需要输入如下命令:

# tail -f /var/log/httpd/access.log

总结

如果你知道如何有效的管理包、调度任务、以及知道在哪寻找系统当前和过去操作的信息,你可以放松工作而不会总被吓到。我希望这篇文章能够帮你学习或回顾这些基础知识。

如果你有任何问题或意见,请使用下面的表单反馈给我们。


via: http://www.tecmint.com/yum-package-management-cron-job-scheduling-monitoring-linux-logs/

作者:Gabriel Cánepa 译者:xiqingongzi 校对:wxy

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