Linux 管理员 – 快速指南
Linux 管理员 – 快速指南
Linux 管理员 – CentOS 概述
CentOS 在商业级 Linux 发行版中是独一无二的,它忠实于 Linux 所建立的开源性质。第一个 Linux 内核是由赫尔辛基大学的一名大学生 (Linus Torvalds) 开发的,并结合了 Richard Stallman 创立和推广的 GNU 实用程序。CentOS 拥有经过验证的开源许可,可为当今的商业世界提供动力。
CentOS 已迅速成为世界上最多产的服务器平台之一。任何 Linux 管理员在求职的时候,都必然会遇到这样一句话:“CentOS Linux 经验优先”。从初创公司到财富 10 强科技巨头,CentOS 已跻身全球服务器操作系统的更高梯队之列。
CentOS 从其他 Linux 发行版中脱颖而出的原因在于 –
-
开源许可
-
Linux 专业人士的专用用户群
-
良好的硬件支持
-
坚如磐石的稳定性和可靠性
-
专注于安全和更新
-
严格遵守企业环境所需的软件打包标准
在开始课程之前,我们假设读者具有 Linux 和管理基础知识的基本知识,例如 –
-
什么是root用户?
-
root用户的权力
-
安全组和用户的基本概念
-
使用 Linux 终端模拟器的经验
-
基本网络概念
-
对解释性编程语言(Perl、Python、Ruby)的基本理解
-
网络协议,如 HTTP、LDAP、FTP、IMAP、SMTP
-
组成计算机操作系统的核心:文件系统、驱动程序和内核
CentOS Linux 基本命令
在学习 CentOS Linux 管理员的工具之前,重要的是要注意 Linux 管理命令行背后的哲学。
Linux 的设计基于 Unix 哲学,即“将小型、精确的工具链接在一起以简化更大的任务”。从根本上说,Linux 在很多时候都没有用于特定用途的大型单一用途应用程序。取而代之的是,有数百种基本实用程序组合在一起,可以提供强大的功能来高效地完成大型任务。
Linux 哲学的例子
例如,如果管理员想要系统上所有当前用户的列表,则可以使用以下链接命令来获取所有系统用户的列表。在执行命令时,系统上的用户按字母顺序列出。
[root@centosLocal centos]# cut /etc/passwd -d":" -f1 | sort abrt adm avahi bin centos chrony colord daemon dbus
使用以下命令可以轻松地将此列表导出到文本文件中。
[root@localhost /]# cut /etc/passwd -d ":" -f1 > system_users.txt [root@localhost /]# cat ./system_users.txt | sort | wc –l 40 [root@localhost /]#
也可以将用户列表与以后的导出进行比较。
[root@centosLocal centos]# cut /etc/passwd -d ":" -f1 > system_users002.txt && cat system_users002.txt | sort | wc -l 41 [root@centosLocal centos]# diff ./system_users.txt ./system_users002.txt evilBackdoor [root@centosLocal centos]#
使用这种链接小工具来完成更大任务的方法,制作执行这些命令的脚本比定期自动发送结果更简单。
每个 Linux 管理员都应该精通的基本命令是 –
在 Linux 世界中,管理员每天都使用过滤命令来解析日志、过滤命令输出并使用交互式 shell 脚本执行操作。如前所述,这些命令的强大之处在于它们能够通过称为管道的过程相互修改。
以下命令显示了 CentOS 主用户词典中有多少个以字母 a 开头的单词。
[root@centosLocal ~]# egrep '^a.*$' /usr/share/dict/words | wc -l 25192 [root@centosLocal ~]#
Linux Admin – 文件/文件夹管理
要介绍适用于 CentOS Linux 中的目录和文件的权限,让我们看看以下命令输出。
[centos@centosLocal etc]$ ls -ld /etc/yum* drwxr-xr-x. 6 root root 100 Dec 5 06:59 /etc/yum -rw-r--r--. 1 root root 970 Nov 15 08:30 /etc/yum.conf drwxr-xr-x. 2 root root 187 Nov 15 08:30 /etc/yum.repos.d
注意– 您将看到的三种主要对象类型是
-
“-“ – 普通文件的破折号
-
“d” – 用于目录
-
“l” – 用于符号链接
我们将关注每个目录和文件的三个输出块 –
- drwxr-xr-x : 根 : 根
- -rw-r–r– : 根 : 根
- drwxr-xr-x : 根 : 根
现在让我们分解一下,以更好地理解这些行 –
d | 表示对象类型是目录 |
rwx | 表示应用到所有者的目录权限 |
r-x | 表示应用于组的目录权限 |
r-x | 表示应用到世界的目录权限 |
root | 第一个实例,指示目录的所有者 |
root | 第二个实例,指示应用组权限的组 |
了解owner、group和world之间的区别很重要。不了解这一点可能会对托管 Internet 服务的服务器产生重大影响。
在给出实际示例之前,让我们首先了解适用于目录和文件的权限。
请查看下表,然后继续说明。
Octal | 象征性的 | 烫发。 | 目录 |
---|---|---|---|
1 | X | 执行 | 进入目录并访问文件 |
2 | 瓦 | 写 | 删除或修改目录中的文件 |
4 | r | 读 | 列出目录中的文件 |
注意– 当文件应该可以访问以在目录中读取时,通常应用读取和执行权限。否则,用户将难以处理这些文件。离开写入禁止将确保文件不能:重命名,删除,复制,或者已经修改权限。
对目录和文件应用权限
应用权限时,有两个概念需要理解 –
- 符号权限
- 八进制权限
本质上,每个都是相同的,但引用和分配文件权限的方式不同。如需快速指南,请研究并参考下表 –
读 | 写 | 执行 | |
---|---|---|---|
Octal | 4 | 2 | 1 |
Symbolic | r | 瓦 | X |
使用八进制方法分配权限时,请使用 3 字节数字,例如:760。数字 760 转换为:所有者:rwx;组:rw;其他(或世界)没有权限。
另一种情况:733 将转换为:所有者:rwx;组:wx; 其他:wx。
使用八进制方法的权限有一个缺点。无法修改现有权限集。只能重新分配对象的整个权限集。
现在您可能想知道,总是重新分配权限有什么问题?想象一个大型目录结构,例如生产网络服务器上的/var/www/。我们想递归地删除所有目录上的w或write 位以供其他人使用。因此,仅在安全措施需要时才强制主动添加它。如果我们重新分配整个权限集,我们将取消分配给每个子目录的所有其他自定义权限。
因此,它会给系统的管理员和用户带来问题。在某些时候,一个人(或多个人)需要重新分配所有通过为每个目录和对象重新分配整个权限集而被清除的自定义权限。
在这种情况下,我们希望使用 Symbolic 方法来修改权限 –
chmod -R o-w /var/www/
上面的命令不会“覆盖权限”,而是修改当前的权限集。所以习惯于使用最佳实践
- 八进制只分配权限
- 符号修改权限集
CentOS 管理员必须精通八进制和符号权限,因为权限对于数据和整个操作系统的完整性很重要。如果权限不正确,最终结果将是敏感数据,整个操作系统都会受到损害。
有了这些,让我们看看一些用于修改权限和对象所有者/成员的命令 –
- 修改
- chown
- chgrp
- 掩码
chmod :更改文件模式权限位
Command | 行动 |
---|---|
-c | 喜欢冗长,但只会报告所做的更改 |
-v | 详细,输出每个请求的诊断信息 |
-R | 递归地对文件和目录应用操作 |
chmod 将允许我们使用八进制或符号权限集更改目录和文件的权限。我们将使用它来修改我们的分配和上传目录。
chown :更改文件所有者和组
Command | 行动 |
---|---|
-c | 喜欢冗长,但只会报告所做的更改 |
-v | 详细,输出每个请求的诊断信息 |
-R | 递归地对文件和目录应用操作 |
chown可以修改拥有用户和对象组。但是,除非需要同时修改两者,否则通常将chgrp用于组。
chgrp :更改文件或目录的组所有权
Command | 行动 |
---|---|
-c | 喜欢冗长,但只会报告更改 |
-v | 详细,输出每个请求的诊断信息 |
-R | 递归地,应用对文件和目录的操作 |
chgrp 会将组所有者更改为提供的所有者。
现实世界的实践
让我们更改/var/www/students/ 中的所有子目录分配,因此拥有的组是学生组。然后将学生的根分配到教授组。稍后,让 Terry Thomas 博士成为学生目录的所有者,因为他的任务是负责学校所有的计算机科学学术界。
正如我们所见,在创建时,该目录非常原始。
[root@centosLocal ~]# ls -ld /var/www/students/ drwxr-xr-x. 4 root root 40 Jan 9 22:03 /var/www/students/ [root@centosLocal ~]# ls -l /var/www/students/ total 0 drwxr-xr-x. 2 root root 6 Jan 9 22:03 assignments drwxr-xr-x. 2 root root 6 Jan 9 22:03 uploads [root@centosLocal ~]#
作为管理员,我们永远不想将我们的root凭据提供给任何人。但同时,我们需要让用户有能力完成他们的工作。因此,让我们让 Terry Thomas 博士更多地控制文件结构并限制学生可以做的事情。
[root@centosLocal ~]# chown -R drterryt:professors /var/www/students/ [root@centosLocal ~]# ls -ld /var/www/students/ drwxr-xr-x. 4 drterryt professors 40 Jan 9 22:03 /var/www/students/ [root@centosLocal ~]# ls -ls /var/www/students/ total 0 0 drwxr-xr-x. 2 drterryt professors 6 Jan 9 22:03 assignments 0 drwxr-xr-x. 2 drterryt professors 6 Jan 9 22:03 uploads [root@centosLocal ~]#
现在,每个目录和子目录具有的所有者drterryt和所属组是教授。由于作业目录是供学生上交分配的作业,让我们从学生组中删除列出和修改文件的功能。
[root@centosLocal ~]# chgrp students /var/www/students/assignments/ && chmod 736 /var/www/students/assignments/ [root@centosLocal assignments]# ls -ld /var/www/students/assignments/ drwx-wxrw-. 2 drterryt students 44 Jan 9 23:14 /var/www/students/assignments/ [root@centosLocal assignments]#
学生可以将作业复制到作业目录。但是他们不能列出目录的内容、复制当前文件或修改分配目录中的文件。因此,它只允许学生提交已完成的作业。CentOS 文件系统将提供一个日期标记,指示何时提交作业。
作为分配目录所有者 –
[drterryt@centosLocal assignments]$ whoami drterryt [drterryt@centosLocal assignments]$ ls -ld /var/www/students/assignment drwx-wxrw-. 2 drterryt students 44 Jan 9 23:14 /var/www/students/assignments/ [drterryt@centosLocal assignments]$ ls -l /var/www/students/assignments/ total 4 -rw-r--r--. 1 adama students 0 Jan 9 23:14 myassign.txt -rw-r--r--. 1 tammyr students 16 Jan 9 23:18 terryt.txt [drterryt@centosLocal assignments]$
我们可以看到,目录所有者可以列出文件以及修改和删除文件。
umask 命令:在创建文件和目录权限时提供默认模式
umask是一个重要的命令,它在创建文件和目录权限时提供默认模式。
umask权限使用一元否定逻辑。
Permission | 手术 |
---|---|
0 | 读、写、执行 |
1 | 读和写 |
2 | 读取并执行 |
3 | 只读 |
4 | 读取并执行 |
5 | 只写 |
6 | 只执行 |
7 | 没有权限 |
[adama@centosLocal umask_tests]$ ls -l ./ -rw-r--r--. 1 adama students 0 Jan 10 00:27 myDir -rw-r--r--. 1 adama students 0 Jan 10 00:27 myFile.txt [adama@centosLocal umask_tests]$ whoami adama [adama@centosLocal umask_tests]$ umask 0022 [adama@centosLocal umask_tests]$
现在,让我们更改当前用户的umask,并创建一个新文件和目录。
[adama@centosLocal umask_tests]$ umask 077 [adama@centosLocal umask_tests]$ touch mynewfile.txt [adama@centosLocal umask_tests]$ mkdir myNewDir [adama@centosLocal umask_tests]$ ls -l total 0 -rw-r--r--. 1 adama students 0 Jan 10 00:27 myDir -rw-r--r--. 1 adama students 0 Jan 10 00:27 myFile.txt drwx------. 2 adama students 6 Jan 10 00:35 myNewDir -rw-------. 1 adama students 0 Jan 10 00:35 mynewfile.txt
正如我们所见,新创建的文件比以前更加严格。
用户的umask必须在任一中更改 –
- /etc/配置文件
- 〜/bashrc
[root@centosLocal centos]# su adama [adama@centosLocal centos]$ umask 0022 [adama@centosLocal centos]$
一般CentOS默认的umask就可以了。当我们遇到默认的0022 问题时,通常是当属于不同组的不同部门需要在项目上进行协作时。
这就是系统管理员的角色发挥作用的地方,以平衡 CentOS 操作系统的操作和设计。
Linux 管理员 – 用户管理
在讨论用户管理时,我们需要理解三个重要术语 –
- 用户
- 团体
- 权限
我们已经讨论了应用于文件和文件夹的深入权限。在本章中,让我们讨论用户和组。
CentOS 用户
在 CentOS 中,有两种类型的帐户 –
-
系统帐户– 用于守护程序或其他软件。
-
交互式帐户– 通常分配给用户以访问系统资源。
两种用户类型之间的主要区别是 –
-
守护进程使用系统帐户来访问文件和目录。这些通常不允许通过 shell 或物理控制台登录进行交互式登录。
-
最终用户使用交互式帐户从 shell 或物理控制台登录访问计算资源。
有了对用户的基本了解,现在让我们为会计部门的 Bob Jones 创建一个新用户。使用adduser命令添加新用户。
以下是一些adduser常用开关 –
Switch | 行动 |
---|---|
-c | 向用户帐户添加评论 |
-m | 如果不存在,则在默认位置创建用户主目录 |
-g | 分配用户的默认组 |
-n | 不为用户创建私有组,通常是用户名的组 |
-M | 不创建主目录 |
-s | 除 /bin/bash 之外的默认 shell |
-u | 指定 UID(否则由系统分配) |
-G | 将用户分配到的其他组 |
创建新用户时,请使用-c、-m、-g、-n开关,如下所示 –
[root@localhost Downloads]# useradd -c "Bob Jones Accounting Dept Manager" -m -g accounting -n bjones
现在让我们看看我们的新用户是否已经创建 –
[root@localhost Downloads]# id bjones (bjones) gid = 1001(accounting) groups = 1001(accounting) [root@localhost Downloads]# grep bjones /etc/passwd bjones:x:1001:1001:Bob Jones Accounting Dept Manager:/home/bjones:/bin/bash [root@localhost Downloads]#
现在我们需要使用 passwd 命令启用新帐户 –
[root@localhost Downloads]# passwd bjones Changing password for user bjones. New password: Retype new password: passwd: all authentication tokens updated successfully. [root@localhost Downloads]#
未启用用户帐户,允许用户登录系统。
禁用用户帐户
有多种方法可以禁用系统上的帐户。这些范围包括手动编辑 /etc/passwd 文件。或者甚至使用带有-l开关的passwd命令。这两种方法都有一个很大的缺点:如果用户有ssh访问权限并使用 RSA 密钥进行身份验证,他们仍然可以使用这种方法登录。
现在让我们使用chage命令,将密码到期日期更改为以前的日期。此外,最好在帐户上记下我们禁用它的原因。
[root@localhost Downloads]# chage -E 2005-10-01 bjones [root@localhost Downloads]# usermod -c "Disabled Account while Bob out of the country for five months" bjones [root@localhost Downloads]# grep bjones /etc/passwd bjones:x:1001:1001:Disabled Account while Bob out of the country for four months:/home/bjones:/bin/bash [root@localhost Downloads]#
管理群组
在 Linux 中管理组使管理员可以方便地将容器内的用户组合在一起,应用适用于所有组成员的权限集。例如,Accounting 中的所有用户可能需要访问相同的文件。因此,我们创建了一个会计组,添加了会计用户。
大多数情况下,任何需要特殊权限的事情都应该在一个组中完成。与仅对一个用户应用特殊权限相比,这种方法通常会节省时间。例如,Sally 负责报告,只有 Sally 需要访问某些文件才能进行报告。但是,如果有一天 Sally 生病了而 Bob 报告了呢?或者报告的需求在增长?创建组后,管理员只需执行一次。随着需求的变化或扩展应用添加用户。
以下是用于管理组的一些常用命令 –
- chgrp
- 群组添加
- 团体
- 用户模式
chgrp – 更改文件或目录的组所有权。
让我们为会计组的人创建一个目录来存储文件并为文件创建目录。
[root@localhost Downloads]# mkdir /home/accounting [root@localhost Downloads]# ls -ld /home/accounting drwxr-xr-x. 2 root root 6 Jan 13 10:18 /home/accounting [root@localhost Downloads]#
接下来,让我们将组所有权授予会计组。
[root@localhost Downloads]# chgrp -v accounting /home/accounting/ changed group of ‘/home/accounting/’ from root to accounting [root@localhost Downloads]# ls -ld /home/accounting/ drwxr-xr-x. 2 root accounting 6 Jan 13 10:18 /home/accounting/ [root@localhost Downloads]#
现在,accounting 组中的每个人都拥有对/home/accounting 的读取和执行权限。他们也需要写权限。
[root@localhost Downloads]# chmod g+w /home/accounting/ [root@localhost Downloads]# ls -ld /home/accounting/ drwxrwxr-x. 2 root accounting 6 Jan 13 10:18 /home/accounting/ [root@localhost Downloads]#
由于会计组可能会处理敏感文件,因此我们需要对other或world应用一些限制性权限。
[root@localhost Downloads]# chmod o-rx /home/accounting/ [root@localhost Downloads]# ls -ld /home/accounting/ drwxrwx---. 2 root accounting 6 Jan 13 10:18 /home/accounting/ [root@localhost Downloads]#
groupadd – 用于创建一个新组。
Switch | 行动 |
---|---|
-g | 指定组的 GID |
-K | 覆盖 /etc/login.defs 中 GID 的规范 |
-o | 允许覆盖非唯一组 ID 不允许 |
-p | 群组密码,允许用户自行激活 |
让我们创建一个名为 secret 的新组。我们将为该组添加密码,允许用户使用已知密码添加自己。
[root@localhost]# groupadd secret [root@localhost]# gpasswd secret Changing the password for group secret New Password: Re-enter new password: [root@localhost]# exit exit [centos@localhost ~]$ newgrp secret Password: [centos@localhost ~]$ groups secret wheel rdc [centos@localhost ~]$
实际上,组的密码并不经常使用。辅助组就足够了,在其他用户之间共享密码并不是一个很好的安全实践。
该组命令用于显示用户属于哪个组。在对当前用户进行一些更改后,我们将使用它。
usermod用于更新帐户属性。
以下是常见的usermod开关。
Switch | 行动 |
---|---|
-a | 附加,将用户添加到补充组,仅使用 -G 选项 |
-c | Comment,更新用户评论值 |
-d | 主目录,更新用户的主目录 |
-G | 分组、添加或删除次要用户组 |
-g | Group,用户的默认主组 |
[root@localhost]# groups centos centos : accounting secret [root@localhost]# [root@localhost]# usermod -a -G wheel centos [root@localhost]# groups centos centos : accounting wheel secret [root@localhost]#
Linux 管理员 – 配额管理
CentOS 磁盘配额可以同时启用;在超出磁盘容量之前提醒系统管理员并拒绝用户进一步访问磁盘存储。当磁盘已满时,根据磁盘上的内容,整个系统可能会突然停止,直到恢复为止。
在 CentOS Linux 中启用配额管理基本上是一个 4 步过程 –
-
步骤 1 – 在 /etc/fstab 中为组和用户启用配额管理。
-
步骤 2 – 重新挂载文件系统。
-
步骤 3 – 创建配额数据库并生成磁盘使用表。
-
步骤 4 – 分配配额策略。
在 /etc/fstab 中启用配额管理
首先,我们要备份我们的 /etc/fstab 文件 –
[root@centosLocal centos]# cp -r /etc/fstab ./
我们现在在当前工作目录中有我们已知的工作/etc/fstab的副本。
# # /etc/fstab # Created by anaconda on Sat Dec 17 02:44:51 2016 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/cl-root / xfs defaults 0 0 UUID = 4b9a40bc-9480-4 /boot xfs defaults 0 0 /dev/mapper/cl-home /home xfs defaults,usrquota,grpquota 0 0 /dev/mapper/cl-swap swap swap defaults 0 0
我们在/etc/fstab的选项部分对卷或标签进行了以下更改,以将配额应用于用户和组的位置。
- 用户配额
- 配额
如您所见,我们使用的是xfs文件系统。使用 xfs 时,涉及额外的手动步骤。/home与 / 在同一个磁盘上。进一步调查显示 / 设置为noquota,这是一个内核级挂载选项。我们必须重新配置我们的内核引导选项。
root@localhost rdc]# mount | grep ' / ' /dev/mapper/cl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota) [root@localhost rdc]#
为 XFS 文件系统重新配置内核引导选项
此步骤仅在两种情况下是必需的 –
- 当我们启用配额的磁盘/分区使用 xfs 文件系统时
- 当内核在引导时向 /etc/fstab 传递 noquota 参数时
步骤 1 – 备份 /etc/default/grub。
cp /etc/default/grub ~/
步骤 2 – 修改/etc/default/grub。
这是默认文件。
GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet" GRUB_DISABLE_RECOVERY="true"
我们要修改以下行 –
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
至
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv =cl/swap rhgb quiet rootflags=usrquota,grpquota"
注意– 我们逐字复制这些更改很重要。重新配置 grub.cfg 后,如果配置中出现任何错误,我们的系统将无法启动。请在非生产系统上尝试本教程的这一部分。
第 3 步– 备份您的工作 grub.cfg
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
新建一个grub.cfg
[root@localhost rdc]# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.10.0-514.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-514.el7.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-dbba7fa47f73457b96628ba8f3959bfd Found initrd image: /boot/initramfs-0-rescuedbba7fa47f73457b96628ba8f3959bfd.img done [root@localhost rdc]#
重启
[root@localhost rdc]#reboot
如果所有修改都是精确的,我们就不应该可以向xfs文件系统添加配额。
[rdc@localhost ~]$ mount | grep ' / ' /dev/mapper/cl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota) [rdc@localhost ~]$
我们已经通过了usrquota已经和grpquota通过grub的参数。
现在,再次编辑/etc/fstab以包含 / 因为/home在同一物理磁盘上。
/dev/mapper/cl-root/xfs defaults,usrquota,grpquota 0 0
现在让我们启用配额数据库。
[root@localhost rdc]# quotacheck -acfvugM
确保配额已启用。
[root@localhost rdc]# quotaon -ap group quota on / (/dev/mapper/cl-root) is on user quota on / (/dev/mapper/cl-root) is on group quota on /home (/dev/mapper/cl-home) is on user quota on /home (/dev/mapper/cl-home) is on [root@localhost rdc]#
重新挂载文件系统
如果分区或磁盘与主动启动的分区是分开的,我们可以在不重新启动的情况下重新挂载。如果在根目录 / 中启动的磁盘/分区上配置了配额,我们可能需要重新启动操作系统。强制重新挂载和应用更改,重新挂载文件系统的需要可能会有所不同。
[rdc@localhost ~]$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/cl-root 22447404 4081860 18365544 19% / devtmpfs 903448 0 903448 0% /dev tmpfs 919308 100 919208 1% /dev/shm tmpfs 919308 9180 910128 1% /run tmpfs 919308 0 919308 0% /sys/fs/cgroup /dev/sda2 1268736 176612 1092124 14% /boot /dev/mapper/cl-var 4872192 158024 4714168 4% /var /dev/mapper/cl-home 18475008 37284 18437724 1% /home tmpfs 183864 8 183856 1% /run/user/1000 [rdc@localhost ~]$
正如我们所见,LVM 卷正在使用中。所以重启很简单。这将重新挂载/home并将/etc/fstab配置更改加载到活动配置中。
创建配额数据库文件
CentOS 现在能够处理 /home 上的磁盘配额。要启用完全配额支持,我们必须运行quotacheck命令。
quotacheck 将创建两个文件 –
- 配额用户
- 配额组
这些用于存储启用配额的磁盘/分区的配额信息。
以下是常见的配额检查开关。
Switch | 行动 |
---|---|
-u | 检查用户配额 |
-g | 检查组配额 |
-c | 应该为每个具有启用配额的文件系统启用配额 |
-v | 显示详细输出 |
添加每个用户的配额限制
为此,我们将使用 edquota 命令,后跟用户名 –
[root@localhost rdc]# edquota centos Disk quotas for user centos (uid 1000): Filesystem blocks soft hard inodes soft hard /dev/mapper/cl-root 12 0 0 13 0 0 /dev/mapper/cl-home 4084 0 0 140 0 0
让我们看看每一列。
-
文件系统– 它是应用到的用户的文件系统配额
-
blocks – 用户当前在每个文件系统上使用的块数
-
soft – 为软限制设置块。软限制允许用户在给定的时间段内携带配额
-
hard – 为硬限制设置块。硬限制是允许的总配额
-
inodes – 用户当前使用的 inode 数
-
soft – 软 inode 限制
-
hard – 硬 inode 限制
以用户身份检查我们当前的配额 –
[centos@localhost ~]$ quota Disk quotas for user centos (uid 1000): Filesystem blocks quota limit grace files quota limit grace /dev/mapper/cl-home 6052604 56123456 61234568 475 0 0 [centos@localhost ~]$
以下是超出硬配额限制时向用户显示的错误。
[centos@localhost Downloads]$ cp CentOS-7-x86_64-LiveKDE-1611.iso.part ../Desktop/ cp: cannot create regular file ‘../Desktop/CentOS-7-x86_64-LiveKDE- 1611.iso.part’: Disk quota exceeded [centos@localhost Downloads]$
如我们所见,我们非常接近该用户的磁盘配额。让我们设置一个软限制警告。这样,用户将在配额限制到期之前提前收到通知。根据经验,您会在最终用户开始工作时收到他们的投诉,并且需要花费 45 分钟清理文件才能真正开始工作。
作为管理员,我们可以使用repquota命令检查配额使用情况。
[root@localhost Downloads]# repquota /home Block limits File limits User used soft hard grace used soft hard grace ---------------------------------------------------------------------------------------- root -- 0 0 0 3 0 0 centos -+ 6189824 56123456 61234568 541 520 540 6days [root@localhost Downloads]#
如我们所见,用户 centos 已超出其硬块配额,无法再使用/home上的任何磁盘空间。
-+ 表示已超出文件系统上的硬配额。
在计划配额时,有必要做一些数学运算。管理员需要知道的是:系统上有多少用户?在用户/组之间分配多少可用空间?文件系统上有多少字节组成一个块?
根据与可用磁盘空间相关的块定义配额。建议在文件系统上保留一个“安全”的可用空间缓冲区,在最坏的情况下将保留:同时超出所有配额。这尤其是在系统用于写入日志的分区上。
Systemd 服务启动和停止
systemd是在 Linux 上运行服务的新方式。systemd有一个被取代的sysvinit。systemd为 Linux 带来了更快的启动时间,现在是管理 Linux 服务的标准方式。虽然稳定,但systemd仍在不断发展。
systemd作为一个初始化系统,用于管理在 Linux 内核启动后需要更改状态的服务和守护进程。通过状态改变启动、停止、重新加载和调整服务状态被应用。
首先,让我们检查当前在我们的服务器上运行的 systemd 版本。
[centos@localhost ~]$ systemctl --version systemd 219 +PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN [centos@localhost ~]$
从 CentOS 版本 7 开始,在撰写本文时完全更新的 systemd 版本 219 是当前的稳定版本。
我们还可以使用systemd-analyze 分析上次服务器启动时间
[centos@localhost ~]$ systemd-analyze Startup finished in 1.580s (kernel) + 908ms (initrd) + 53.225s (userspace) = 55.713s [centos@localhost ~]$
当系统启动时间较慢时,我们可以使用systemd-analyze blame命令。
[centos@localhost ~]$ systemd-analyze blame 40.882s kdump.service 5.775s NetworkManager-wait-online.service 4.701s plymouth-quit-wait.service 3.586s postfix.service 3.121s systemd-udev-settle.service 2.649s tuned.service 1.848s libvirtd.service 1.437s network.service 875ms packagekit.service 855ms gdm.service 514ms firewalld.service 438ms rsyslog.service 436ms udisks2.service 398ms sshd.service 360ms boot.mount 336ms polkit.service 321ms accounts-daemon.service
使用systemd 时,理解单位的概念很重要。单位是systemd知道如何解释的资源。单位分为以下 12 种类型 –
- 。服务
- 。插座
- 。设备
- 。山
- .自动挂载
- 。交换
- 。目标
- 。小路
- .定时器
- .快照
- 。片
- 。范围
在大多数情况下,我们将使用 .service 作为单位目标。建议对其他类型做进一步研究。因为只有.service单元将适用于启动和停止systemd服务。
每个单元都在位于以下任一位置的文件中定义 –
-
/lib/systemd/system – 基本单元文件
-
/etc/systemd/system – 修改后的单元文件在运行时启动
使用 systemctl 管理服务
要使用systemd,我们需要非常熟悉systemctl命令。以下是systemctl最常见的命令行开关。
Switch | 行动 |
---|---|
-t | 服务或套接字等单位类型的逗号分隔值 |
-a | 显示所有加载的单位 |
–state | 显示处于定义状态的所有单元:负载、子、活动、非活动等。 |
-H | 远程执行操作。指定主机名或以@ 分隔的主机和用户。 |
基本 systemctl 用法
systemctl [operation] example: systemctl --state [servicename.service]
快速浏览一下我们机器上运行的所有服务。
[root@localhost rdc]# systemctl -t service UNIT LOAD ACTIVE SUB DESCRIPTION abrt-ccpp.service loaded active exited Install ABRT coredump hook abrt-oops.service loaded active running ABRT kernel log watcher abrt-xorg.service loaded active running ABRT Xorg log watcher abrtd.service loaded active running ABRT Automated Bug Reporting Tool accounts-daemon.service loaded active running Accounts Service alsa-state.service loaded active running Manage Sound Card State (restore and store) atd.service loaded active running Job spooling tools auditd.service loaded active running Security Auditing Service avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack blk-availability.service loaded active exited Availability of block devices bluetooth.service loaded active running Bluetooth service chronyd.service loaded active running NTP client/server
停止服务
首先,停止蓝牙服务。
[root@localhost]# systemctl stop bluetooth [root@localhost]# systemctl --all -t service | grep bluetooth bluetooth.service loaded inactive dead Bluetooth service [root@localhost]#
如我们所见,蓝牙服务现在处于非活动状态。
再次启动蓝牙服务。
[root@localhost]# systemctl start bluetooth [root@localhost]# systemctl --all -t service | grep bluetooth bluetooth.service loaded active running Bluetooth service [root@localhost]#
注意– 我们没有指定 bluetooth.service,因为.service是隐含的。考虑附加我们正在处理的服务的单元类型是一种很好的做法。因此,从这里开始,我们将使用.service扩展名来阐明我们正在处理服务单元操作。
可以对服务执行的主要操作是 –
Start | 启动服务 |
Stop | 停止服务 |
Reload | 重新加载服务的活动配置而无需停止它(如 system v init 中的 kill -HUP) |
Restart | 启动,然后停止服务 |
Enable | 在启动时启动服务 |
Disable | 停止服务在运行时自动启动 |
上述操作主要用于以下场景 –
Start | 启动已处于停止状态的服务。 |
Stop | 暂时关闭服务(例如,当必须停止服务以访问被服务锁定的文件时,如升级服务时) |
Reload | 当配置文件已被编辑并且我们希望在不停止服务的情况下应用新更改时。 |
Restart | 在与 reload 相同的场景中,但该服务不支持reload。 |
Enable | 当我们希望禁用的服务在启动时运行时。 |
Disable | 主要在需要停止服务时使用,但它在启动时启动。 |
检查服务的状态 –
[root@localhost]# systemctl status network.service network.service - LSB: Bring up/down networking Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled) Active: active (exited) since Sat 2017-01-14 04:43:48 EST; 1min 31s ago Docs: man:systemd-sysv-generator(8) Process: 923 ExecStart = /etc/rc.d/init.d/network start (code=exited, status = 0/SUCCESS) localhost.localdomain systemd[1]: Starting LSB: Bring up/down networking... localhost.localdomain network[923]: Bringing up loopback interface: [ OK ] localhost.localdomain systemd[1]: Started LSB: Bring up/down networking. [root@localhost]#
向我们展示网络服务的当前状态。如果我们想查看与网络相关的所有服务,我们可以使用 –
[root@localhost]# systemctl --all -t service | grep -i network network.service loaded active exited LSB: Bring up/ NetworkManager-wait-online.service loaded active exited Network Manager NetworkManager.service loaded active running Network Manager ntpd.service loaded inactive dead Network Time rhel-import-state.service loaded active exited Import network [root@localhost]#
对于那些熟悉管理服务的sysinit方法的人来说,过渡到systemd很重要。systemd是在 Linux 中启动和停止守护进程服务的新方法。
Linux Admin – 使用 systemctl 管理资源
systemctl是用于控制 systemd 的实用程序。systemctl 为 CentOS 管理员提供了在 systemd 上执行多种操作的能力,包括 –
- 配置 systemd 单元
- 获取 systemd untis 的状态
- 启动和停止服务
- 为运行时等启用/禁用 systemd 服务。
systemctl的命令语法非常基本,但可能会涉及开关和选项。我们将介绍管理 CentOS Linux 所需的systemctl最基本的功能。
Basic systemctl syntax: systemctl [OPTIONS] COMMAND [NAME]
以下是与systemctl 一起使用的常用命令–
- 开始
- 停止
- 重新开始
- 重新加载
- 地位
- 活跃
- 列表单位
- 使能够
- 禁用
- 猫
- 表演
我们已经讨论过使用 systemctl启动、停止、重新加载、重启、启用和禁用。那么让我们回顾一下剩下的常用命令。
地位
以最简单的形式,状态命令可用于查看整个系统状态 –
[root@localhost rdc]# systemctl status ● localhost.localdomain State: running Jobs: 0 queued Failed: 0 units Since: Thu 2017-01-19 19:14:37 EST; 4h 5min ago CGroup: / ├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 ├─user.slice │ └─user-1002.slice │ └─session-1.scope │ ├─2869 gdm-session-worker [pam/gdm-password] │ ├─2881 /usr/bin/gnome-keyring-daemon --daemonize --login │ ├─2888 gnome-session --session gnome-classic │ ├─2895 dbus-launch --sh-syntax --exit-with-session
以上输出已被压缩。在现实世界中systemctl status将输出大约 100 行树状进程状态。
假设我们要检查防火墙服务的状态 –
[root@localhost rdc]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2017-01-19 19:14:55 EST; 4h 12min ago Docs: man:firewalld(1) Main PID: 825 (firewalld) CGroup: /system.slice/firewalld.service └─825 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
如您所见,我们的防火墙服务当前处于活动状态,并且已经运行了 4 个多小时。
列表单位
list-units 命令允许我们列出某种类型的所有单位。让我们检查由systemd管理的套接字–
[root@localhost]# systemctl list-units --type=socket UNIT LOAD ACTIVE SUB DESCRIPTION avahi-daemon.socket loaded active running Avahi mDNS/DNS-SD Stack Activation Socket cups.socket loaded active running CUPS Printing Service Sockets dbus.socket loaded active running D-Bus System Message Bus Socket dm-event.socket loaded active listening Device-mapper event daemon FIFOs iscsid.socket loaded active listening Open-iSCSI iscsid Socket iscsiuio.socket loaded active listening Open-iSCSI iscsiuio Socket lvm2-lvmetad.socket loaded active running LVM2 metadata daemon socket lvm2-lvmpolld.socket loaded active listening LVM2 poll daemon socket rpcbind.socket loaded active listening RPCbind Server Activation Socket systemd-initctl.socket loaded active listening /dev/initctl Compatibility Named Pipe systemd-journald.socket loaded active running Journal Socket systemd-shutdownd.socket loaded active listening Delayed Shutdown Socket systemd-udevd-control.socket loaded active running udev Control Socket systemd-udevd-kernel.socket loaded active running udev Kernel Socket virtlockd.socket loaded active listening Virtual machine lock manager socket virtlogd.socket loaded active listening Virtual machine log manager socket
现在让我们检查当前正在运行的服务 –
[root@localhost rdc]# systemctl list-units --type=service UNIT LOAD ACTIVE SUB DESCRIPTION abrt-ccpp.service loaded active exited Install ABRT coredump hook abrt-oops.service loaded active running ABRT kernel log watcher abrt-xorg.service loaded active running ABRT Xorg log watcher abrtd.service loaded active running ABRT Automated Bug Reporting Tool accounts-daemon.service loaded active running Accounts Service alsa-state.service loaded active running Manage Sound Card State (restore and store) atd.service loaded active running Job spooling tools auditd.service loaded active running Security Auditing Service
活跃
的是活性命令是被设计为返回一个单元的状态信息的命令systemctl的一个例子。
[root@localhost rdc]# systemctl is-active ksm.service active
猫
cat是很少使用的命令之一。无需在 shell 中使用 cat 并键入单元文件的路径,只需使用systemctl cat 即可。
[root@localhost]# systemctl cat firewalld # /usr/lib/systemd/system/firewalld.service [Unit] Description=firewalld - dynamic firewall daemon Before=network.target Before=libvirtd.service Before = NetworkManager.service After=dbus.service After=polkit.service Conflicts=iptables.service ip6tables.service ebtables.service ipset.service Documentation=man:firewalld(1) [Service] EnvironmentFile = -/etc/sysconfig/firewalld ExecStart = /usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS ExecReload = /bin/kill -HUP $MAINPID # supress to log debug and error output also to /var/log/messages StandardOutput = null StandardError = null Type = dbus BusName = org.fedoraproject.FirewallD1 [Install] WantedBy = basic.target Alias = dbus-org.fedoraproject.FirewallD1.service [root@localhost]#
现在我们已经更详细地探讨了systemd和systemctl,让我们使用它们来管理cgroups或control groups 中的资源。
Linux Admin – 使用 crgoups 进行资源管理
cgroups或 Control Groups 是 Linux 内核的一项功能,允许管理员为服务和组分配或限制系统资源。
要列出正在运行的活动控制组,我们可以使用以下ps命令 –
[root@localhost]# ps xawf -eo pid,user,cgroup,args 8362 root - \_ [kworker/1:2] 1 root - /usr/lib/systemd/systemd --switched- root --system -- deserialize 21 507 root 7:cpuacct,cpu:/system.slice /usr/lib/systemd/systemd-journald 527 root 7:cpuacct,cpu:/system.slice /usr/sbin/lvmetad -f 540 root 7:cpuacct,cpu:/system.slice /usr/lib/systemd/systemd-udevd 715 root 7:cpuacct,cpu:/system.slice /sbin/auditd -n 731 root 7:cpuacct,cpu:/system.slice \_ /sbin/audispd 734 root 7:cpuacct,cpu:/system.slice \_ /usr/sbin/sedispatch 737 polkitd 7:cpuacct,cpu:/system.slice /usr/lib/polkit-1/polkitd --no-debug 738 rtkit 6:memory:/system.slice/rtki /usr/libexec/rtkit-daemon 740 dbus 7:cpuacct,cpu:/system.slice /bin/dbus-daemon --system -- address=systemd: --nofork --nopidfile --systemd-activation
从 CentOS 6.X 开始,资源管理已通过systemd init实现重新定义。在考虑服务的资源管理时,主要关注的是cgroups。cgroups在功能和简单性方面都与systemd一起进步。
cgroups 在资源管理中的目标是 – 没有一个服务可以让整个系统瘫痪。或者没有任何单个服务进程(可能是写得不好的 PHP 脚本)会消耗过多资源而削弱服务器功能。
cgroups允许对以下资源的单元进行资源控制 –
-
CPU – 限制与其他不那么密集的任务不重要的 CPU 密集型任务
-
内存– 限制服务可以消耗多少内存
-
磁盘– 限制磁盘 i/o
**CPU 时间:**
需要较少 CPU 优先级的任务可以具有自定义配置的 CPU 切片。
我们以下面两个服务为例。
礼貌的 CPU 服务 1
[root@localhost]# systemctl cat polite.service # /etc/systemd/system/polite.service [Unit] Description = Polite service limits CPU Slice and Memory After=remote-fs.target nss-lookup.target [Service] MemoryLimit = 1M ExecStart = /usr/bin/sha1sum /dev/zero ExecStop = /bin/kill -WINCH ${MAINPID} WantedBy=multi-user.target # /etc/systemd/system/polite.service.d/50-CPUShares.conf [Service] CPUShares = 1024 [root@localhost]#
邪恶的 CPU 服务 2
[root@localhost]# systemctl cat evil.service # /etc/systemd/system/evil.service [Unit] Description = I Eat You CPU After=remote-fs.target nss-lookup.target [Service] ExecStart = /usr/bin/md5sum /dev/zero ExecStop = /bin/kill -WINCH ${MAINPID} WantedBy=multi-user.target # /etc/systemd/system/evil.service.d/50-CPUShares.conf [Service] CPUShares = 1024 [root@localhost]#
让我们使用较低的 CPU 优先级设置礼让服务 –
systemctl set-property polite.service CPUShares = 20 /system.slice/polite.service 1 70.5 124.0K - - /system.slice/evil.service 1 99.5 304.0K - -
正如我们所见,在一段正常的系统空闲时间内,两个流氓进程仍在使用 CPU 周期。但是,具有较少时间片的一组是使用较少的 CPU 时间。考虑到这一点,我们可以看到使用较短的时间片将如何让基本任务更好地访问系统资源。
要为每个资源设置服务,set-property方法定义了以下参数 –
systemctl set-property name parameter=value
CPU Slices | CPU份额 |
Memory Limit | 内存限制 |
Soft Memory Limit | 内存软限制 |
Block IO Weight | 块IO权重 |
Block Device Limit (specified in /volume/path) ) | 块IO设备权重 |
Read IO | 块IO读取带宽 |
Disk Write IO | 块IO读取带宽 |
大多数情况下,服务会受到CPU 使用、内存限制和读/写 IO 的限制。
更改每个之后,需要重新加载 systemd 并重新启动服务 –
systemctl set-property foo.service CPUShares = 250 systemctl daemon-reload systemctl restart foo.service
在 CentOS Linux 中配置 CGroups
要在 CentOS Linux 中制作自定义 cgroup,我们需要先安装服务并配置它们。
步骤 1 – 安装 libcgroup(如果尚未安装)。
[root@localhost]# yum install libcgroup Package libcgroup-0.41-11.el7.x86_64 already installed and latest version Nothing to do [root@localhost]#
正如我们所见,CentOS 7 默认安装了 libcgroup 和Everything安装程序。使用最小安装程序需要我们安装libcgroup实用程序以及任何依赖项。
步骤 2 – 启动并启用 cgconfig 服务。
[root@localhost]# systemctl enable cgconfig Created symlink from /etc/systemd/system/sysinit.target.wants/cgconfig.service to /usr/lib/systemd/system/cgconfig.service. [root@localhost]# systemctl start cgconfig [root@localhost]# systemctl status cgconfig ● cgconfig.service - Control Group configuration service Loaded: loaded (/usr/lib/systemd/system/cgconfig.service; enabled; vendor preset: disabled) Active: active (exited) since Mon 2017-01-23 02:51:42 EST; 1min 21s ago Main PID: 4692 (code=exited, status = 0/SUCCESS) Memory: 0B CGroup: /system.slice/cgconfig.service Jan 23 02:51:42 localhost.localdomain systemd[1]: Starting Control Group configuration service... Jan 23 02:51:42 localhost.localdomain systemd[1]: Started Control Group configuration service. [root@localhost]#
Linux 管理员 – 进程管理
以下是进程管理中常用的命令——bg、fg、nohup、ps、pstree、top、kill、killall、free、uptime、nice。
使用流程
快速说明:Linux 中的进程 PID
在 Linux 中,每个正在运行的进程都有一个 PID 或进程 ID 号。这个PID是 CentOS 识别特定进程的方式。正如我们所讨论的,systemd是 CentOS 中第一个启动并被赋予 1 PID 的进程。
Pgrep用于获取给定进程名称的 Linux PID。
[root@CentOS]# pgrep systemd 1 [root@CentOS]#
如所见,pgrep命令返回 systemd 的当前 PID。
CentOS 中的基本 CentOS 进程和作业管理
在 Linux 中使用进程时,了解基本的前台进程和后台进程在命令行中是如何执行的很重要。
-
fg – 将进程置于前台
-
bg – 将进程移至后台
-
作业– 附加到外壳的当前进程列表
-
ctrl+z – Control + z 组合键使当前进程休眠
-
& − 在后台启动进程
让我们开始使用 shell 命令sleep。sleep会简单地按照它的名字进行,在定义的时间段内休眠:sleep。
[root@CentOS ~]$ jobs [root@CentOS ~]$ sleep 10 & [1] 12454 [root@CentOS ~]$ sleep 20 & [2] 12479 [root@CentOS ~]$ jobs [1]- Running sleep 10 & [2]+ Running sleep 20 & [cnetos@CentOS ~]$
现在,让我们将第一份工作带到前台 –
[root@CentOS ~]$ fg 1 sleep 10
如果您继续,您会注意到前台作业卡在您的外壳中。现在,让我们让进程进入睡眠状态,然后在后台重新启用它。
- 命中控制+z
- 键入:bg 1,将第一个作业发送到后台并启动它。
[root@CentOS ~]$ fg 1 sleep 20 ^Z [1]+ Stopped sleep 20 [root@CentOS ~]$ bg 1 [1]+ sleep 20 & [root@CentOS ~]$
诺哈普
当从 shell 或终端工作时,值得注意的是,默认情况下,所有附加到 shell 的进程和作业将在 shell 关闭或用户注销时终止。使用nohup 时,如果用户注销或关闭进程所连接的 shell,进程将继续运行。
[root@CentOS]# nohup ping www.google.com & [1] 27299 nohup: ignoring input and appending output to ‘nohup.out’ [root@CentOS]# pgrep ping 27299 [root@CentOS]# kill -KILL `pgrep ping` [1]+ Killed nohup ping www.google.com [root@CentOS rdc]# cat nohup.out PING www.google.com (216.58.193.68) 56(84) bytes of data. 64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 1 ttl = 128 time = 51.6 ms 64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 2 ttl = 128 time = 54.2 ms 64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 3 ttl = 128 time = 52.7 ms
ps 命令
该PS命令通常由管理员用于调查一个特定进程的快照。ps通常与grep一起使用,以过滤出要分析的特定进程。
[root@CentOS ~]$ ps axw | grep python 762 ? Ssl 0:01 /usr/bin/python -Es /usr/sbin/firewalld --nofork -nopid 1296 ? Ssl 0:00 /usr/bin/python -Es /usr/sbin/tuned -l -P 15550 pts/0 S+ 0:00 grep --color=auto python
在上面的命令中,我们看到了所有使用python解释器的进程。结果中还包括我们的 grep 命令,用于查找字符串python。
以下是与ps 一起使用的最常见的命令行开关。
Switch | 行动 |
---|---|
a | 仅排除当前用户的报告流程的限制 |
x | 显示未附加到 tty 或 shell 的进程 |
w | 格式化输出的宽输出显示 |
e | 命令后显示环境 |
-e | 选择所有进程 |
-o | 用户定义的格式化输出 |
-u | 显示特定用户的所有进程 |
-C | 按名称或进程 ID 显示所有进程 |
–sort | 按定义对进程进行排序 |
查看nobody用户正在使用的所有进程–
[root@CentOS ~]$ ps -u nobody PID TTY TIME CMD 1853 ? 00:00:00 dnsmasq [root@CentOS ~]$
查看有关firewalld进程的所有信息–
[root@CentOS ~]$ ps -wl -C firewalld F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 0 762 1 0 80 0 - 81786 poll_s ? 00:00:01 firewalld [root@CentOS ~]$
让我们看看哪些进程消耗的内存最多 –
[root@CentOS ~]$ ps aux --sort=-pmem | head -10 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND cnetos 6130 0.7 5.7 1344512 108364 ? Sl 02:16 0:29 /usr/bin/gnome-shell cnetos 6449 0.0 3.4 1375872 64440 ? Sl 02:16 0:00 /usr/libexec/evolution-calendar-factory root 5404 0.6 2.1 190256 39920 tty1 Ssl+ 02:15 0:27 /usr/bin/Xorg :0 -background none -noreset -audit 4 -verbose -auth /run/gdm/auth-for-gdm-iDefCt/database -seat seat0 -nolisten tcp vt1 cnetos 6296 0.0 1.7 1081944 32136 ? Sl 02:16 0:00 /usr/libexec/evolution/3.12/evolution-alarm-notify cnetos 6350 0.0 1.5 560728 29844 ? Sl 02:16 0:01 /usr/bin/prlsga cnetos 6158 0.0 1.4 1026956 28004 ? Sl 02:16 0:00 /usr/libexec/gnome-shell-calendar-server cnetos 6169 0.0 1.4 1120028 27576 ? Sl 02:16 0:00 /usr/libexec/evolution-source-registry root 762 0.0 1.4 327144 26724 ? Ssl 02:09 0:01 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid cnetos 6026 0.0 1.4 1090832 26376 ? Sl 02:16 0:00 /usr/libexec/gnome-settings-daemon [root@CentOS ~]$
按用户 centos 和格式查看所有进程,显示自定义输出 –
[cnetos@CentOS ~]$ ps -u cnetos -o pid,uname,comm PID USER COMMAND 5802 centos gnome-keyring-d 5812 cnetos gnome-session 5819 cnetos dbus-launch 5820 cnetos dbus-daemon 5888 cnetos gvfsd 5893 cnetos gvfsd-fuse 5980 cnetos ssh-agent 5996 cnetos at-spi-bus-laun
pstree 命令
pstree类似于ps但不经常使用。它以更整洁的树形方式显示进程。
[centos@CentOS ~]$ pstree systemd─┬─ModemManager───2*[{ModemManager}] ├─NetworkManager─┬─dhclient │ └─2*[{NetworkManager}] ├─2*[abrt-watch-log] ├─abrtd ├─accounts-daemon───2*[{accounts-daemon}] ├─alsactl ├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon} │ └─3*[{at-spi-bus-laun}] ├─at-spi2-registr───2*[{at-spi2-registr}] ├─atd ├─auditd─┬─audispd─┬─sedispatch │ │ └─{audispd} │ └─{auditd} ├─avahi-daemon───avahi-daemon ├─caribou───2*[{caribou}] ├─cgrulesengd ├─chronyd ├─colord───2*[{colord}] ├─crond ├─cupsd
pstree的总输出可以超过 100 行。通常,ps会提供更多有用的信息。
顶部命令
top是在 Linux 中解决性能问题时最常用的命令之一。它对于 Linux 中的实时统计和进程监控很有用。以下是从命令行启动时top的默认输出。
Tasks: 170 total, 1 running, 169 sleeping, 0 stopped, 0 zombie %Cpu(s): 2.3 us, 2.0 sy, 0.0 ni, 95.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1879668 total, 177020 free, 607544 used, 1095104 buff/cache KiB Swap: 3145724 total, 3145428 free, 296 used. 1034648 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5404 root 20 0 197832 48024 6744 S 1.3 2.6 1:13.22 Xorg 8013 centos 20 0 555316 23104 13140 S 1.0 1.2 0:14.89 gnome-terminal- 6339 centos 20 0 332336 6016 3248 S 0.3 0.3 0:23.71 prlcc 6351 centos 20 0 21044 1532 1292 S 0.3 0.1 0:02.66 prlshprof
运行 top 时使用的常用热键(当 top 在您的 shell 中运行时,按下该键可以访问热键)。
Command | 行动 |
---|---|
b | 启用/禁用顶部菜单上的粗体突出显示 |
z | 循环配色方案 |
l | 循环负载平均航向 |
m | 循环记忆平均航向 |
t | 任务信息标题 |
h | 帮助菜单 |
Shift+F | 自定义排序和显示字段 |
以下是top的常用命令行开关。
Command | 行动 |
---|---|
-o | 按列排序(可以在前面加上 – 或 + 以升序或降序排序) |
-u | 仅显示来自指定用户的进程 |
-d | 更新top的延迟时间 |
-O | 返回top可以应用排序的列列表 |
顶部的排序选项屏幕,使用Shift+F 显示。此屏幕允许自定义顶部显示和排序选项。
Fields Management for window 1:Def, whose current sort field is %MEM Navigate with Up/Dn, Right selects for move then <Enter> or Left commits, 'd' or <Space> toggles display, 's' sets sort. Use 'q' or <Esc> to end! * PID = Process Id TGID = Thread Group Id * USER = Effective User Name ENVIRON = Environment vars * PR = Priority vMj = Major Faults delta * NI = Nice Value vMn = Minor Faults delta * VIRT = Virtual Image (KiB) USED = Res+Swap Size (KiB) * RES = Resident Size (KiB) nsIPC = IPC namespace Inode * SHR = Shared Memory (KiB) nsMNT = MNT namespace Inode * S = Process Status nsNET = NET namespace Inode * %CPU = CPU Usage nsPID = PID namespace Inode * %MEM = Memory Usage (RES) nsUSER = USER namespace Inode * TIME+ = CPU Time, hundredths nsUTS = UTS namespace Inode * COMMAND = Command Name/Line PPID = Parent Process pid UID = Effective User Id
top,显示用户rdc的进程并按内存使用情况排序 –
PID USER %MEM PR NI VIRT RES SHR S %CPU TIME+ COMMAND 6130 rdc 6.2 20 0 1349592 117160 33232 S 0.0 1:09.34 gnome-shell 6449 rdc 3.4 20 0 1375872 64428 21400 S 0.0 0:00.43 evolution-calen 6296 rdc 1.7 20 0 1081944 32140 22596 S 0.0 0:00.40 evolution-alarm 6350 rdc 1.6 20 0 560728 29844 4256 S 0.0 0:10.16 prlsga 6281 rdc 1.5 20 0 1027176 28808 17680 S 0.0 0:00.78 nautilus 6158 rdc 1.5 20 0 1026956 28004 19072 S 0.0 0:00.20 gnome-shell-cal
显示有效的顶部字段(浓缩) –
[centos@CentOS ~]$ top -O PID PPID UID USER RUID RUSER SUID SUSER GID GROUP PGRP TTY TPGID
杀死命令
所述杀死命令用于杀死从通过它的PID命令外壳的方法。在杀死进程时,我们需要指定要发送的信号。该信号让内核知道我们想要如何结束进程。最常用的信号是 –
-
SIGTERM是隐含的,因为内核让进程知道它应该在安全的情况下立即停止。SIGTERM使进程有机会正常退出并执行安全退出操作。
-
SIGHUP大多数守护进程在发送SIGHUP时将重新启动。当对配置文件进行更改时,这通常用于进程。
-
SIGKILL因为SIGTERM相当于要求进程关闭。内核需要一个选项来结束不符合请求的进程。当进程挂起时,SIGKILL选项用于显式关闭进程。
对于关闭所有信号的列表,可以与发送杀了-l选项可以使用-
[root@CentOS]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX [root@CentOS rdc]#
使用SIGHUP重新启动系统。
[root@CentOS]# pgrep systemd 1 464 500 643 15071 [root@CentOS]# kill -HUP 1 [root@CentOS]# pgrep systemd 1 464 500 643 15196 15197 15198 [root@CentOS]#
pkill将允许管理员通过进程名称发送终止信号。
[root@CentOS]# pgrep ping 19450 [root@CentOS]# pkill -9 ping [root@CentOS]# pgrep ping [root@CentOS]#
killall将杀死所有进程。以 root 身份使用killall 时要小心,因为它会杀死所有用户的所有进程。
[root@CentOS]# killall chrome
免费命令
free是一个非常简单的命令,通常用于快速检查系统的内存。它显示已使用的物理内存和交换内存的总量。
[root@CentOS]# free total used free shared buff/cache available Mem: 1879668 526284 699796 10304 653588 1141412 Swap: 3145724 0 3145724 [root@CentOS]#
不错的命令
nice将允许管理员根据 CPU 使用情况设置进程的调度优先级。好处基本上是内核如何为进程或作业安排 CPU 时间片。默认情况下,假定进程被赋予对 CPU 资源的平等访问权限。
首先,让我们使用 top 检查当前正在运行的进程的 niceness。
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 28 root 39 19 0 0 0 S 0.0 0.0 0:00.17 khugepaged 690 root 39 19 16808 1396 1164 S 0.0 0.1 0:00.01 alsactl] 9598 rdc 39 19 980596 21904 10284 S 0.0 1.2 0:00.27 tracker-extract 9599 rdc 39 19 469876 9608 6980 S 0.0 0.5 0:00.04 tracker-miner-a 9609 rdc 39 19 636528 13172 8044 S 0.0 0.7 0:00.12 tracker-miner-f 9611 rdc 39 19 469620 8984 6496 S 0.0 0.5 0:00.02 tracker-miner-u 27 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd 637 rtkit 21 1 164648 1276 1068 S 0.0 0.1 0:00.11 rtkit-daemon 1 root 20 0 128096 6712 3964 S 0.3 0.4 0:03.57 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.50 ksoftirqd/0 7 root 20 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root 20 0 0 0 0 S 0.0 0.0 0:02.07 rcu_sched
我们要关注NI所描绘的NICE列。niceness 范围可以是 -20 到正 19 之间的任何值。-20 表示给定的最高优先级。
nohup nice --20 ping www.google.com &
雷尼斯
renice允许我们更改已经运行的进程的当前优先级。
renice 17 -p 30727
上面的命令会降低我们的ping进程命令的优先级。
Linux 管理员 – 防火墙设置
firewalld是 CentOS 上 iptables 的默认前端控制器。该firewalld前端拥有原的iptables两大优点-
-
使用易于配置和实现的区域抽象链和规则。
-
规则集是动态的,这意味着在更改和/或修改设置时有状态的连接不会中断。
请记住,firewalld是 iptables 的包装器 – 而不是替代品。虽然自定义 iptables 命令可以与firewalld一起使用,但建议使用 firewalld 以免破坏防火墙功能。
首先,让我们确保firewalld已启动并已启用。
[root@CentOS rdc]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2017-01-26 21:42:05 MST; 3h 46min ago Docs: man:firewalld(1) Main PID: 712 (firewalld) Memory: 34.7M CGroup: /system.slice/firewalld.service └─712 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
我们可以看到,firewalld 处于活动状态(在启动时启动)并且当前正在运行。如果不活动或未启动,我们可以使用 –
systemctl start firewalld && systemctl enable firewalld
现在我们已经配置了 firewalld 服务,让我们确保它可以运行。
[root@CentOS]# firewall-cmd --state running [root@CentOS]#
我们可以看到,firewalld 服务功能齐全。
Firewalld 致力于区域的概念。区域通过网络管理器应用于网络接口。我们将在配置网络时讨论这一点。但就目前而言,默认情况下,更改默认区域将更改保留在“默认区域”默认状态的任何网络适配器。
让我们快速浏览一下firewalld开箱即用的每个区域。
Sr.No. | 区域和描述 |
---|---|
1 |
drop 信任度低。所有传入的连接和数据包都被丢弃,只有传出连接才能通过 statefullness |
2 |
block 使用 icmp 消息回复传入连接,让发起方知道请求被禁止 |
3 |
public 所有网络都受到限制。但是,可以明确允许选定的传入连接 |
4 |
external 为 NAT 配置 firewalld。内部网络保持私有但可访问 |
5 |
dmz 只允许某些传入连接。用于 DMZ 隔离系统 |
6 |
work 默认情况下,假设系统处于安全的工作环境中,则信任网络上的更多计算机 |
7 |
hone 默认情况下,未过滤更多服务。假设系统位于家庭网络上,其中将使用 NFS、SAMBA 和 SSDP 等服务 |
8 |
trusted 网络上的所有机器都是可信的。允许大多数传入连接不受限制。这不适用于暴露于 Internet 的接口 |
最常用的区域是:public、drop、work 和 home。
将使用每个公共区域的一些场景是 –
-
public – 这是管理员最常用的区域。它将允许您应用自定义设置并遵守 LAN 上操作的 RFC 规范。
-
drop – 何时使用 drop 的一个很好的例子是在安全会议、公共 WiFi 或直接连接到 Internet 的接口上。drop 假设所有未经请求的请求都是恶意的,包括 ICMP 探测。所以任何状态外的请求都不会收到回复。drop 的缺点是它会在某些需要严格遵守 RFC 的情况下破坏应用程序的功能。
-
工作– 您在一个半安全的公司局域网上。所有交通都可以假设为中等安全。这意味着它不是 WiFi,我们可能有 IDS、IPS 和物理安全或 802.1x。我们也应该熟悉使用局域网的人。
-
家庭– 您在家庭局域网上。您个人对 LAN 上的每个系统和用户负责。您知道 LAN 上的每一台机器,而且没有一台机器受到损害。通常会提供新服务以供受信任的个人之间进行媒体共享,您不需要为安全起见花费额外的时间。
区域和网络接口在一对多级别上工作。一个网络接口一次只能应用一个区域。同时,一个区域可以同时应用于多个接口。
让我们看看哪些区域可用以及当前应用的区域是什么。
[root@CentOS]# firewall-cmd --get-zones work drop internal external trusted home dmz public block
[root@CentOS]# firewall-cmd --get-default-zone public [root@CentOS]#
准备好在 firewalld 中添加一些自定义规则了吗?
首先,让我们看看我们的盒子是什么样子,从外面看端口扫描仪。
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1 Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:36 MST Nmap scan report for centos.shared (10.211.55.1) Host is up (0.00046s latency). Not shown: 1023 filtered ports PORT STATE SERVICE 22/tcp open ssh Nmap done: 1 IP address (1 host up) scanned in 3.71 seconds bash-3.2#
让我们允许传入请求到端口 80。
首先,查看默认应用的区域。
[root@CentOs]# firewall-cmd --get-default-zone public [root@CentOS]#
然后,将允许端口 80 的规则设置为当前默认区域。
[root@CentOS]# firewall-cmd --zone=public --add-port = 80/tcp success [root@CentOS]#
现在,让我们在允许端口 80 连接后检查我们的框。
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1 Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:42 MST Nmap scan report for centos.shared (10.211.55.1) Host is up (0.00053s latency). Not shown: 1022 filtered ports PORT STATE SERVICE 22/tcp open ssh 80/tcp closed http Nmap done: 1 IP address (1 host up) scanned in 3.67 seconds bash-3.2#
它现在允许未经请求的流量达到 80。
让我们将默认区域设置为丢弃,看看端口扫描会发生什么。
[root@CentOS]# firewall-cmd --set-default-zone=drop success [root@CentOS]# firewall-cmd --get-default-zone drop [root@CentOs]#
现在让我们在更安全的区域中扫描具有网络接口的主机。
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1 Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:50 MST Nmap scan report for centos.shared (10.211.55.1) Host is up (0.00094s latency). All 1024 scanned ports on centos.shared (10.211.55.1) are filtered Nmap done: 1 IP address (1 host up) scanned in 12.61 seconds bash-3.2#
现在,一切都是从外部过滤的。
如下所示,主机在drop时甚至不会响应 ICMP ping 请求。
bash-3.2# ping 10.211.55.1 PING 10.211.55.1 (10.211.55.1): 56 data bytes Request timeout for icmp_seq 0 Request timeout for icmp_seq 1 Request timeout for icmp_seq 2
让我们再次将默认区域设置为public。
[root@CentOs]# firewall-cmd --set-default-zone=public success [root@CentOS]# firewall-cmd --get-default-zone public [root@CentOS]#
现在让我们在public 中检查我们当前的过滤规则集。
[root@CentOS]# firewall-cmd --zone=public --list-all public (active) target: default icmp-block-inversion: no interfaces: enp0s5 sources: services: dhcpv6-client ssh ports: 80/tcp protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules: [root@CentOS rdc]#
根据配置,我们的端口 80 过滤规则仅在运行配置的上下文中。这意味着一旦系统重新启动或 firewalld 服务重新启动,我们的规则将被丢弃。
我们很快就会配置一个httpd守护进程,所以让我们的更改持久化 –
[root@CentOS]# firewall-cmd --zone=public --add-port=80/tcp --permanent success [root@CentOS]# systemctl restart firewalld [root@CentOS]#
现在,我们在公共区域中的端口 80 规则在重新启动和服务重新启动后保持不变。
以下是与firewall-cmd一起应用的常用 firewalld 命令。
Command | 行动 |
---|---|
firewall-cmd –get-zones | 列出可以应用于接口的所有区域 |
firewall-cmd —status | 返回 firewalld 服务的当前状态 |
firewall-cmd –get-default-zone | 获取当前默认区域 |
firewall-cmd –set-default-zone=<zone> | 将默认区域设置为当前上下文 |
firewall-cmd –get-active-zone | 获取应用于接口的上下文中的当前区域 |
firewall-cmd –zone=<zone> –list-all | 列出提供区域的配置 |
firewall-cmd –zone=<zone> –addport=<port/transport protocol> | 将端口规则应用于区域过滤器 |
–permanent | 对区域进行持久更改。标志与修改命令内联使用 |
这些是管理和配置firewalld的基本概念。
在更复杂的网络场景中,在 CentOS 中配置基于主机的防火墙服务可能是一项复杂的任务。在 CentOS中firewalld和 iptables 的高级使用和配置可能需要一整个教程。但是,我们已经介绍了足以完成大多数日常任务的基础知识。
在 CentOS Linux 中配置 PHP
PHP 是当今使用最多的 Web 语言之一。在 CentOS 上安装LAMP堆栈是每个系统管理员都需要执行的事情,很可能是迟早的事。
传统的 LAMP 堆栈由 (L)inux (A)pache (M)ySQL (P)HP 组成。
CentOS 上的LAMP 堆栈包含三个主要组件–
- 网络服务器
- Web 开发平台/语言
- 数据库服务器
注– 术语LAMP 堆栈还可以包括以下技术:PostgreSQL、MariaDB、Perl、Python、Ruby、NGINX Webserver。
在本教程中,我们将坚持使用CentOS GNU Linux的传统LAMP 堆栈:Apache Web 服务器、MySQL 数据库服务器和 PHP。
我们实际上将使用 MariaDB。MySQL 配置文件、数据库和表对 MariaDB 是透明的。MariaDB 现在包含在标准 CentOS 存储库中,而不是 MySQL。这是由于许可和开源合规性的限制,因为 Oracle 已经接管了 MySQL 的开发。
我们需要做的第一件事是安装Apache。
[root@CentOS]# yum install httpd Loaded plugins: fastestmirror, langpacks base | 3.6 kB 00:00:00 extras | 3.4 kB 00:00:00 updates | 3.4 kB 00:00:00 extras/7/x86_64/primary_d | 121 kB 00:00:00 Loading mirror speeds from cached hostfile * base: mirror.sigmanet.com * extras: linux.mirrors.es.net * updates: mirror.eboundhost.com Resolving Dependencies --> Running transaction check ---> Package httpd.x86_64 0:2.4.6-45.el7.centos will be installed --> Processing Dependency: httpd-tools = 2.4.6-45.el7.centos for package: httpd-2.4.6-45.el7.centos.x86_64 --> Processing Dependency: /etc/mime.types for package: httpd-2.4.645.el7.centos.x86_64 --> Running transaction check ---> Package httpd-tools.x86_64 0:2.4.6-45.el7.centos will be installed ---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed --> Finished Dependency Resolution Installed: httpd.x86_64 0:2.4.6-45.el7.centos Dependency Installed: httpd-tools.x86_64 0:2.4.6-45.el7.centos mailcap.noarch 0:2.1.41-2.el7 Complete! [root@CentOS]#
让我们配置httpd服务。
[root@CentOS]# systemctl start httpd && systemctl enable httpd
现在,让我们确保可以通过 firewalld 访问 Web 服务器。
bash-3.2# nmap -sS -p 1-1024 -T 5 -sV 10.211.55.1 Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-28 02:00 MST Nmap scan report for centos.shared (10.211.55.1) Host is up (0.00054s latency). Not shown: 1022 filtered ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.6.1 (protocol 2.0) 80/tcp open http Apache httpd 2.4.6 ((CentOS)) Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 10.82 seconds bash-3.2#
正如您通过 nmap 服务探针所看到的,Apache 网络服务器正在侦听和响应 CentOS 主机上的请求。
安装 MySQL 数据库服务器
[root@CentOS rdc]# yum install mariadb-server.x86_64 && yum install mariadb- devel.x86_64 && mariadb.x86_64 && mariadb-libs.x86_64
我们正在为 MariaDB 安装以下存储库包 –
mariadb-server.x86_64
主要的 MariaDB 服务器守护程序包。
mariadb-devel.x86_64
文件需要从与 MySQL/MariaDB 兼容的源代码编译。
mariadb.x86_64
MariaDB 客户端实用程序,用于从命令行管理 MariaDB 服务器。
mariadb-libs.x86_64
使用 MySQL/MariaDB 支持编译的其他应用程序可能需要的 MariaDB 公共库。
现在,让我们启动并启用 MariaDB 服务。
[root@CentOS]# systemctl start mariadb [root@CentOS]# systemctl enable mariadb
注意– 与 Apache 不同,我们不会通过基于主机的防火墙(firewalld)启用与 MariaDB 的连接。使用数据库服务器时,除非特别需要远程套接字访问,否则仅允许本地套接字连接被认为是最佳安全实践。
让我们确保 MariaDB 服务器正在接受连接。
[root@CentOS#] netstat -lnt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN [root@CentOS rdc]#
正如我们所见,MariaDB 正在侦听端口 3306 tcp。我们将让我们的基于主机的防火墙 (firewalld) 阻止传入连接到端口 3306。
安装和配置 PHP
[root@CentOS#] yum install php.x86_64 && php-common.x86_64 && php-mysql.x86_64 && php-mysqlnd.x86_64 && php-pdo.x86_64 && php-soap.x86_64 && php-xml.x86_64
我建议安装以下 php 包以实现通用兼容性 –
- php-common.x86_64
- php-mysql.x86_64
- php-mysqlnd.x86_64
- php-pdo.x86_64
- php-soap.x86_64
- php-xml.x86_64
[root@CentOS]# yum install -y php-common.x86_64 php-mysql.x86_64 php- mysqlnd.x86_64 php-pdo.x86_64 php-soap.x86_64 php-xml.x86_64
这是我们位于 /var/www/html/ Apache webroot 中的简单 php 文件
[root@CentOS]# cat /var/www/html/index.php <html> <head> <title>PHP Test Page</title> </head> <body> PHP Install <?php echo "We are now running PHP on GNU Centos Linux!<br />" ?> </body> </html> [root@CentOS]#
让我们将页面的所属组更改为运行 http 守护程序的系统用户。
[root@CentOS]# chgrp httpd /var/www/html/index.php && chmod g+rx /var/www/html/index.php ---
当通过 ncat 手动请求时。
bash-3.2# ncat 10.211.55.1 80 GET / index.php HTTP/1.1 200 OK Date: Sat, 28 Jan 2017 12:06:02 GMT Server: Apache/2.4.6 (CentOS) PHP/5.4.16 X-Powered-By: PHP/5.4.16 Content-Length: 137 Connection: close Content-Type: text/html; charset=UTF-8 <html> <head> <title>PHP Test Page</title> </head> <body> PHP Install We are now running PHP on GNU Centos Linux!<br /> </body> </html> bash-3.2#
PHP 和 LAMP 是非常流行的网络编程技术。作为 CentOS 管理员,LAMP 的安装和配置肯定会出现在您的需求列表中。易于使用的 CentOS 软件包在从源代码编译 Apache、MySQL 和 PHP 方面花费了大量工作。
使用 CentOS Linux 设置 Python
Python 是一种广泛使用的解释性语言,它为 Linux(和其他操作系统)上的脚本应用程序编码领域带来了专业性。Perl 曾经是行业标准,而 Python 在许多方面都超越了 Perl。
Python 与 Perl 的一些优势是 –
-
精细化快速推进
-
语言标准的库
-
在语言定义中考虑了代码的可读性
-
从 GUI 支持到 Web 开发的许多专业框架
Python 可以做 Perl 可以做的任何事情,而且在很多情况下可以做得更好。尽管 Perl 仍然在 Linux 管理员的工具箱中占有一席之地,但学习 Python 作为技能集是一个不错的选择。
Python 的最大缺点有时与其优势有关。在历史上,Python 最初是为了教授编程而设计的。有时,其“易于阅读”和“以正确的方式做事”的核心基础在编写简单代码时可能会导致不必要的复杂性。此外,它的标准库在从 2.X 版过渡到 3.X 版时也出现了问题。
Python 脚本实际上用于 CentOS 的核心,用于对操作系统功能至关重要的功能。因此,将我们的开发 Python 环境与 CentOS 的核心 Python 环境隔离是很重要的。
对于初学者来说,目前有两种版本的Python:Python的2.X和Python的3.X。
这两个阶段仍在积极生产中,尽管版本 2.X 正在迅速接近折旧(并且已经持续了几年)。之所以有两个活跃版本的 Python,基本上是为了修复 2.X 版本的缺点。这需要以无法支持某些 2.X 版脚本的方式重做 3.X 版的某些核心功能。
基本上,克服这种转变的最佳方法是:针对 3.X 进行开发并跟上最新的 2.X 版本的遗留脚本。目前,CentOS 7.X 依赖于 2.X 版的半最新版本。
在撰写本文时,Python 的最新版本是:3.4.6和2.7.13。
不要让这混淆或得出 Python 的任何结论。设置 Python 环境非常简单。使用 Python 框架和库,这项任务实际上很容易完成。
在设置我们的 Python 环境之前,我们需要一个健全的环境。首先,让我们确保我们的 CentOS 安装已完全更新并安装一些构建实用程序。
步骤 1 – 更新 CentOS。
[root@CentOS]# yum -y update
步骤 2 – 安装构建实用程序。
[root@CentOS]# yum -y groupinstall "development tools"
第 3 步– 安装一些需要的软件包。
[root@CentOS]# yum install -y zlib-dev openssl-devel sqlite-devel bip2-devel
现在我们需要从源代码安装当前的 Python 2.X 和 3.X。
- 下载压缩档案
- 提取文件
- 编译源代码
让我们首先在/usr/src/ 中为每个 Python 安装创建一个构建目录
[root@CentOS]# mkdir -p /usr/src/pythonSource
现在让我们为每个下载源 tarball –
[root@CentOS]# wget https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz [root@CentOS]# wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz
现在我们需要从存档中提取每个。
步骤 1 – 安装 xz-libs 并解压缩 tarball。
[root@CentOS]# yum install xz-libs [root@CentOS python3]# xz -d ./*.xz [root@CentOS python3]# ls Python-2.7.13.tar Python-3.6.0.tar [root@CentOS python3]#
步骤 2 – 从其 tarball 中解压缩每个安装程序。
[root@CentOS]# tar -xvf ./Python-2.7.13.tar [root@CentOS]# tar -xvf ./Python-3.6.0.tar
步骤 3 – 进入每个目录并运行配置脚本。
[root@CentOS]# ./configure --prefix=/usr/local root@CentOS]# make altinstall
注意– 请务必使用altinstall而不是安装。这将使 CentOS 和 Python 的开发版本分开。否则,您可能会破坏 CentOS 的功能。
您现在将看到编译过程开始。喝杯咖啡,休息 15 分钟直到完成。由于我们安装了 Python 所需的所有依赖项,因此编译过程应该不会出错。
让我们确保我们安装了最新的 2.X 版本的 Python。
[root@CentOS Python-2.7.13]# /usr/local/bin/python2.7 -V Python 2.7.13 [root@CentOS Python-2.7.13]#
注意– 您需要为指向我们的 Python 2.X 开发环境的 shebang 行添加前缀。
[root@CentOS Python-2.7.13]# cat ver.py #!/usr/local/bin/python2.7 import sys print(sys.version)
[root@CentOS Python-2.7.13]# ./ver.py 2.7.13 (default, Jan 29 2017, 02:24:08) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
就像那样,我们为 2.X 和 3.X 版本安装了单独的 Python。从这里开始,我们可以使用 each 和pip和virtualenv等实用程序来进一步减轻管理 Python 环境和安装包的负担。
在 CentOS Linux 上配置 Ruby
Ruby 是一种非常适合 Web 开发和 Linux 管理的语言。Ruby 提供了之前讨论的所有语言中的许多优点:PHP、Python 和 Perl。
要安装 Ruby,最好通过rbenv引导,它允许管理员轻松安装和管理 Ruby 环境。
安装 Ruby 的另一种方法是使用 Ruby 的标准 CentOS 软件包。建议使用rbenv方法及其所有优点。CentOS 软件包对于不熟悉 Ruby 的人来说会更容易。
首先,让我们为 rbenv 安装程序获取一些所需的依赖项。
- git-core
- zlib
- zlib-devel
- gcc-c++
- 修补
- 阅读线
- 阅读线开发
- libyaml-devel
- libffi-devel
- openssl-devel
- 制作
- bzzip2
- 自动配置
- 汽车制造商
- 库工具
- 野牛
- 卷曲
- sqlite-devel
根据安装 CentOS 时选择的选项和角色,这些软件包中的大多数可能已经安装。最好安装我们不确定的所有内容,因为这可以减少安装需要依赖项的软件包时的麻烦。
[root@CentOS]# yum -y install git-core zlib zlib-devel gcc-c++ patch readline readline-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison curl sqlite-devel
方法 1:rbenv 用于动态 Ruby 开发环境
现在作为将使用Ruby的用户–
[rdc@CentOS ~]$ git clone https://github.com/rbenv/rbenv.git [rdc@CentOS ~]$ https://github.com/rbenv/ruby-build.git
ruby-build 将为rbenv提供安装功能–
注意– 我们需要在运行install.sh之前切换到 root 或管理用户
[rdc@CentOS ruby-build]$ cd ~/ruby-build [rdc@CentOS ruby-build]# ./install.sh
让我们为 rbenv 设置我们的 shell,并确保我们已经安装了正确的选项。
[rdc@CentOS ~]$ source ~/rbenv/rbenv.d/exec/gem-rehash.bash [rdc@CentOS ruby-build]$ ~/rbenv/bin/rbenv rbenv 1.1.0-2-g4f8925a Usage: rbenv <command> [<args>]
一些有用的 rbenv 命令是 –
Commands | 行动 |
---|---|
local | 设置或显示本地应用程序特定的 Ruby 版本 |
global | 设置或显示全局 Ruby 版本 |
shell | 设置或显示特定于 shell 的 Ruby 版本 |
install | 使用 ruby-build 安装 Ruby 版本 |
uninstall | 卸载特定的 Ruby 版本 |
rehash | Rehashes rbenv shims(在安装可执行文件后运行它) |
version | 显示当前的 Ruby 版本及其来源 |
versions | 列出 rbenv 可用的所有 Ruby 版本 |
which | 显示可执行文件的完整路径 |
whence | 列出包含给定可执行文件的所有 Ruby 版本 |
现在让我们安装 Ruby –
[rdc@CentOS bin]$ ~/rbenv/bin/rbenv install -v 2.2.1
编译完成后 –
[rdc@CentOS ~]$ ./ruby -v ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux] [rdc@CentOS ~]$
我们现在有一个工作 Ruby 环境,其中包含 Ruby 2.X 分支的更新和工作版本。
方法 2:从 CentOS 软件包安装 Ruby
这是最简单的方法。但是,它可能会受到 CentOS 打包的版本和 gem 的限制。对于严肃的开发工作,强烈建议使用rbenv方法来安装 Ruby。
安装 Ruby、所需的开发包和一些常见的 gem。
[root@CentOS rdc]# yum install -y ruby.x86_64 ruby-devel.x86_64 ruby- libs.x86_64 ruby-gem-json.x86_64 rubygem-rake.noarch
不幸的是,我们留下了有些过时的 Ruby 版本。
[root@CentOS rdc]# ruby -v ruby 2.0.0p648 (2015-12-16) [x86_64-linux] [root@CentOS rdc]#
Linux 管理员 – 为 CentOS Linux 设置 Perl
Perl已经存在很长时间了。它最初被设计为一种用于解析文本文件的报告语言。随着越来越流行,Perl 添加了模块支持或 CPAN、套接字、线程和其他功能强大的脚本语言所需的功能。
Perl 相对于 PHP、Python 或 Ruby 的最大优势是:它以最小的麻烦完成任务。Perl 的这种哲学并不总是意味着它以正确的方式完成工作。但是,对于 Linux 上的管理任务,Perl 被认为是脚本语言的首选。
Perl 相对于 Python 或 Ruby 的一些优势是 –
-
强大的文本处理
-
Perl 使编写脚本变得又快又脏(通常 Perl 脚本比 Python 或 Ruby 中的等价脚本要短几十行)
-
Perl 可以做任何事情(几乎)
Perl 的一些缺点是 –
-
语法可能令人困惑
-
Perl 中的编码风格可能是独一无二的,并且会使协作陷入困境
-
Perl 并不是真正的面向对象
-
通常,在使用 Perl 时,没有太多考虑标准化和最佳实践。
在决定使用 Perl、Python 还是 PHP 时;应该问以下问题 –
- 此应用程序是否需要版本控制?
- 其他人是否需要修改代码?
- 其他人是否需要使用此应用程序?
- 此应用程序是否会在另一台机器或 CPU 架构上使用?
如果以上所有问题的答案都是“否”,Perl 是一个不错的选择,并且可能会在最终结果方面加快速度。
提到这一点,让我们配置 CentOS 服务器以使用最新版本的 Perl。
在安装 Perl 之前,我们需要了解对 Perl 的支持。正式地,Perl 仅作为最后两个稳定版本得到支持。所以,我们要确保我们的开发环境与 CentOS 版本隔离。
隔离的原因是:如果有人向 CentOS 社区发布 Perl 工具,它很可能会被修改为在 CentOS 附带的 Perl 上工作。但是,我们也希望为开发目的安装最新版本。与 Python 一样,CentOS 提供的 Perl 专注于可靠性而不是前沿。
让我们在 CentOS 7 上检查我们当前的 Perl 版本。
[root@CentOS]# perl -v This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi
我们目前正在运行 Perl 5.16.3。撰写本文时的最新版本是:perl-5.24.0
我们肯定希望升级我们的版本,以便能够在我们的代码中使用最新的 Perl 模块。幸运的是,有一个很好的工具可以维护 Perl 环境并保持我们的 CentOS 版本的 Perl 隔离。它被称为perlbrew。
让我们安装 Perl Brew。
[root@CentOS]# curl -L https://install.perlbrew.pl | bash % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 170 100 170 0 0 396 0 --:--:-- --:--:-- --:--:-- 397 100 1247 100 1247 0 0 1929 0 --:--:-- --:--:-- --:--:-- 1929
现在我们已经安装了 Perl Brew,让我们为最新版本的 Perl 创建一个环境。
首先,我们需要当前安装的 Perl 版本来引导 perlbrew 安装。因此,让我们从 CentOS 存储库中获取一些所需的 Perl 模块。
注意– 当可用时,我们总是希望在 CentOS Perl 安装中使用 CentOS Perl 模块而不是 CPAN。
步骤 1 – 安装 CentOS Perl Make::Maker 模块。
[root@CentOS]# yum -y install perl-ExtUtils-MakeMaker.noarch
第 2 步– 安装最新版本的 perl。
[root@CentOS build]# source ~/perl5/perlbrew/etc/bashrc [root@CentOS build]# perlbrew install -n -j4 --threads perl-5.24.1
我们为 Perl 安装选择的选项是 –
-
n – 没有测试
-
j4 – 为安装例程并行执行 4 个线程(我们使用的是四核 CPU)
-
线程– 启用对 Perl 的线程支持
安装成功后,让我们切换到最新的 Perl 环境。
[root@CentOS]# ~/perl5/perlbrew/bin/perlbrew use perl-5.24.1 A sub-shell is launched with perl-5.24.1 as the activated perl. Run 'exit' to finish it. [root@CentOS]# perl -v This is perl 5, version 24, subversion 1 (v5.24.1) built for x86_64-linuxthread-multi (with 1 registered patch, see perl -V for more detail) Copyright 1987-2017, Larry Wall Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5 source kit. Complete documentation for Perl, including FAQ lists, should be found on this system using "man perl" or "perldoc perl". If you have access to the Internet, point your browser at http://www.perl.org/, the Perl Home Page. [root@CentOS]#
在我们的 perlbrew 环境的上下文中运行的简单 perl 脚本打印 perl 版本 –
[root@CentOS]# cat ./ver.pl #!/usr/bin/perl print $^V . "\n";
[root@CentOS]# perl ./ver.pl v5.24.1 [root@CentOS]#
安装 perl 后,我们可以使用 perl brew 的 cpanm 加载 cpan 模块 –
[root@CentOS]# perl-brew install-cpanm
现在让我们使用cpanm安装程序在 perl brew 中使用我们当前的 Perl 版本 5.24.1 制作 LWP 模块。
步骤 1 – 切换到我们当前 Perl 版本的上下文。
[root@CentOS ~]# ~/perl5/perlbrew/bin/perlbrew use perl-5.24.1
使用 perl-5.24.1 作为激活的 perl 启动子 shell。运行“退出”以完成它。
[root@CentOS ~]#
步骤 2 – 安装 LWP 用户代理 Perl 模块。
[root@CentOS ~]# ~/perl5/perlbrew/bin/cpanm -i LWP::UserAgent
第 3 步– 现在让我们使用新的 CPAN 模块测试我们的 Perl 环境。
[root@CentOS ~]# cat ./get_header.pl #!/usr/bin/perl use LWP; my $browser = LWP::UserAgent->new(); my $response = $browser->get("http://www.slcc.edu/"); unless(!$response->is_success) { print $response->header("Server"); } [root@CentOS ~]# perl ./get_header.pl Microsoft-IIS/8.5 [root@CentOS ~]#
你有它!Perl Brew 使隔离 perl 环境变得轻而易举,随着 Perl 的发展,可以将其视为最佳实践。
安装和配置 Open LDAP
LDAP 称为轻量级目录访问协议,是一种用于访问企业内从目录中得知的 X.500 服务容器的协议。熟悉 Windows Server 管理的人可以认为 LDAP 在本质上与 Active Directory 非常相似。它甚至是将 Windows 工作站交织到 OpenLDAP CentOS 企业中的广泛使用的概念。另一方面,CentOS Linux 工作站可以共享资源并参与 Windows 域中的基本功能。
在 CentOS 上部署 LDAP 作为目录服务器代理、目录系统代理或 DSA(这些首字母缩写词都是一个且相同)类似于使用带有 NDS 的目录树结构的旧 Novell Netware 安装。
LDAP 简史
LDAP 基本上是作为一种访问具有企业资源的 X.500 目录的有效方式而创建的。X.500 和 LDAP 具有相同的特征并且非常相似,以至于 LDAP 客户端可以通过一些帮助程序访问 X.500 目录。而 LDAP 也有自己的名为slapd的目录服务器。LDAP和DAP之间的主要区别在于,轻量级版本旨在通过 TCP 进行操作。
而DAP使用完整的 OSI 模型。随着 Internet、TCP/IP 和以太网在当今网络中的出现,在特定传统计算模型之外使用 DAP 和本机 X.500 企业目录的目录服务植入很少见。
CentOS Linux 的 openldap 使用的主要组件是 –
openldap | LDAP 支持库 |
---|---|
openldap-server | LDAP 服务器 |
openldap-clients | LDAP 客户端实用程序 |
openldap-devel | OpenLDAP 的开发库 |
compay-openldap | OpenLDAP 共享库 |
slapd | OpenLDAP 的目录服务器守护进程 |
slurpd | 用于跨企业域的 LDAP 复制 |
注意– 命名您的企业时,最佳做法是使用.local TLD。在隔离在线和内部域基础结构时,使用.net或.com可能会导致困难。想象一下在内部使用acme.com进行外部和内部运营的公司的额外工作。因此,拥有名为acme.com或acme.net 的Internet 资源可能是明智之举。然后,本地网络企业资源被描述为acme.local。这将需要配置 DNS 记录,但将付出简单、雄辩和安全的代价。
在 CentOS 上安装 Open LDAP
从YUM安装 openldap、openldap-servers、openldap-clients 和 migrationstools 。
[root@localhost]# yum -y install openldap openldap-servers openldap-clients migration tools Loaded plugins: fastestmirror, langpacks updates | 3.4 kB 00:00:00 updates/7/x86_64/primary_db | 2.2 MB 00:00:05 Determining fastest mirrors (1/2): extras/7/x86_64/primary_db | 121 kB 00:00:01 (2/2): base/7/x86_64/primary_db | 5.6 MB 00:00:16 Package openldap-2.4.40-13.el7.x86_64 already installed and latest version Resolving Dependencies --> Running transaction check ---> Package openldap-clients.x86_64 0:2.4.40-13.el7 will be installed ---> Package openldap-servers.x86_64 0:2.4.40-13.el7 will be installed --> Finished Dependency Resolution base/7/x86_64/group_gz | 155 kB 00:00:00 Dependencies Resolved =============================================================================== =============================================================================== Package Arch Version Repository Size =============================================================================== =============================================================================== Installing: openldap-clients x86_64 2.4.40-13.el7 base 188 k openldap-servers x86_64 2.4.40-13.el7 base 2.1 M Transaction Summary =============================================================================== =============================================================================== Install 2 Packages Total download size: 2.3 M Installed size: 5.3 M Downloading packages: Installed: openldap-clients.x86_64 0:2.4.40-13.el7 openldap-servers.x86_64 0:2.4.40-13.el7 Complete! [root@localhost]#
现在,让我们启动并启用slapd服务 –
[root@centos]# systemctl start slapd [root@centos]# systemctl enable slapd
此时,让我们确保在/etc/openldap 中有我们的openldap结构。
root@localhost]# ls /etc/openldap/ certs check_password.conf ldap.conf schema slapd.d [root@localhost]#
然后确保我们的 slapd 服务正在运行。
root@centos]# netstat -antup | grep slapd tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 1641/slapd tcp6 0 0 :::389 :::* LISTEN 1641/slapd [root@centos]#
接下来,让我们配置我们的Open LDAP安装。
确保我们的系统ldap用户已经创建。
[root@localhost]# id ldap uid=55(ldap) gid=55(ldap) groups=55(ldap) [root@localhost]#
生成我们的 LDAP 凭据。
[root@localhost]# slappasswd New password: Re-enter new password: {SSHA}20RSyjVv6S6r43DFPeJgASDLlLoSU8g.a10 [root@localhost]#
我们需要保存 slappasswd 的输出。
配置开放 LDAP
步骤 1 – 为域配置 LDAP 并添加管理用户。
首先,我们要设置我们的 openLDAP 环境。以下是与ldapmodify命令一起使用的模板。
dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=vmnet,dc=local dn: olcDatabase = {2}hdb,cn=config changetype: modify replace: olcRootDN olcRootDN: cn=ldapadm,dc=vmnet,dc=local dn: olcDatabase = {2}hdb,cn=config changetype: modify replace: olcRootPW olcRootPW: <output from slap
使用 ldapmodify 命令更改:/etc/openldap/slapd.d/cn=config/olcDatabase = {1}monitor.ldif。
[root@localhost]# ldapmodify -Y EXTERNAL -H ldapi:/// -f /home/rdc/Documents/db.ldif SASL/EXTERNAL authentication started SASL username: gidNumber = 0+uidNumber = 0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "olcDatabase = {2}hdb,cn=config" modifying entry "olcDatabase = {2}hdb,cn=config" modifying entry "olcDatabase = {2}hdb,cn=config" [root@localhost cn=config]#
让我们检查修改后的 LDAP 配置。
root@linux1 ~]# vi /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif [root@centos]# cat /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif # AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify. # CRC32 a163f14c dn: olcDatabase = {2}hdb objectClass: olcDatabaseConfig objectClass: olcHdbConfig olcDatabase: {2}hdb olcDbDirectory: /var/lib/ldap olcDbIndex: objectClass eq,pres olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub structuralObjectClass: olcHdbConfig entryUUID: 1bd9aa2a-8516-1036-934b-f7eac1189139 creatorsName: cn=config createTimestamp: 20170212022422Z olcSuffix: dc=vmnet,dc=local olcRootDN: cn=ldapadm,dc=vmnet,dc=local olcRootPW:: e1NTSEF1bUVyb1VzZTRjc2dkYVdGaDY0T0k = entryCSN: 20170215204423.726622Z#000000#000#000000 modifiersName: gidNumber = 0+uidNumber = 0,cn=peercred,cn=external,cn=auth modifyTimestamp: 20170215204423Z [root@centos]#
如您所见,我们的 LDAP 企业修改成功。
接下来,我们要为 OpenLDAP 创建一个自签名 ssl 证书。这将确保企业服务器和客户端之间的通信安全。
步骤 2 – 为 OpenLDAP 创建自签名证书。
我们将使用openssl创建自签名 ssl 证书。转到下一章,使用 openssl 创建 LDAP SSL 证书,了解如何保护与 OpenLDAP 的通信。然后当配置 ssl 证书时,我们将完成我们的 OpenLDAP 企业配置。
步骤 3 – 配置 OpenLDAP 以使用带证书的安全通信。
使用以下信息在vim 中创建一个certs.ldif文件–
dn: cn=config changetype: modify replace: olcTLSCertificateFile olcTLSCertificateFile: /etc/openldap/certs/yourGeneratedCertFile.pem dn: cn=config changetype: modify replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/openldap/certs/youGeneratedKeyFile.pem
接下来,再次使用ldapmodify命令将更改合并到 OpenLDAP 配置中。
[root@centos rdc]# ldapmodify -Y EXTERNAL -H ldapi:/// -f certs.ldif SASL/EXTERNAL authentication started SASL username: gidNumber = 0+uidNumber = 0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "cn=config" [root@centos]#
最后,让我们测试一下我们的 OpenLADP 配置。
[root@centos]# slaptest -u config file testing succeeded [root@centos]#
步骤 4 – 设置 slapd 数据库。
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG && chown ldap:ldap /var/lib/ldap/*
更新 OpenLDAP 架构。
添加余弦和 nis LDAP 模式。
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
最后,创建企业模式并将其添加到当前的 OpenLDAP 配置中。
以下是一个名为 vmnet 的域。本地使用名为ldapadm的 LDAP 管理员。
dn: dc=vmnet,dc=local dc: vmnet objectClass: top objectClass: domain dn: cn=ldapadm ,dc=vmnet,dc=local objectClass: organizationalRole cn: ldapadm description: LDAP Manager dn: ou = People,dc=vmnet,dc=local objectClass: organizationalUnit ou: People dn: ou = Group,dc=vmnet,dc=local objectClass: organizationalUnit ou: Group
最后,将其导入到当前的 OpenLDAP 模式中。
[root@centos]# ldapadd -x -W -D "cn=ldapadm,dc=vmnet,dc=local" -f ./base.ldif Enter LDAP Password: adding new entry "dc=vmnet,dc=local" adding new entry "cn=ldapadm ,dc=vmnet,dc=local" adding new entry "ou=People,dc=vmnet,dc=local" adding new entry "ou=Group,dc=vmnet,dc=local" [root@centos]#
步骤 5 – 设置 OpenLDAP 企业用户。
打开vim或您喜欢的文本编辑器并复制以下格式。这是为“vmnet.local”LDAP 域上名为“entacct”的用户设置的。
dn: uid=entacct,ou=People,dc=vmnet,dc=local objectClass: top objectClass: account objectClass: posixAccount objectClass: shadowAccount cn: entacct uid: entacct uidNumber: 9999 gidNumber: 100 homeDirectory: /home/enyacct loginShell: /bin/bash gecos: Enterprise User Account 001 userPassword: {crypt}x shadowLastChange: 17058 shadowMin: 0 shadowMax: 99999 shadowWarning: 7
现在将保存的上述文件导入 OpenLdap 架构。
[root@centos]# ldapadd -x -W -D "cn=ldapadm,dc=vmnet,dc=local" -f entuser.ldif 输入 LDAP 密码: 添加新条目“uid=entacct,ou=People,dc=vmnet,dc=local” [root@centos]#
在用户可以访问 LDAP Enterprise 之前,我们需要按如下方式分配密码 –
ldappasswd -s password123 -W -D "cn=ldapadm,dc=entacct,dc=local" -x "uid=entacct ,ou=People,dc=vmnet,dc=local"
-s指定用户的密码
-x是应用密码更新的用户名
-D是针对 LDAP 架构进行身份验证的 *专有名称”。
最后,在登录企业帐户之前,让我们检查一下我们的OpenLDAP条目。
[root@centos rdc]# ldapsearch -x cn=entacct -b dc=vmnet,dc=local # extended LDIF # # LDAPv3 # base <dc=vmnet,dc=local> with scope subtree # filter: cn=entacct # requesting: ALL # # entacct, People, vmnet.local dn: uid=entacct,ou=People,dc=vmnet,dc=local objectClass: top objectClass: account objectClass: posixAccount objectClass: shadowAccount cn: entacct uid: entacct uidNumber: 9999 gidNumber: 100 homeDirectory: /home/enyacct loginShell: /bin/bash gecos: Enterprise User Account 001 userPassword:: e2NyeXB0fXg= shadowLastChange: 17058 shadowMin: 0 shadowMax: 99999 shadowWarning: 7
将/etc/passwd和/etc/groups 之类的内容转换为 OpenLDAP 身份验证需要使用迁移工具。这些都包含在迁移工具包中。然后,安装到/usr/share/migrationtools。
[root@centos openldap-servers]# ls -l /usr/share/migrationtools/ total 128 -rwxr-xr-x. 1 root root 2652 Jun 9 2014 migrate_aliases.pl -rwxr-xr-x. 1 root root 2950 Jun 9 2014 migrate_all_netinfo_offline.sh -rwxr-xr-x. 1 root root 2946 Jun 9 2014 migrate_all_netinfo_online.sh -rwxr-xr-x. 1 root root 3011 Jun 9 2014 migrate_all_nis_offline.sh -rwxr-xr-x. 1 root root 3006 Jun 9 2014 migrate_all_nis_online.sh -rwxr-xr-x. 1 root root 3164 Jun 9 2014 migrate_all_nisplus_offline.sh -rwxr-xr-x. 1 root root 3146 Jun 9 2014 migrate_all_nisplus_online.sh -rwxr-xr-x. 1 root root 5267 Jun 9 2014 migrate_all_offline.sh -rwxr-xr-x. 1 root root 7468 Jun 9 2014 migrate_all_online.sh -rwxr-xr-x. 1 root root 3278 Jun 9 2014 migrate_automount.pl -rwxr-xr-x. 1 root root 2608 Jun 9 2014 migrate_base.pl
步骤 6 – 最后,我们需要允许访问 slapd 服务,以便它可以为请求提供服务。
firewall-cmd --permanent --add-service=ldap firewall-cmd --reload
配置 LDAP 客户端访问
配置 LDAP 客户端访问需要客户端上有以下包:openldap、open-ldap 客户端和 nss_ldap。
为客户端系统配置 LDAP 身份验证要容易一些。
步骤 1 – 安装依赖包 –
# yum install -y openldap-clients nss-pam-ldapd
步骤 2 – 使用authconfig配置 LDAP 身份验证。
authconfig --enableldap --enableldapauth --ldapserver=10.25.0.1 -- ldapbasedn="dc=vmnet,dc=local" --enablemkhomedir --update
步骤 3 – 重新启动 nslcd 服务。
systemctl restart nslcd
Linux 管理员 – 创建 SSL 证书
TLS 和 SSL 背景
TLS 是套接字层安全的新标准,继 SSL 之后。TLS 提供了更好的加密标准以及其他推进 SSL 的安全性和协议包装器功能。通常,术语 TLS 和 SSL 可以互换使用。然而,作为一名专业的 CentOS 管理员,重要的是要注意区分每一个的差异和历史。
SSL升级到 3.0 版。SSL 是作为 Netscape 的行业标准开发和推广的。Netscape 被 AOL(90 年代流行的 ISP,也称为美国在线)收购后,AOL 从未真正推动对 SSL 的安全改进所需的更改。
在 3.1 版中,SSL技术进入开放系统标准并更改为TLS。由于SSL 的版权仍归 AOL 所有,因此创造了一个新术语 – TLS – 传输层安全性。因此,重要的是要承认TLS实际上与SSL不同。特别是,由于较旧的SSL技术存在已知的安全问题,有些技术今天被认为已经过时。
注意– 本教程在谈到 3.1 及更高版本的技术时将使用术语TLS。然后SSL进行评论时,特定于SSL技术的3.0及以下。
SSL 与 TLS 版本控制
下表显示了 TLS 和 SSL 版本控制如何相互关联。我听到一些人谈到SSL 3.2 版。但是,他们可能从阅读博客中获得了术语。作为专业的管理员,我们总是希望使用标准术语。因此,虽然说SSL应该是对过去技术的参考。简单的事情可以让 CentOS 求职者看起来像一个经验丰富的 CS 专业。
TLS | 安全证书 |
---|---|
– | 3.0 |
1.0 | 3.1 |
1.1 | 3.2 |
1.2 | 3.3 |
TLS执行对当今 Internet 用户很重要的两个主要功能:一,它验证一方是谁,称为身份验证。第二,它在传输层为缺乏此本机功能的上层协议(ftp、http、电子邮件协议等)提供端到端加密。
首先,验证一方是谁,并且作为端到端加密对安全性很重要。如果消费者与未经授权的网站建立了加密连接,则财务数据仍然存在风险。这是每个网络钓鱼站点都不会拥有的:正确签名的 TLS 证书,用于验证网站运营商是他们声称来自受信任 CA 的人。
只有两种方法可以避免没有正确签名的证书:诱使用户信任 Web 浏览器以获得自签名证书,或者希望用户不精通技术并且不知道受信任证书的重要性权威(或 CA)。
在本教程中,我们将使用所谓的自签名证书。这意味着,如果没有在访问该网站的每个 Web 浏览器中明确授予此证书的受信任状态,则会显示错误,阻止用户访问该网站。然后,它会让用户在访问带有自签名证书的站点之前跳过一些操作。请记住,为了安全起见,这是一件好事。
安装和配置 openssl
openssl是 TLS 开源实现的标准。openssl用于 Linux、BSD 发行版、OS X 等系统,甚至支持 Windows。
openssl 很重要,因为它提供了传输层安全性,并为开发人员抽象了身份验证和端到端加密的详细编程。这就是为什么几乎每个使用 TLS 的开源应用程序都使用 openssl。它也默认安装在每个现代版本的 Linux 上。
默认情况下,openssl应该至少从版本 5 开始安装在 CentOS 上。为了保证,让我们尝试通过 YUM安装openssl。只需运行安装,因为 YUM 足够智能,可以让我们知道是否已经安装了软件包。如果我们出于兼容性原因运行旧版本的 CentOS,执行yum -y install将确保针对半最近的 heart-bleed 漏洞更新 openssl。
运行安装程序时,发现openssl实际上有更新。
[root@centos]# yum -y install openssl Resolving Dependencies --> Running transaction check ---> Package openssl.x86_64 1:1.0.1e-60.el7 will be updated ---> Package openssl.x86_64 1:1.0.1e-60.el7_3.1 will be an update --> Processing Dependency: openssl-libs(x86-64) = 1:1.0.1e-60.el7_3.1 for package: 1:openssl-1.0.1e-60.el7_3.1.x86_64 --> Running transaction check ---> Package openssl-libs.x86_64 1:1.0.1e-60.el7 will be updated ---> Package openssl-libs.x86_64 1:1.0.1e-60.el7_3.1 will be an update --> Finished Dependency Resolution Dependencies Resolved =============================================================================== =============================================================================== Package Arch Version Repository Size =============================================================================== =============================================================================== Updating: openssl x86_64 1:1.0.1e-60.el7_3.1 updates 713 k Updating for dependencies:
为 OpenLDAP 创建自签名证书
这是一种为我们之前的OpenLDAP安装创建自签名的方法。
创建自签名 OpenLDAP 证书。
openssl req -new -x509 -nodes -out /etc/openldap/certs/myldaplocal.pem -keyout /etc/openldap/certs/myldaplocal.pem -days 365 [root@centos]# openssl req -new -x509 -nodes -out /etc/openldap/certs/vmnet.pem -keyout /etc/openldap/certs/vmnet.pem -days 365 Generating a 2048 bit RSA private key .............................................+++ ................................................+++ writing new private key to '/etc/openldap/certs/vmnet.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:US State or Province Name (full name) []:Califonia Locality Name (eg, city) [Default City]:LA Organization Name (eg, company) [Default Company Ltd]:vmnet Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:centos Email Address []:[email protected] [root@centos]#
现在我们的 OpenLDAP 证书应该放在/etc/openldap/certs/
[root@centos]# ls /etc/openldap/certs/*.pem /etc/openldap/certs/vmnetcert.pem /etc/openldap/certs/vmnetkey.pem [root@centos]#
如您所见,我们在/etc/openldap/certs/目录中安装了证书和密钥。最后,我们需要更改每个权限,因为它们当前由 root 用户拥有。
[root@centos]# chown -R ldap:ldap /etc/openldap/certs/*.pem [root@centos]# ls -ld /etc/openldap/certs/*.pem -rw-r--r--. 1 ldap ldap 1395 Feb 20 10:00 /etc/openldap/certs/vmnetcert.pem -rw-r--r--. 1 ldap ldap 1704 Feb 20 10:00 /etc/openldap/certs/vmnetkey.pem [root@centos]#
为 Apache Web 服务器创建自签名证书
在本教程中,我们假设已经安装了 Apache。我们确实在另一个教程(配置 CentOS 防火墙)中安装了 Apache,并将在以后的教程中介绍 Apache 的高级安装。所以,如果你还没有安装 Apache,请继续。
一旦可以使用以下步骤安装 Apache HTTPd –
步骤 1 – 为 Apache httpd 服务器安装 mod_ssl。
首先,我们需要使用 mod_ssl 配置 Apache。使用 YUM 包管理器,这非常简单 –
[root@centos]# yum -y install mod_ssl
然后重新加载您的 Apache 守护程序以确保 Apache 使用新配置。
[root@centos]# systemctl reload httpd
此时,Apache 已配置为支持本地主机上的 TLS 连接。
步骤 2 – 创建自签名 ssl 证书。
首先,让我们配置我们的私有 TLS 密钥目录。
[root@centos]# mkdir /etc/ssl/private [root@centos]# chmod 700 /etc/ssl/private/
注意– 确保只有 root 具有对此目录的读/写访问权限。通过全局读/写访问,您的私钥可用于解密嗅探到的流量。
生成证书和密钥文件。
[root@centos]# sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/self-gen-apache.key -out /etc/ssl/certs/self-sign-apache.crt Generating a 2048 bit RSA private key ..........+++ ....+++ ----- Country Name (2 letter code) [XX]:US State or Province Name (full name) []:xx Locality Name (eg, city) [Default City]:xxxx Organization Name (eg, company) [Default Company Ltd]:VMNET Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:centos.vmnet.local Email Address []: [root@centos]#
注意– 如果您没有注册域名,您可以使用服务器的公共 IP 地址。
让我们来看看我们的证书 –
[root@centos]# openssl x509 -in self-sign-apache.crt -text -noout Certificate: Data: Version: 3 (0x2) Serial Number: 17620849408802622302 (0xf489d52d94550b5e) Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local Validity Not Before: Feb 24 07:07:55 2017 GMT Not After : Feb 24 07:07:55 2018 GMT Subject: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:c1:74:3e:fc:03:ca:06:95:8d:3a:0b:7e:1a:56: f3:8d:de:c4:7e:ee:f9:fa:79:82:bf:db:a9:6d:2a: 57:e5:4c:31:83:cf:92:c4:e7:16:57:59:02:9e:38: 47:00:cd:b8:31:b8:34:55:1c:a3:5d:cd:b4:8c:b0: 66:0c:0c:81:8b:7e:65:26:50:9d:b7:ab:78:95:a5: 31:5e:87:81:cd:43:fc:4d:00:47:5e:06:d0:cb:71: 9b:2a:ab:f0:90:ce:81:45:0d:ae:a8:84:80:c5:0e: 79:8a:c1:9b:f4:38:5d:9e:94:4e:3a:3f:bd:cc:89: e5:96:4a:44:f5:3d:13:20:3d:6a:c6:4d:91:be:aa: ef:2e:d5:81:ea:82:c6:09:4f:40:74:c1:b1:37:6c: ff:50:08:dc:c8:f0:67:75:12:ab:cd:8d:3e:7b:59: e0:83:64:5d:0c:ab:93:e2:1c:78:f0:f4:80:9e:42: 7d:49:57:71:a2:96:c6:b8:44:16:93:6c:62:87:0f: 5c:fe:df:29:89:03:6e:e5:6d:db:0a:65:b2:5e:1d: c8:07:3d:8a:f0:6c:7f:f3:b9:32:b4:97:f6:71:81: 6b:97:e3:08:bd:d6:f8:19:40:f1:15:7e:f2:fd:a5: 12:24:08:39:fa:b6:cc:69:4e:53:1d:7e:9a:be:4b:
以下是我们与openssl命令一起使用的每个选项的解释–
Command | 行动 |
---|---|
req -X509 | 使用 X.509 CSR 管理 PKI 标准进行密钥管理。 |
-nodes | 不要使用密码保护我们的证书。Apache 必须能够在不中断密码短语的情况下使用证书。 |
-days 2555 | 告诉证书的有效期为 7 年或 2555 天。可以根据需要调整时间段。 |
-newkey rsa:2048 | 指定使用 RSA 生成长度为 2048 位的密钥和证书。 |
接下来,我们要创建一个 Diffie-Heliman 组,用于与客户协商 PFS。
[centos#] openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
这将需要 5 到 15 分钟。
Perfect Forward Secrecy – 用于保护会话数据,以防私钥被泄露。这将生成在客户端和服务器之间使用的密钥,该密钥对于每个会话都是唯一的。
现在,将 Perfect Forward Secrecy 配置添加到我们的证书中。
[root@centos]# cat /etc/ssl/certs/dhparam.pem | tee -a /etc/ssl/certs/self-sign-apache.crt
配置 Apache 以使用密钥和证书文件
我们将对/etc/httpd/conf.d/ssl.conf进行更改–
我们将对ssl.conf进行以下更改。但是,在我们这样做之前,我们应该备份原始文件。在vi或emcas等高级文本编辑器中对生产服务器进行更改时,最佳做法是在进行编辑之前始终备份配置文件。
[root@centos]# cp /etc/httpd/conf.d/ssl.conf ~/
现在让我们在将 ssl.conf 的已知工作副本复制到我们的主文件夹的根目录后继续我们的编辑。
- 定位
- 按如下方式编辑 DocumentRoot 和 ServerName。
\\# General setup for the virtual host, inherited from global configuration DocumentRoot "/var/www/html" ServerName centos.vmnet.local:443
DocumentRoot这是您的默认 apache 目录的路径。在这个文件夹中应该是一个默认页面,它将显示一个 HTTP 请求,请求您的 Web 服务器或站点的默认页面。
ServerName是服务器名称,可以是 IP 地址或服务器的主机名。对于 TLS,最佳做法是使用主机名创建证书。在我们的 OpenLdap 教程中,我们在本地企业域上创建了一个 centos 主机名:vmnet.local
现在我们要注释掉以下几行。
SSL协议
# SSL Protocol support: # List the enable protocol levels with which clients will be able to # connect. Disable SSLv2 access by default: ~~~~> #SSLProtocol all -SSLv2 # SSL Cipher Suite: # List the ciphers that the client is permitted to negotiate. # See the mod_ssl documentation for a complete list. ~~~~> #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
然后让 Apache 知道在哪里可以找到我们的证书和私钥/公钥对。
指定我们的自签名证书文件的路径
# Server Certificate: # Point SSLCertificateFile at a PEM encoded certificate. If # the certificate is encrypted, then you will be prompted for a # pass phrase. Note that a kill -HUP will prompt again. A new # certificate can be generated using the genkey(1) command. ~~~~> SSLCertificateFile /etc/ssl/certs/self-sign-apache.crt specify path to our private key file # Server Private Key: # If the key is not combined with the certificate, use this # directive to point at the key file. Keep in mind that if # you've both a RSA and a DSA private key you can configure # both in parallel (to also allow the use of DSA ciphers, etc.) ~~~~> SSLCertificateKeyFile /etc/ssl/private/self-gen-apache.key
最后,我们需要允许通过端口 443到https 的入站连接。
安装 Apache Web 服务器 CentOS 7
在本章中,我们将了解 Apache HTTP Server 如何出现的背景,然后在 CentOS Linux 7 上安装最新的稳定版本。
Apache WebServer 简史
Apache 是一种已经存在很长时间的 Web 服务器。事实上,几乎只要http本身存在!
Apache 最初是国家超级计算应用中心(也称为 NCSA)的一个相当小的项目。在 90 年代中期,所谓的“httpd”是迄今为止互联网上最受欢迎的 Web 服务器平台,拥有大约 90% 或更多的市场份额。
在这个时候,这是一个简单的项目。被称为网站管理员的熟练 IT 人员负责:维护 Web 服务器平台和 Web 服务器软件以及前端和后端站点开发。httpd 的核心是它能够使用称为插件或扩展的自定义模块。网站管理员也有足够的技能为核心服务器软件编写补丁。
在 90 年代中期的某个时候,httpd 的高级开发人员和项目经理离开 NCSA 去做其他事情。这让最流行的网络守护进程处于停滞状态。
由于httpd 的使用如此广泛,一群经验丰富的httpd 网站管理员呼吁召开一次关于httpd 未来的峰会。决定将最好的扩展和补丁协调并应用到当前的稳定版本中。然后,现在的 http 服务器之父诞生并命名为 Apache HTTP 服务器。
鲜为人知的历史事实– Apache 不是以美洲原住民部落的勇士命名的。事实上,它的创造和命名是有曲折的:由许多才华横溢的计算机科学家的许多修复(或补丁)组成:补丁或Apache。
在 CentOS Linux 7 上安装当前稳定版本
步骤 1 – 通过 yum 安装 httpd。
yum -y install httpd
此时 Apache HTTP Server 将通过 yum 安装。
第 2 步– 编辑特定于您的 httpd 需求的 httpd.conf 文件。
使用默认的 Apache 安装,Apache 的配置文件名为httpd.conf,位于/etc/httpd/ 中。所以,让我们在vim 中打开它。
httpd.conf的前几行在vim 中打开–
# # This is the main Apache HTTP server configuration file. It contains the # configuration directives that give the server its instructions. # See <URL:http://httpd.apache.org/docs/2.4/> for detailed information. # In particular, see # <URL:http://httpd.apache.org/docs/2.4/mod/directives.html> # for a discussion of each configuration directive.
我们将进行以下更改以允许我们的 CentOS 安装服务来自 http 端口 80 的 http 请求。
监听主机和端口
# Listen: Allows you to bind Apache to specific IP addresses and/or # ports, instead of the default. See also the <VirtualHost> # directive. # # Change this to Listen on specific IP addresses as shown below to # prevent Apache from glomming onto all bound IP addresses. # #Listen 12.34.56.78:80 Listen 80
从这里开始,我们将 Apache 更改为侦听某个端口或 IP 地址。例如,如果我们想在诸如 8080 之类的替代端口上运行 httpd 服务。或者如果我们的 Web 服务器配置了多个接口和单独的 IP 地址。
听
防止 Apache 将每个侦听守护程序附加到每个 IP 地址。这对于停止仅指定 IPv6 或 IPv4 流量很有用。甚至绑定到多宿主主机上的所有网络接口。
# # Listen: Allows you to bind Apache to specific IP addresses and/or # ports, instead of the default. See also the <VirtualHost> # directive. # # Change this to Listen on specific IP addresses as shown below to # prevent Apache from glomming onto all bound IP addresses. # Listen 10.0.0.25:80 #Listen 80
文档根目录
“文档根”是默认目录,Apache 将在其中查找索引文件以在访问您的服务器时为请求提供服务:http : //www.yoursite.com/将从您的文档根中检索并提供索引文件。
# # DocumentRoot: The directory out of which you will serve your # documents. By default, all requests are taken from this directory, but # symbolic links and aliases may be used to point to other locations. # DocumentRoot "/var/www/html"
第 3 步– 启动并启用 httpd 服务。
[root@centos rdc]# systemctl start httpd && systemctl reload httpd [root@centos rdc]#
步骤 4 – 配置防火墙以允许访问端口 80 请求。
[root@centos]# firewall-cmd --add-service=http --permanent
Linux Admin – CentOS 7 上的 MySQL 设置
正如在配置 CentOS 以与 Maria DB 一起使用时简要提及的那样,CentOS 7 yum存储库中没有本机 MySQL 包。为了解决这个问题,我们需要添加一个 MySQL 托管存储库。
CentOS Linux 上的 MariaDB 与 MySQL
需要注意的一件事是 MySQL 将需要一组与 MariaDB 不同的基本依赖项。同样使用 MySQL 将打破 CentOS 的概念和哲学:为最大可靠性设计的生产包。
因此,在决定使用 Maria 还是 MySQL 时,应该权衡两个选项:我当前的 DB Schema 是否可以与 Maria 一起使用?与 Maria 相比,安装 MySQL 有什么优势?
Maria 组件对 MySQL 结构 100% 透明,通过更好的许可提高了一些效率。除非有令人信服的理由,否则建议将 CentOS 配置为使用 MariaDB。
在 CentOS 上偏爱 Maria 的最大原因是 –
-
大多数人会使用 MariaDB。遇到问题时,您将获得更多与 Maria 的帮助。
-
CentOS 旨在与 Maria 一起运行。因此,Maria 将提供更好的稳定性。
-
CentOS 正式支持 Maria。
下载并添加 MySQL 存储库
我们将要从以下位置下载并安装 MySQL 存储库 –
http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
步骤 1 – 下载存储库。
该存储库方便地打包在 rpm 包中,以便于安装。它可以用wget下载–
[root@centos]# wget http://repo.mysql.com/mysql-community-release-el75.noarch.rpm --2017-02-26 03:18:36-- http://repo.mysql.com/mysql-community-release-el75.noarch.rpm Resolving repo.mysql.com (repo.mysql.com)... 104.86.98.130
第 2 步– 从 YUM 安装 MySQL。
我们现在可以使用yum包管理器来安装MySQL –
[root@centos]# yum -y install mysql-server
步骤 3 – 启动并启用 MySQL 守护程序服务。
[root@centos]# systemctl start mysql [root@centos]# systemctl enable mysql
第 4 步– 确保我们的 MySQL 服务已启动并正在运行。
[root@centos]# netstat -antup | grep 3306 tcp6 0 0 :::3306 :::* LISTEN 6572/mysqld [root@centos]#
注意 – 我们不会允许任何防火墙规则通过。将 MySQL 配置为使用Unix Domain Sockets是很常见的。这确保只有 LAMP 堆栈的 Web 服务器在本地可以访问 MySQL 数据库,从而在数据库软件的攻击向量中取出完整的维度。
设置 Postfix MTA 和 IMAP/POP3
为了从我们的 CentOS 7 服务器发送电子邮件,我们需要进行设置以配置现代邮件传输代理 (MTA)。邮件传输代理是负责通过 SMTP 为系统用户或企业 Internet 域发送出站邮件的守护进程。
值得注意的是,本教程只讲授设置本地使用的守护进程的过程。我们不会详细介绍为业务运营设置 MTA 的高级配置。这是许多技能的组合,包括但不限于:DNS、获取未列入黑名单的静态可路由 IP 地址以及配置高级安全和服务设置。简而言之,本教程旨在让您熟悉基本配置。不要将本教程用于面向 Internet 的主机的 MTA 配置。
结合对安全性和易于管理的综合关注,我们选择Postfix作为本教程的 MTA。在旧版 CentOS 中安装的默认 MTA 是Sendmail。Sendmail是一个很棒的 MTA。然而,根据作者的拙见,Postfix 在处理 MTA 的以下注释时遇到了一个甜蜜点。在最新版本的 CentOS 中,Postfix 已取代 Sendmail 作为默认 MTA。
Postfix 是一种广泛使用且有据可查的 MTA。它被积极维护和开发。它需要最少的配置(这只是电子邮件)并且对系统资源很有效(同样,这只是电子邮件)。
步骤 1 – 从 YUM 包管理器安装 Postfix。
[root@centos]# yum -y install postfix
步骤 2 – 配置 Postfix 配置文件。
Postfix 配置文件位于 – /etc/postfix/main.cf
在简单的 Postfix 配置中,必须为特定主机配置以下内容:主机名、域、来源、inet_interfaces 和目的地。
配置主机名– 主机名是 Postfix 主机的完全限定域名。在 OpenLDAP 章节中,我们在域vmnet.local 上将CentOS 框命名为:centos 。让我们坚持这一章。
# The myhostname parameter specifies the internet hostname of this # mail system. The default is to use the fully-qualified domain name # from gethostname(). $myhostname is used as a default value for many # other configuration parameters. # myhostname = centos.vmnet.local
配置域– 如上所述,我们将在本教程中使用的域是vmnet.local
# The mydomain parameter specifies the local internet domain name. # The default is to use $myhostname minus the first component. # $mydomain is used as a default value for many other configuration # parameters. # mydomain = vmnet.local
配置源– 对于单个服务器和域设置,我们只需要取消对以下部分的注释并保留默认的 Postfix 变量。
# SENDING MAIL # # The myorigin parameter specifies the domain that locally-posted # mail appears to come from. The default is to append $myhostname, # which is fine for small sites. If you run a domain with multiple # machines, you should (1) change this to $mydomain and (2) set up # a domain-wide alias database that aliases each user to # [email protected]. # # For the sake of consistency between sender and recipient addresses, # myorigin also specifies the default domain name that is appended # to recipient addresses that have no @domain part. # myorigin = $myhostname myorigin = $mydomain
配置网络接口– 我们将让 Postfix 监听我们的单个网络接口以及与该接口关联的所有协议和 IP 地址。这是通过简单地为 Postfix 启用默认设置来完成的。
# The inet_interfaces parameter specifies the network interface # addresses that this mail system receives mail on. By default, # the software claims all active interfaces on the machine. The # parameter also controls delivery of mail to user@[ip.address]. # # See also the proxy_interfaces parameter, for network addresses that # are forwarded to us via a proxy or network address translator. # # Note: you need to stop/start Postfix when this parameter changes. # #inet_interfaces = all #inet_interfaces = $myhostname #inet_interfaces = $myhostname, localhost #inet_interfaces = localhost # Enable IPv4, and IPv6 if supported inet_protocols = all
步骤 3 – 为 Postfix 配置 SASL 支持。
如果没有 SASL 身份验证支持,Postfix 将只允许从本地用户发送电子邮件。或者,当用户从本地域发送电子邮件时,它会给出中继被拒绝的错误。
注– SASL或简单应用程序安全层框架是一个框架,旨在支持不同应用层协议之间的不同技术的身份验证。SASL 开发人员(和消费者)没有将身份验证机制留给应用层协议,而是将当前身份验证协议用于更高级别的协议,这些协议可能没有内置的便利或更安全的身份验证(当谈到对安全服务的访问时)。
安装“cyrus-sasl* 包
[root@centos]# yum -y install cyrus-sasl Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: repos.forethought.net * extras: repos.dfw.quadranet.com * updates: mirrors.tummy.com Package cyrus-sasl-2.1.26-20.el7_2.x86_64 already installed and latest version Nothing to do
为 SASL 身份验证配置/etc/postfix/main.cf
smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination smtpd_sasl_security_options = noanonymous smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth
我在main.conf 中的SASL 选项
##Configure SASL Options Entries: smtpd_sasl_auth_enable = yes smptd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination smtp_sasl_type = dovecot smtp_sasl_path = private/auth/etc
步骤 4 – 配置 FirewallD 以允许传入的 SMTP 服务。
[root@centos]# firewall-cmd --permanent --add-service=smtp success [root@centos]# firewall-cmd --reload success [root@centos]#
现在让我们检查以确保我们的 CentOS 主机允许并响应端口 25 (SMTP) 上的请求。
Nmap scan report for 172.16.223.132 Host is up (0.00035s latency). Not shown: 993 filtered ports PORT STATE SERVICE 20/tcp closed ftp-data 21/tcp open ftp 22/tcp open ssh 25/tcp open smtp 80/tcp open http 389/tcp open ldap 443/tcp open https MAC Address: 00:0C:29:BE:DF:5F (VMware)
如您所见,SMTP 正在侦听,守护进程正在响应来自我们内部 LAN 的请求。
安装 Dovecot IMAP 和 POP3 服务器
Dovecot 是一个安全的 IMAP 和 POP3 服务器,旨在处理小型到大型组织的传入邮件需求。由于它与 CentOS 的大量使用,我们将使用 Dovecot 作为为 CentOS 和 MTA SASL Provider 安装和配置传入邮件服务器的示例。
如前所述,我们不会为 DNS 配置 MX 记录或创建允许我们的服务处理域邮件的安全规则。因此,仅在面向 Internet 的主机上设置这些服务可能会为没有 SPF 记录的安全漏洞留下杠杆空间。
步骤 1 – 安装 Dovecot。
[root@centos]# yum -y install dovecot
步骤 2 – 配置 dovecot。
dovecot 的主要配置文件位于:/etc/dovecot.conf。我们将首先备份主配置文件。在进行编辑之前始终备份配置文件是一种很好的做法。这样 id(例如)换行符会被文本编辑器破坏,并且会丢失多年的更改。恢复很容易,就像将当前备份复制到生产中一样。
为dovecot启用协议和守护进程服务
# Protocols we want to be serving. protocols = imap imaps pop3 pop3s
现在,我们需要启用 dovecot 守护进程在启动时监听 –
[root@localhost]# systemctl start dovecot [root@localhost]# systemctl enable dovecot
让我们确保 Dovecot 正在本地侦听指定端口:imap、pop3、imap 安全和 pop3 安全。
[root@localhost]# netstat -antup | grep dovecot tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 4368/dovecot tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 4368/dovecot tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 4368/dovecot tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 4368/dovecot tcp6 0 0 :::110 :::* LISTEN 4368/dovecot tcp6 0 0 :::143 :::* LISTEN 4368/dovecot tcp6 0 0 :::993 :::* LISTEN 4368/dovecot tcp6 0 0 :::995 :::* LISTEN 4368/dovecot [root@localhost]#
正如所见,dovecot正在侦听 IPv4 和 IPv4 的指定端口。
POP3 | 110 |
POP3s | 995 |
IMAP | 143 |
IMAPs | 993 |
现在,我们需要制定一些防火墙规则。
[root@localhost]# firewall-cmd --permanent --add-port=110/tcp success [root@localhost]# firewall-cmd --permanent --add-port=143/tcp success [root@localhost]# firewall-cmd --permanent --add-port=995/tcp success [root@localhost]# firewall-cmd --permanent --add-port=993/tcp success [root@localhost]# firewall-cmd --reload success [root@localhost]#
我们收到的邮件服务器被接受的请求POP3,则POP3,IMAP和IMAPS到局域网内的主机。
Port Scanning host: 192.168.1.143 Open TCP Port: 21 ftp Open TCP Port: 22 ssh Open TCP Port: 25 smtp Open TCP Port: 80 http Open TCP Port: 110 pop3 Open TCP Port: 143 imap Open TCP Port: 443 https Open TCP Port: 993 imaps Open TCP Port: 995 pop3s
Linux 管理员 – 安装匿名 FTP
在深入研究在 CentOS 上安装 FTP 之前,我们需要了解一下它的使用和安全性。FTP是一种非常有效且经过完善的协议,用于在计算机系统之间传输文件。FTP 已经使用和改进了几十年。为了通过具有延迟的网络有效地传输文件或纯粹的速度,FTP 是一个不错的选择。比 SAMBA 或 SMB 更重要。
但是,FTP 确实存在一些安全问题。实际上,一些严重的安全问题。FTP 使用非常弱的纯文本身份验证方法。正是由于这个原因,经过身份验证的会话应该依赖于 sFTP 或 FTPS,其中 TLS 用于登录和传输会话的端到端加密。
有了上述注意事项,普通的旧 FTP 在今天的商业环境中仍然可以使用。主要用途是匿名 FTP 文件存储库。在这种情况下,下载或上传文件无需身份验证。匿名 FTP 使用的一些例子是 –
-
大型软件公司仍然使用匿名 ftp 存储库,允许互联网用户下载共享软件和补丁。
-
允许互联网用户上传和下载公共文件。
-
某些应用程序会通过 FTP 自动将加密的归档日志或配置文件发送到存储库。
因此,作为 CentOS 管理员,能够安装和配置 FTP 仍然是一项设计技能。
我们将使用一个名为vsFTP或非常安全的 FTP 守护程序的 FTP 守护程序。vsFTP 已经在开发中使用了一段时间。它以安全、易于安装和配置以及可靠而著称。
步骤 1 – 使用 YUM 包管理器安装 vsFTPd。
[root@centos]# yum -y install vsftpd.x86_64
第 2 步– 使用 systemctl 将 vsFTP 配置为启动时启动。
[root@centos]# systemctl start vsftpd [root@centos]# systemctl enable vsftpd Created symlink from /etc/systemd/system/multi- user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
步骤 3 – 配置 FirewallD 以允许 FTP 控制和传输会话。
[root@centos]# firewall-cmd --add-service=ftp --permanent success [root@centos]#
确保我们的 FTP 守护进程正在运行。
[root@centos]# netstat -antup | grep vsftp tcp6 0 0 :::21 :::* LISTEN 13906/vsftpd [root@centos]#
步骤 4 – 为匿名访问配置 vsFTPD。
创建根 FTP 目录
[root@centos]# mkdir /ftp
将 FTP 根的所有者和组更改为ftp
[root@centos]# chown ftp:ftp /ftp Set minimal permissions for FTP root: [root@centos]# chmod -R 666 /ftp/ [root@centos]# ls -ld /ftp/ drw-rw-rw-. 2 ftp ftp 6 Feb 27 02:01 /ftp/ [root@centos]#
在这种情况下,我们授予用户对整个根 FTP 树的读/写访问权限。
配置/etc/vsftpd/vsftpd.conf”
[root@centos]# vim /etc/vsftpd/vsftpd.conf # Example config file /etc/vsftpd/vsftpd.conf # # The default compiled in settings are fairly paranoid. This sample file # loosens things up a bit, to make the ftp daemon more usable. # Please see vsftpd.conf.5 for all compiled in defaults. # # READ THIS: This example file is NOT an exhaustive list of vsftpd options. # Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's # capabilities.
我们将要更改vsftp.conf文件中的以下指令。
-
通过取消注释anon_mkdir_write_enable=YES启用匿名上传
-
chown 上传文件归系统ftp用户所有
chown_uploads = 是
chown_username = ftp
-
将 vsftp 使用的系统用户改为 ftp 用户:nopriv_user = ftp
-
设置用户在登录前阅读的自定义横幅。
ftpd_banner = 欢迎使用我们的匿名 FTP 存储库。所有连接都受到监控和记录。
-
让我们只设置 IPv4 连接 –
听=是
listen_ipv6 = 否
现在,我们需要重新启动或HUP vsftp 服务以应用我们的更改。
[root@centos]# systemctl restart vsftpd
让我们连接到我们的 FTP 主机并确保我们的 FTP 守护进程正在响应。
[root@centos rdc]# ftp 10.0.4.34 Connected to localhost (10.0.4.34). 220 Welcome to our Anonymous FTP Repo. All connections are monitored and logged. Name (localhost:root): anonymous 331 Please specify the password. Password: '230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp>
Linux 管理员 – 远程管理
在以管理员身份谈论 CentOS 中的远程管理时,我们将探讨两种方法 –
- 控制台管理
- 图形用户界面管理
远程控制台管理
远程控制台管理意味着通过诸如 ssh 之类的服务从命令行执行管理任务。要有效地使用 CentOS Linux,作为管理员,您需要精通命令行。Linux 的核心设计是从控制台使用。即使在今天,一些系统管理员更喜欢命令的强大功能,并通过运行没有物理终端和 GUI 的准系统 Linux 机器来节省硬件成本。
远程图形用户界面管理
远程 GUI 管理通常通过两种方式完成:远程 X-Session 或 GUI 应用层协议(如 VNC)。每个都有其优点和缺点。但是,在大多数情况下,VNC 是管理的最佳选择。它允许从本身不支持 X Windows 协议的其他操作系统(如 Windows 或 OS X)进行图形控制。
使用远程 X Sessions 是 X-Window 的 Window-Managers 和运行在 X 上的 DesktopManagers 的本机。然而,整个 X Session 架构主要用于 Linux。并非每个系统管理员都会手头有一台 Linux 笔记本电脑来建立远程 X 会话。因此,最常见的是使用 VNC Server 的改编版本。
VNC 的最大缺点是: VNC 本身不支持多用户环境,例如远程 X-Session。因此,对于最终用户远程 XSession 的 GUI 访问将是最佳选择。然而,我们主要关注远程管理 CentOS 服务器。
我们将讨论为多个管理员配置 VNC,而不是为数百个具有远程 X-Session 的最终用户。
使用 SSH 为远程控制台访问奠定安全基础
ssh或Secure Shell现在是远程管理任何 Linux 服务器的标准。与 telnet 不同,SSH 使用 TLS 来保证通信的真实性和端到端加密。正确配置后,管理员可以非常确定他们的密码和服务器都是远程信任的。
在配置 SSH 之前,让我们先谈谈基本的安全性和最不常见的访问。当 SSH 在其默认端口 22 上运行时;迟早,您将受到针对常见用户名和密码的强力字典攻击。这只是与领土有关。无论您将多少主机添加到拒绝文件中,它们每天都会从不同的 IP 地址进入。
通过一些通用规则,您可以简单地采取一些积极主动的步骤,让坏人浪费时间。以下是在生产服务器上使用 SSH 进行远程管理时要遵循的一些安全规则 –
-
切勿使用通用的用户名或密码。系统上的用户名不应是系统默认值,也不应与公司电子邮件地址相关联,例如:[email protected]
-
不应通过 SSH 允许根访问或管理访问。通过 SSH 进行身份验证后,使用唯一的用户名和 su 来 root 或管理帐户。
-
密码策略是必须的:复杂的 SSH 用户密码,如:“This&IS&a&GUD&P@ssW0rd&24&me”。每隔几个月更改一次密码,以消除对增量蛮力攻击的敏感性。
-
禁用废弃或长时间未使用的帐户。如果招聘经理收到语音邮件,说明他们将在一个月内不进行面试;例如,这可能导致精通技术的人有很多时间。
-
每天看你的日志。作为系统管理员,每天早上至少花 30-40 分钟查看系统和安全日志。如果被问到,让每个人都知道你没有时间不积极主动。这种做法将有助于在问题出现给最终用户和公司利润之前隔离警告信号。
Linux 安全注意事项– 任何对 Linux 管理感兴趣的人都应该积极关注当前的网络安全新闻和技术。虽然我们经常听到其他操作系统遭到入侵的消息,但不安全的 Linux 机器是网络犯罪分子抢手的宝藏。借助 Linux 在高速互联网连接上的强大功能,熟练的网络犯罪分子可以使用 Linux 来利用对其他操作系统的攻击。
为远程访问安装和配置 SSH
步骤 1 – 安装 SSH 服务器和所有依赖包。
[root@localhost]# yum -y install openssh-server 'Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: repos.centos.net * extras: repos.dfw.centos.com * updates: centos.centos.com Resolving Dependencies --> Running transaction check ---> Package openssh-server.x86_64 0:6.6.1p1-33.el7_3 will be installed --> Finished Dependency Resolution Dependencies Resolved
步骤 2 – 进行安全的常规使用以添加 shell 访问。
[root@localhost ~]# useradd choozer [root@localhost ~]# usermod -c "Remote Access" -d /home/choozer -g users -G wheel -a choozer
注意– 我们将新用户添加到轮组中,一旦 SSH 访问通过身份验证,就可以将su转换为 root。我们还使用了在常用单词列表中找不到的用户名。这样,当 SSH 受到攻击时,我们的帐户就不会被锁定。
保存 sshd 服务器配置设置的文件是/etc/ssh/sshd_config。
我们最初要编辑的部分是 –
LoginGraceTime 60m PermitRootLogin no
步骤 3 – 重新加载 SSH 守护进程sshd。
[root@localhost]# systemctl reload sshd
最好将注销宽限期设置为 60 分钟。某些复杂的管理任务可能会超过默认值 2 分钟。在配置或研究更改时,没有什么比 SSH 会话超时更令人沮丧的了。
第 4 步– 让我们尝试使用根凭据登录。
bash-3.2# ssh centos.vmnet.local [email protected]'s password: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
第 5 步– 我们无法再使用root凭据通过 ssh 远程登录。所以让我们登录到我们的非特权用户帐户,然后su进入root帐户。
bash-3.2# ssh [email protected] [email protected]'s password: [choozer@localhost ~]$ su root Password: [root@localhost choozer]#
步骤 6 – 最后,让我们确保 SSHD 服务在启动时加载,并且firewalld允许外部 SSH 连接。
[root@localhost]# systemctl enable sshd [root@localhost]# firewall-cmd --permanent --add-service=ssh success [root@localhost]# firewall-cmd --reload success [root@localhost]#
SSH 现已设置并准备好进行远程管理。根据您的企业边界,可能需要配置包过滤边界设备以允许在企业 LAN 之外进行 SSH 远程管理。
为远程 CentOS 管理配置 VNC
有几种方法可以在 CentOS 6-7 上通过 VNC 启用远程 CentOS 管理。最简单但最有限制的方法就是使用名为vino的软件包。Vino是围绕 Gnome 桌面平台设计的 Linux 虚拟网络桌面连接应用程序。因此,假设安装是使用 Gnome Desktop 完成的。如果尚未安装 Gnome 桌面,请在继续之前安装。默认情况下,Vino 将与 Gnome GUI 一起安装。
要在 Gnome 下配置与 Vino 的屏幕共享,我们要进入 CentOS 系统首选项进行屏幕共享。
Applications->System Tools->Settings->Sharing
配置 VNC 桌面共享的注意事项 –
-
禁用新连接必须要求访问– 此选项将需要物理访问才能确定每个连接。此选项将阻止远程管理,除非有人在物理桌面上。
-
启用需要密码– 这与用户密码分开。它将控制对虚拟桌面的访问,但仍需要用户密码才能访问锁定的桌面(这有利于安全)。
-
转发 UP&P 端口:如果可用,请保持禁用– 转发 UP&P 端口将为第 3 层设备发送通用即插即用请求,以允许 VNC 自动连接到主机。我们不想要这个。
确保 vino 正在侦听 VNC 端口 5900。
[root@localhost]# netstat -antup | grep vino tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 4873/vino-server tcp6 0 0 :::5900 :::* LISTEN 4873/vino-server [root@localhost]#
现在让我们配置我们的防火墙以允许传入的 VNC 连接。
[root@localhost]# firewall-cmd --permanent --add-port=5900/tcp success [root@localhost]# firewall-cmd --reload success [root@localhost rdc]#
最后,如您所见,我们可以连接 CentOS Box 并使用 Windows 或 OS X 上的 VNC 客户端对其进行管理。
遵守 VNC 的规则与我们为 SSH 制定的规则同样重要。就像 SSH 一样,VNC 会持续扫描 IP 范围并测试弱密码。还值得注意的是,通过控制台超时启用默认的 CentOS 登录确实有助于远程 VNC 安全。由于攻击者需要 VNC 和用户密码,因此请确保您的屏幕共享密码不同,并且与用户密码一样难以猜测。
输入VNC屏幕共享密码后,我们还必须输入用户密码才能访问锁定的桌面。
安全说明– 默认情况下,VNC 不是加密协议。因此,VNC 连接应该通过 SSH 建立隧道以进行加密。
通过 VNC 设置 SSH 隧道
设置 SSH 隧道将提供一层 SSH 加密以通过隧道建立 VNC 连接。另一个很棒的功能是它使用 SSH 压缩为 VNC GUI 屏幕更新添加另一层压缩。在处理 CentOS 服务器的管理时,更安全和更快总是一件好事!
因此,从将启动 VNC 连接的客户端开始,让我们设置一个远程 SSH 隧道。在这个演示中,我们使用的是 OS X。首先我们需要sudo -s到root。
bash-3.2# sudo -s password:
输入用户密码,我们现在应该拥有带有 # 提示的root shell –
bash-3.2#
现在,让我们创建我们的SSH 隧道。
ssh -f [email protected] -L 2200:192.168.1.143:5900 -N
让我们分解这个命令 –
-
ssh – 运行本地 ssh 实用程序
-
-f – 任务完全执行后 ssh 应在后台运行
-
[email protected] – 托管 VNC 服务的 CentOS 服务器上的远程 ssh 用户
-
-L 2200:192.168.1.143:5900 – 创建我们的隧道 [本地端口]:[远程主机]:[VNC 服务的远程端口]
-
-N告诉 ssh 我们不希望在远程系统上执行命令
bash-3.2# ssh -f [email protected] -L 2200:192.168.1.143:5900 -N [email protected]'s password:
成功输入远程ssh用户的密码后,我们的ssh隧道就创建好了。现在是很酷的部分!为了连接,我们将 VNC 客户端指向隧道端口上的 localhost,在本例中为端口 2200。以下是 Mac 笔记本电脑的 VNC 客户端上的配置 –
最后,我们的远程 VNC 桌面连接!
SSH 隧道的一个很酷的地方是它几乎可以用于任何协议。SSH 隧道通常用于绕过 ISP 的出口和入口端口过滤,以及在逃避其他会话层监控的同时欺骗应用层 IDS/IPS。
-
您的 ISP 可能会为非企业帐户过滤端口 5900,但允许端口 22 上的 SSH(或者,如果端口 22 被过滤,则可以在任何端口上运行 SSH)。
-
应用程序级 IPS 和 IDS 着眼于负载。例如,常见的缓冲区溢出或 SQL 注入。端到端 SSH 加密将加密应用层数据。
SSH 隧道是 Linux 管理员工具箱中用于完成任务的绝佳工具。但是,作为管理员,我们希望探索锁定有权访问 SSH 隧道的低权限用户的可用性。
管理安全说明– 限制 SSH 隧道是管理员需要考虑的事情。首先评估用户为什么需要 SSH 隧道;用户需要什么隧道;以及实际风险概率和最坏情况影响。
这是一个高级主题,超出了中级入门的范围。建议那些希望达到 CentOS Linux 管理高层的人研究这个主题。
使用 SSH 隧道进行远程 X-Windows
与 Windows 相比,Linux 中 X-Windows 的设计非常简洁。如果我们想从另一个 Linux boxm 控制远程 Linux box,我们可以利用 X 内置的机制。
X-Windows(通常简称为“X”)提供了将源自一个 Linux 机器的应用程序窗口显示到另一个 Linux 机器上 X 的显示部分的机制。因此,通过 SSH,我们可以请求将 X-Windows 应用程序转发到世界各地的另一个 Linux 机器的显示器上!
要通过 ssh 隧道远程运行 X 应用程序,我们只需要运行一个命令 –
[root@localhost]# ssh -X [email protected]
语法是– ssh -X [user]@[host],并且主机必须使用有效用户运行 ssh。
以下是通过远程 XWindows ssh 隧道在 Ubuntu 工作站上运行的 GIMP 的屏幕截图。
从另一个 Linux 服务器或工作站远程运行应用程序非常简单。还可以通过几种方法启动整个 X-Session 并远程拥有整个桌面环境。
-
XDMCP
-
无头软件包,例如 NX
-
在 X 和桌面管理器(例如 Gnome 或 KDE)中配置备用显示器和桌面
这种方法最常用于没有物理显示器的无头服务器,确实超出了中级入门的范围。但是,最好了解可用的选项。
Linux Admin – CentOS 中的流量监控
有几个第三方工具可以为 CentOS 流量监控添加增强功能。在本教程中,我们将重点介绍那些打包在主要 CentOS 发行版存储库和 Fedora EPEL 存储库中的内容。
总会有管理员(出于某种原因)在主要 CentOS 存储库中只剩下工具的情况。讨论的大多数实用程序设计为由具有物理访问外壳的管理员使用。当使用可访问的 web-gui 进行流量监控时,使用第三方实用程序如 ntop-ng 或 Nagios 是最佳选择(而不是从头开始重新创建此类设施)。
为了进一步研究这两种可配置的 web-gui 解决方案,以下是一些开始研究的链接。
LAN / WAN 场景的流量监控
纳吉欧斯
Nagios 已经存在很长时间了,因此,它经过了尝试和测试。曾几何时,它完全是免费和开源的,但后来发展成为具有付费许可模式的企业解决方案,以支持企业复杂性的需求。因此,在计划使用 Nagios 进行任何部署之前,请确保开源许可版本能够满足您的需求,或者在计划支出时考虑到企业预算。
大多数开源 Nagios 流量监控软件可以在 – https://www.nagios.org找到
关于 Nagious 的历史总结,这里是 Nagios 的官方历史页面:https ://www.nagios.org/about/history/
ntopng
另一个允许通过 web-gui 监控带宽和流量的好工具叫做ntopng。ntopng类似于 Unix 实用程序 ntop,可以为整个 LAN 或 WAN 收集数据。提供用于管理、配置和图表的 web-gui 使其易于用于整个 IT 部门。
与 Nagious 一样,ntopng 也有开源和付费企业版。有关ntopng 的更多信息,请访问网站 – http://www.ntop.org/
安装 Fedora EPEL Repository ─ 企业 Linux 的额外包
为了访问流量监控所需的一些工具,我们需要配置我们的 CentOS 系统以使用 EPEL 存储库。
CentOS 并未正式维护或支持 EPEL 存储库。但是,它是由一组 Fedora Core 志愿者维护的,用于解决 CentOS、Fedora Core 或 Red Hat Linux Enterprise 中未包含的 Enterprise Linux 专业人员常用的软件包。
警告
请记住,EPEL 存储库不是 CentOS 的官方存储库,它可能会破坏具有通用依赖项的生产服务器上的兼容性和功能。考虑到这一点,建议始终在运行与生产相同服务的非生产服务器上进行测试,然后再部署到系统关键设备上。
确实,使用 EHEL 存储库比使用 CentOS 的任何其他第三方存储库的最大优势是我们可以确保二进制文件没有受到污染。最好不要使用来自不受信任来源的存储库。
尽管如此,官方的 EPEL 存储库在 CentOS 中非常常见,可以通过 YUM 轻松安装。
[root@CentOS rdc]# yum -y install epel-release Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: repo1.dal.innoscale.net * extras: repo1.dal.innoscale.net * updates: mirror.hmc.edu Resolving Dependencies --> Running transaction check ---> Package epel-release.noarch 0:7-9 will be installed --> Finished Dependency Resolution Dependencies Resolved --{ condensed output }--
安装 EPEL 存储库后,我们将要更新它。
[root@CentOS rdc]# yum repolist Loaded plugins: fastestmirror, langpacks epel/x86_64/metalink | 11 kB 00:00:00 epel | 4.3 kB 00:00:00 (1/3): epel/x86_64/group_gz | 170 kB 00:00:00 (2/3): epel/x86_64/updateinfo | 753 kB 00:00:01 (3/3): epel/x86_64/primary_db --{ condensed output }--
此时,我们的 EPEL 存储库应该已经配置好并可以使用了。让我们从安装nload开始进行接口带宽监控。
我们将在本教程中关注的工具是 –
- 加载
- 顶
- 如果stst
- 顶
- vnstat
- 净猪
- 线鲨
- TCP转储
- 跟踪路由
这些都是 Linux Enterprises 中监控流量的标准。各个的用法从简单到高级,这里只简单讨论Wireshark、TCP Dump等工具。
安装和使用 nload
在 CentOS 中安装和配置我们的 EPEL 存储库后,我们现在应该能够安装和使用nload。此实用程序旨在实时绘制每个接口的带宽图表。
像大多数其他基本安装一样,nload是通过 YUM 包管理器安装的。
[root@CentOS rdc]# yum -y install nload Resolving Dependencies --> Running transaction check ---> Package nload.x86_64 0:0.7.4-4.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved =============================================================================== =============================================================================== Package Arch Version Repository Size =============================================================================== =============================================================================== Installing: nload x86_64 0.7.4-4.el7 epel 70 k Transaction Summary =============================================================================== =============================================================================== Install 1 Package Total download size: 70 k Installed size: 176 k Downloading packages: --{ condensed output }--
现在我们已经安装了nload,使用它非常简单。
[root@CentOS rdc]# nload enp0s5
nload将监视指定的接口。在这种情况下,enp0s5 是一个以太网接口,从终端实时获取网络流量负载和总带宽使用情况。
如所见,nload将绘制来自指定接口的传入和传出数据,同时提供带有哈希标记“#”的数据流的物理表示。
所描绘的屏幕截图是一个加载了一些后台守护程序流量的简单网页。
nload 的常用命令行开关是 –
Command | 行动 |
---|---|
-a | 时间段 |
-t | 时间更新间隔以毫秒为单位,默认为500 |
-u | 设置流量测量的显示 h |
-U | 设置总输入/输出流量测量单位与 -u 选项相同 |
nload 的标准语法是 –
nload [options] <interface>
如果没有指定接口,nload会自动抓取第一个以太网接口。让我们尝试以兆字节为单位测量输入/输出的总数据量和以兆位为单位的当前数据传输速度。
[root@CentOS rdc]# nload -U M -u m
传入/传出当前接口的数据以每秒兆位为单位,每个“Ttl”行,代表输入/输出的总数据以兆字节显示。
nload对于管理员查看有多少数据通过接口以及当前有多少数据传入/传出指定接口很有用。
要在不关闭 nload 的情况下查看其他界面,只需使用向左/向右箭头键。这将循环浏览系统上的所有可用接口。
可以使用-m开关同时监控多个接口–
[root@CentOS rdc]# nload -u K -U M -m lo -m enp0s5
同时负载监控两个接口(lo 和 enp0s5) –
Linux 管理员 – 日志管理
systemd 改变了 CentOS Linux 管理系统日志的方式。不是系统上的每个守护程序都将日志放置到单独的位置,而不是使用诸如tail或grep 之类的工具作为排序和过滤日志条目的主要方式,journald带来了单点管理来分析系统日志。
systemd日志背后的主要组件是 – journal、jounralctl 和 journald.conf
journald是主要的日志守护进程,通过编辑journald.conf进行配置,而journalctl用于分析journald记录的事件。
journald记录的事件包括:内核事件、用户进程和守护程序服务。
设置正确的系统时区
在使用journalctl之前,我们需要确保我们的系统时间设置为正确的时间。为此,我们要使用timedatectl。
让我们检查当前的系统时间。
[root@centos rdc]# timedatectl status Local time: Mon 2017-03-20 00:14:49 MDT Universal time: Mon 2017-03-20 06:14:49 UTC RTC time: Mon 2017-03-20 06:14:49 Time zone: America/Denver (MDT, -0600) NTP enabled: yes NTP synchronized: yes RTC in local TZ: no DST active: yes Last DST change: DST began at Sun 2017-03-12 01:59:59 MST Sun 2017-03-12 03:00:00 MDT Next DST change: DST ends (the clock jumps one hour backwards) at Sun 2017-11-05 01:59:59 MDT Sun 2017-11-05 01:00:00 MST [root@centos rdc]#
目前,系统对本地时区是正确的。如果您的系统不是,让我们设置正确的时区。更改设置后,CentOS 会自动计算与当前时区的时区偏移量,立即调整系统时钟。
让我们用timedatectl列出所有时区–
[root@centos rdc]# timedatectl list-timezones Africa/Abidjan Africa/Accra Africa/Addis_Ababa Africa/Algiers Africa/Asmara Africa/Bamako Africa/Bangui Africa/Banjul Africa/Bissau
这是来自timedatectl list-timezones的竞争输出。要查找特定的本地时区,可以使用 grep 命令 –
[root@centos rdc]# timedatectl list-timezones | grep -i "america/New_York" America/New_York [root@centos rdc]#
CentOS 使用的标签通常是带有下划线而不是空格的国家/地区(New_York 与“New York”)。
现在让我们设置我们的时区 –
[root@centos rdc]# timedatectl set-timezone "America/New_York" [root@centos rdc]# date Mon Mar 20 02:28:44 EDT 2017 [root@centos rdc]#
您的系统时钟应该会自动调整时间。
使用 journalctl 分析日志
使用journalctl时的常用命令行开关–
Switch | 行动 |
---|---|
-k | 仅列出内核消息 |
-u | 按特定单位列出(httpd、sshd 等…) |
-b | 引导标签偏移 |
-o | 记录输出格式 |
-p | 按日志类型(名称或编号)过滤 |
-F | 字段名或字段名值 |
–utc | UTC 时间偏移量 |
–since | 按时间范围过滤 |
检查引导日志
首先,我们将检查和配置 CentOS Linux 中的启动日志。你会注意到的第一件事是,默认情况下,CentOS 不会存储在重新启动后持久的启动日志。
要检查每个重启实例的启动日志,我们可以发出以下命令 –
[root@centos rdc]# journalctl --list-boots -4 bca6380a31a2463aa60ba551698455b5 Sun 2017-03-19 22:01:57 MDT—Sun 2017-03-19 22:11:02 MDT -3 3aaa9b84f9504fa1a68db5b49c0c7208 Sun 2017-03-19 22:11:09 MDT—Sun 2017-03-19 22:15:03 MDT -2 f80b231272bf48ffb1d2ce9f758c5a5f Sun 2017-03-19 22:15:11 MDT—Sun 2017-03-19 22:54:06 MDT -1 a071c1eed09d4582a870c13be5984ed6 Sun 2017-03-19 22:54:26 MDT—Mon 2017-03-20 00:48:29 MDT 0 9b4e6cdb43b14a328b1fa6448bb72a56 Mon 2017-03-20 00:48:38 MDT—Mon 2017-03-20 01:07:36 MDT [root@centos rdc]#
重新启动系统后,我们可以看到另一个条目。
[root@centos rdc]# journalctl --list-boots -5 bca6380a31a2463aa60ba551698455b5 Sun 2017-03-19 22:01:57 MDT—Sun 2017-03-19 22:11:02 MDT -4 3aaa9b84f9504fa1a68db5b49c0c7208 Sun 2017-03-19 22:11:09 MDT—Sun 2017-03-19 22:15:03 MDT -3 f80b231272bf48ffb1d2ce9f758c5a5f Sun 2017-03-19 22:15:11 MDT—Sun 2017-03-19 22:54:06 MDT -2 a071c1eed09d4582a870c13be5984ed6 Sun 2017-03-19 22:54:26 MDT—Mon 2017-03-20 00:48:29 MDT -1 9b4e6cdb43b14a328b1fa6448bb72a56 Mon 2017-03-20 00:48:38 MDT—Mon 2017-03-20 01:09:57 MDT 0 aa6aaf0f0f0d4fcf924e17849593d972 Mon 2017-03-20 01:10:07 MDT—Mon 2017-03-20 01:12:44 MDT [root@centos rdc]#
现在,让我们检查最后一个启动日志记录实例 –
root@centos rdc]# journalctl -b -5 -- Logs begin at Sun 2017-03-19 22:01:57 MDT, end at Mon 2017-03-20 01:20:27 MDT. -- Mar 19 22:01:57 localhost.localdomain systemd-journal[97]: Runtime journal is using 8.0M (max allowed 108.4M Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpuset Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpu Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpuacct Mar 19 22:01:57 localhost.localdomain kernel: Linux version 3.10.0514.6.2.el7.x86_64 ([email protected]. Mar 19 22:01:57 localhost.localdomain kernel: Command line: BOOT_IMAGE=/vmlinuz-3.10.0-514.6.2.el7.x86_64 ro Mar 19 22:01:57 localhost.localdomain kernel: Disabled fast string operations Mar 19 22:01:57 localhost.localdomain kernel: e820: BIOS-provided physical RAM map:
以上是我们上次启动的浓缩输出。我们还可以参考几小时、几天、几周、几个月甚至几年的引导日志。但是,默认情况下,CentOS 不会存储持久启动日志。要启用持久存储启动日志,我们需要进行一些配置更改 –
- 为启动日志制作中央存储点
- 为新的日志文件夹授予适当的权限
- 配置 journald.conf 以进行持久日志记录
为持久引导日志配置引导位置
journald要存储持久启动日志的初始位置是/var/log/journal。由于默认情况下不存在,让我们创建它 –
[root@centos rdc]# mkdir /var/log/journal
现在,让我们给目录适当的权限journald守护进程访问 –
systemd-tmpfiles --create --prefix /var/log/journal
最后,让我们告诉journald它应该存储持久的启动日志。在vim或您喜欢的文本编辑器中,打开/etc/systemd/jounrald.conf”。
# See journald.conf(5) for details. [Journal]=Storage=peristent
我们关心的那一行是Storage=。首先删除注释#,然后更改为Storage = persistent,如上所示。保存并重新启动 CentOS 系统,并注意在运行journalctl list-boots时应该有多个条目。
注意–来自 VPS 提供商的不断变化的机器 ID可能会导致journald无法存储持久启动日志。对于这种情况,有许多解决方法。最好仔细阅读发布到 CentOS 管理员论坛的当前修复,而不是遵循那些找到合理 VPS 解决方法的人的可信建议。
要检查特定的引导日志,我们只需要使用journald –list-boots使用-b开关获取每个偏移量。因此,要检查我们将使用的第二个引导日志 –
journalctl -b -2
未指定引导日志偏移的-b的默认值将始终是上次重新引导后的当前引导日志。
按日志类型分析日志
来自journald 的事件被编号并分为 7 种不同的类型 –
0 - emerg :: System is unusable 1 - alert :: Action must be taken immediatly 2 - crit :: Action is advised to be taken immediatly 3 - err :: Error effecting functionality of application 4 - warning :: Usually means a common issue that can affect security or usilbity 5 - info :: logged informtation for common operations 6 - debug :: usually disabled by default to troubleshoot functionality
因此,如果我们想查看所有警告,可以通过journalctl发出以下命令–
[root@centos rdc]# journalctl -p 4 -- Logs begin at Sun 2017-03-19 22:01:57 MDT, end at Wed 2017-03-22 22:33:42 MDT. -- Mar 19 22:01:57 localhost.localdomain kernel: ACPI: RSDP 00000000000f6a10 00024 (v02 PTLTD ) Mar 19 22:01:57 localhost.localdomain kernel: ACPI: XSDT 0000000095eea65b 0005C (v01 INTEL 440BX 06040000 VMW 01 Mar 19 22:01:57 localhost.localdomain kernel: ACPI: FACP 0000000095efee73 000F4 (v04 INTEL 440BX 06040000 PTL 00 Mar 19 22:01:57 localhost.localdomain kernel: ACPI: DSDT 0000000095eec749 1272A (v01 PTLTD Custom 06040000 MSFT 03 Mar 19 22:01:57 localhost.localdomain kernel: ACPI: FACS 0000000095efffc0 00040 Mar 19 22:01:57 localhost.localdomain kernel: ACPI: BOOT 0000000095eec721 00028 (v01 PTLTD $SBFTBL$ 06040000 LTP 00 Mar 19 22:01:57 localhost.localdomain kernel: ACPI: APIC 0000000095eeb8bd 00742 (v01 PTLTD ? APIC 06040000 LTP 00 Mar 19 22:01:57 localhost.localdomain kernel: ACPI: MCFG 0000000095eeb881 0003C (v01 PTLTD $PCITBL$ 06040000 LTP 00 Mar 19 22:01:57 localhost.localdomain kernel: ACPI: SRAT 0000000095eea757 008A8 (v02 VMWARE MEMPLUG 06040000 VMW 00 Mar 19 22:01:57 localhost.localdomain kernel: ACPI: HPET 0000000095eea71f 00038 (v01 VMWARE VMW HPET 06040000 VMW 00 Mar 19 22:01:57 localhost.localdomain kernel: ACPI: WAET 0000000095eea6f7 00028 (v01 VMWARE VMW WAET 06040000 VMW 00 Mar 19 22:01:57 localhost.localdomain kernel: Zone ranges: Mar 19 22:01:57 localhost.localdomain kernel: DMA [mem 0x000010000x00ffffff] Mar 19 22:01:57 localhost.localdomain kernel: DMA32 [mem 0x010000000xffffffff] Mar 19 22:01:57 localhost.localdomain kernel: Normal empty Mar 19 22:01:57 localhost.localdomain kernel: Movable zone start for each node Mar 19 22:01:57 localhost.localdomain kernel: Early memory node ranges Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x000010000x0009dfff] Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x001000000x95edffff] Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x95f000000x95ffffff] Mar 19 22:01:57 localhost.localdomain kernel: Built 1 zonelists in Node order, mobility grouping on. Total pages: 60 Mar 19 22:01:57 localhost.localdomain kernel: Policy zone: DMA32 Mar 19 22:01:57 localhost.localdomain kernel: ENERGY_PERF_BIAS: Set to 'normal', was 'performance'
以上显示了系统上过去 4 天的所有警告。
使用 systemd 查看和细读日志的新方法确实需要很少的练习和研究才能熟悉。但是,由于输出格式不同,并且特别注意使所有打包的守护程序日志通用,因此值得拥抱。与传统的日志分析方法相比,journald提供了极大的灵活性和效率。
Linux 管理员 – 备份和恢复
在探讨 CentOS 部署标准备份计划的特定方法之前,让我们首先讨论标准级别备份策略的典型注意事项。我们首先要习惯的是3-2-1 备份规则。
3-2-1 备份策略
在整个行业中,您经常会听到术语 3-2-1 备份模型。在实施备份计划时,这是一种非常好的方法。3-2-1 定义如下 – 3个数据副本;例如,我们可能有工作副本;复制到 CentOS 服务器上,使用 rsync 进行冗余设计;轮换的异地 USB 备份是根据备份服务器上的数据制作的。2种不同的备份介质。在这种情况下,我们实际上会有三种不同的备份介质:笔记本电脑或工作站的 SSD 上的工作副本、RADI6 阵列上的 CentOS 服务器数据,以及放在 USB 驱动器上的异地备份。1份异地数据副本;我们每晚都在异地轮换 USB 驱动器。另一种现代方法可能是云备份提供商。
系统恢复
一个裸机恢复计划仅仅是由一个CentOS管理员制定了一个计划,有完整的所有数据上网的重要系统。假设 100% 系统故障和所有过去的系统硬件丢失,管理员必须制定一个计划,以实现正常运行时间,并以最少的停机时间损失完整的用户数据。Linux 中使用的单片内核实际上使使用系统映像的裸机恢复比 Windows 容易得多。Windows 使用微内核架构的地方。
完整的数据恢复和裸机恢复通常通过组合方法来完成,包括工作、配置关键操作服务器的生产磁盘映像、遵守 3-2-1 规则的用户数据冗余备份。甚至一些敏感文件可能存储在安全、防火的保险箱中,受信任的公司人员的访问权限有限。
多相裸机恢复和数据恢复计划使用原生的CentOS工具可能包括-
-
dd 制作和恢复已配置服务器的生产磁盘映像
-
rsync 对所有用户数据进行增量备份
-
tar 和 gzip 用于存储带有密码和管理员注释的文件的加密备份。通常,这可以放在 USB 驱动器上,加密并锁定在高级经理访问的保险箱中。此外,如果当前管理员中了彩票并消失在某个阳光明媚的岛屿上,这可以确保其他人知道重要的安全凭证。
如果系统由于硬件故障或灾难而崩溃,以下将是恢复操作的不同阶段 –
-
使用已配置的裸机映像构建工作服务器
-
从备份将数据恢复到工作服务器
-
对执行前两个操作所需的凭据具有物理访问权限
使用 rsync 进行文件级备份
rsync是一个很棒的实用程序,用于将文件目录同步到本地或另一台服务器。rsync已被系统管理员使用多年,因此它非常适合用于备份数据。在作者看来,sync最好的特性之一是它能够从命令行编写脚本。
在本教程中,我们将以各种方式讨论 rsync –
- 探索和讨论一些常见选项
- 创建本地备份
- 通过 SSH 创建远程备份
- 恢复本地备份
rsync以其用途命名:远程同步,功能强大且使用灵活。
以下是通过 ssh进行的基本rsync远程备份 –
MiNi:~ rdc$ rsync -aAvz --progress ./Desktop/ImportantStuff/ [email protected]:home/rdc/ Documents/RemoteStuff/ [email protected]'s password: sending incremental file list 6,148 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=23/25) 2017-02-14 16_26_47-002 - Veeam_Architecture001.png 33,144 100% 31.61MB/s 0:00:00 (xfr#2, to-chk=22/25) A Guide to the WordPress REST API | Toptal.pdf 892,406 100% 25.03MB/s 0:00:00 (xfr#3, to-chk=21/25) Rick Cardon Technologies, LLC..webloc 77 100% 2.21kB/s 0:00:00 (xfr#4, to-chk=20/25) backbox-4.5.1-i386.iso 43,188,224 1% 4.26MB/s 0:08:29 sent 2,318,683,608 bytes received 446 bytes 7,302,941.90 bytes/sec total size is 2,327,091,863 speedup is 1.00 MiNi:~ rdc$
以下同步通过我们的 LAN 发送了近 2.3GB 的数据。rsync 的美妙之处在于它在逐个文件的基础上以块级别递增地工作。这意味着,如果我们只更改 1MB 文本文件中的两个字符,则在下一次同步时,只有一两个块会通过 LAN 传输!
此外,可以禁用增量功能,以支持使用更多网络带宽以减少 CPU 使用率。如果在 1Gb 专用 Backup-Lan 上每 10 分钟不断复制几个 10MB 数据库文件,这可能被证明是可取的。原因是:这些将始终发生变化,并且每 10 分钟递增传输一次,并且可能会加重远程 CPU 的负载。由于总传输负载不会超过 5 分钟,我们可能只想同步整个数据库文件。
以下是rsync最常见的开关–
rsync syntax: rsync [options] [local path] [[remote host:remote path] or [target path
Switch | 行动 |
---|---|
-a | 存档模式并假定 -r、-p、-t、-g、-l |
-d | 仅同步目录树,无文件 |
-r | 递归到目录 |
-l | 将符号链接复制为符号链接 |
-p | 保留权限 |
-g | 保留组 |
-v | 详细输出 |
-z | 通过网络链接压缩 |
-X | 保留扩展属性 |
-A | 保留 ACL |
-t | 保留时间戳 |
-W | 传输整个文件,而不是增量块 |
-u | 不要覆盖目标上的文件 |
–progress | 显示转移进度 |
–delete | 删除目标上的旧文件 |
–max-size = XXX | 要同步的最大文件大小 |
何时使用 rsync
我个人对rsync 的偏好是将文件从源主机备份到目标主机。例如,所有主目录用于数据恢复甚至异地和云中进行灾难恢复。
使用 rsync 进行本地备份
我们已经看到了如何将文件从一台主机传输到另一台主机。可以使用相同的方法在本地同步目录和文件。
让我们在 root 用户的目录中对/etc/进行手动增量备份。
首先,我们需要在 ~/root 之外为同步备份创建一个目录 –
[root@localhost rdc]# mkdir /root/etc_baks
然后,确保有足够的可用磁盘空间。
[root@localhost rdc]# du -h --summarize /etc/ 49M /etc/ [root@localhost rdc]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/cl-root 43G 15G 28G 35% /
我们很适合同步我们的整个 /etc/ 目录 –
rsync -aAvr /etc/ /root/etc_baks/
我们同步的 /etc/ 目录 –
[root@localhost etc_baks]# ls -l ./ total 1436 drwxr-xr-x. 3 root root 101 Feb 1 19:40 abrt -rw-r--r--. 1 root root 16 Feb 1 19:51 adjtime -rw-r--r--. 1 root root 1518 Jun 7 2013 aliases -rw-r--r--. 1 root root 12288 Feb 27 19:06 aliases.db drwxr-xr-x. 2 root root 51 Feb 1 19:41 alsa drwxr-xr-x. 2 root root 4096 Feb 27 17:11 alternatives -rw-------. 1 root root 541 Mar 31 2016 anacrontab -rw-r--r--. 1 root root 55 Nov 4 12:29 asound.conf -rw-r--r--. 1 root root 1 Nov 5 14:16 at.deny drwxr-xr-x. 2 root root 32 Feb 1 19:40 at-spi2 --{ condensed output }--
现在让我们做一个增量 rsync –
[root@localhost etc_baks]# rsync -aAvr --progress /etc/ /root/etc_baks/ sending incremental file list test_incremental.txt 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=1145/1282) sent 204620 bytes received 2321 bytes 413882.00 bytes/sec total size is 80245040 speedup is 387.77 [root@localhost etc_baks]#
只复制了我们的test_incremental.txt文件。
使用 rsync 进行远程差异备份
让我们在部署了备份计划的服务器上进行初始 rsync 完整备份。此示例实际上是将 Mac OS X 工作站上的文件夹备份到 CentOS 服务器。rsync 的另一个重要方面是它可以在 rsync 移植到的任何平台上使用。
MiNi:~ rdc$ rsync -aAvz Desktop/ImportanStuff/ [email protected]:Documents/RemoteStuff [email protected]'s password: sending incremental file list ./ A Guide to the WordPress REST API | Toptal.pdf Rick Cardon Tech LLC.webloc VeeamDiagram.png backbox-4.5.1-i386.iso dhcp_admin_script_update.py DDWRT/ DDWRT/.DS_Store DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin DDWRT/ddwrt_mod_notes.docx DDWRT/factory-to-ddwrt.bin open_ldap_config_notes/ open_ldap_config_notes/ldap_directory_a.png open_ldap_config_notes/open_ldap_notes.txt perl_scripts/ perl_scripts/mysnmp.pl php_scripts/ php_scripts/chunked.php php_scripts/gettingURL.php sent 2,318,281,023 bytes received 336 bytes 9,720,257.27 bytes/sec total size is 2,326,636,892 speedup is 1.00 MiNi:~ rdc$
我们现在已经将一个文件夹从工作站备份到运行 RAID6 卷的服务器上,旋转的灾难恢复介质存储在异地。使用 rsync 为我们提供了标准的 3-2-1 备份,只有一台服务器具有昂贵的冗余磁盘阵列和轮换差异备份。
现在让我们在添加一个名为test_file.txt 的新文件后使用 rsync 对同一文件夹进行另一次备份。
MiNi:~ rdc$ rsync -aAvz Desktop/ImportanStuff/ [email protected]:Documents/RemoteStuff [email protected]'s password: sending incremental file list ./ test_file.txt sent 814 bytes received 61 bytes 134.62 bytes/sec total size is 2,326,636,910 speedup is 2,659,013.61 MiNi:~ rdc$
如您所见,只有新文件通过rsync传送到服务器。差异比较是在逐个文件的基础上进行的。
需要注意的几点是: 这只会复制新文件:test_file.txt,因为它是唯一有更改的文件。rsync 使用 ssh。我们从来不需要在任何一台机器上使用我们的 root 帐户。
简单、强大且有效,rsync非常适合备份整个文件夹和目录结构。但是,rsync本身并不能自动执行该过程。这就是我们需要深入我们的工具箱并为这项工作找到最好的、小巧的、简单的工具的地方。
要使用cronjobs自动执行 rsync 备份,必须使用 SSH 密钥设置 SSH 用户进行身份验证。这与 cronjobs 相结合,使 rsync 能够按时间间隔自动完成。
使用 DD 进行逐块裸机恢复映像
DD 是一个 Linux 实用程序,自从 Linux 内核遇到 GNU 实用程序以来就一直存在。
dd简单来说就是复制选定磁盘区域的映像。然后提供复制物理磁盘的选定块的能力。因此,除非您有备份,否则一旦 dd 写入磁盘,所有块都会被替换。即使是高价的专业级数据恢复,先前数据的丢失也超过了恢复能力。
使用dd制作可引导系统映像的整个过程如下 –
- 使用可启动的 linux 发行版从 CentOS 服务器启动
- 查找要映像的可引导磁盘的名称
- 确定恢复映像的存储位置
- 查找磁盘上使用的块大小
- 启动dd镜像操作
在本教程中,为了时间和简单起见,我们将从 CentOS 虚拟机创建主引导记录的 ISO 映像。然后我们将在异地存储此图像。如果我们的 MBR 损坏并需要恢复,可以将相同的过程应用于整个可引导磁盘或分区。然而,本教程所需的时间和磁盘空间确实有点过分了。
鼓励 CentOS 管理员精通在测试环境中恢复完全可引导的磁盘/分区并执行裸机恢复。当最终需要在现实生活中与经理和几十个计算停机时间的最终用户一起完成实践时,这将减轻很多压力。在这种情况下,10 分钟搞清楚事情似乎是永恒的,让人汗流浃背。
注意– 使用 dd 时,请确保不要混淆源卷和目标卷。您可以通过将备份位置复制到引导驱动器来破坏数据和可引导服务器。或者更糟糕的是,通过使用 DD 在非常低的级别复制数据来永远破坏数据。
以下是dd的常用命令行开关和参数–
Switch | 行动 |
---|---|
if= | 在要复制的文件或源中 |
of= | 输出文件或输入文件的副本 |
bs | 设置输入和输出块大小 |
obs | 设置输出文件块大小 |
ibs | 设置输入文件块大小 |
count | 设置要复制的块数 |
conv | 添加用于成像的额外选项 |
Noerror | 不要停止处理错误 |
sync | 在出现错误或未对准时填充未安装的输入块 |
块大小注意事项– dd 的默认块大小为 512 字节。这是低密度硬盘驱动器的标准块大小。今天的更高密度 HDD 已增加到 4096 字节 (4kB) 块大小,以支持 1TB 和更大的磁盘。因此,在将 dd 用于更新、更高容量的硬盘之前,我们需要检查磁盘块大小。
在本教程中,我们将使用在 VMWare 中运行的 CentOS 安装,而不是使用dd在生产服务器上工作。我们还将配置 VMWare 以引导可引导的 Linux ISO 映像,而不是使用可引导的 USB 记忆棒。
首先,我们需要下载名为 – CentOS Gnome ISO的 CentOS 映像。这几乎是 3GB,建议始终保留一份副本,用于创建可引导的 USB 拇指驱动器并引导到虚拟服务器安装以进行故障排除和裸机映像。
其他可启动的 Linux 发行版也能正常工作。Linux Mint 可用于可引导 ISO,因为它具有强大的硬件支持和用于维护的精美 GUI 磁盘工具。
CentOS GNOME Live 可启动映像可从以下网址下载:http : //buildlogs.centos.org/rolling/7/isos/x86_64/CentOS-7-x86_64-LiveGNOME.iso
让我们将 VMWare Workstation 安装配置为从 Linux 可启动映像启动。这些步骤适用于 OS X 上的 VMWare。但是,它们在 Linux、Windows 甚至 Virtual Box 上的 VMWare Workstation 中是相似的。
注意– 使用 Virtual Box 或 VMWare Workstation 等虚拟桌面解决方案是设置实验室场景以学习 CentOS 管理任务的好方法。它提供了安装多个 CentOS 安装的能力,几乎没有硬件配置让人们专注于管理,甚至在进行更改之前保存服务器状态。
首先让我们配置一个虚拟 cd-rom 并将我们的 ISO 映像附加到引导而不是虚拟 CentOS 服务器安装 –
现在,设置启动盘 –
现在启动时,我们的虚拟机将从 CentOS 可启动 ISO 映像启动,并允许访问先前配置的 Virtual CentOS 服务器上的文件。
让我们检查我们的磁盘,看看我们想从哪里复制 MBR(压缩输出如下)。
MiNt ~ # fdisk -l Disk /dev/sda: 60 GiB, 21474836480 bytes, 41943040 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
我们已经找到了两个物理磁盘:sda和sdb。每个都有一个 512 字节的块大小。因此,我们现在将运行dd命令来复制 SDA1 上 MBR 的前 512 个字节。
最好的方法是 –
[root@mint rdc]# dd if=/dev/sda bs=512 count=1 | gzip -c > /mnt/sdb/mbr.iso.gz 1+0 records in 1+0 records out 512 bytes copied, 0.000171388 s, 3.0 MB/s [root@mint rdc]# ls /mnt/sdb/ mbr-iso.gz [root@mint rdc]#
就这样,我们有主引导记录的完整图像。如果我们有足够的空间来镜像启动驱动器,我们可以轻松制作完整的系统启动镜像 –
dd if=/dev/INPUT/DEVICE-NAME-HERE conv=sync,noerror bs=4K | gzip -c > /mnt/sdb/boot-server-centos-image.iso.gz
所述CONV =同步时使用的字节必须为一个物理介质对准。在这种情况下,如果没有读取精确的 4K 对齐,则 dd 可能会出错(例如……一个只有 3K 但需要在磁盘上占用最少单个 4K 块的文件。或者,只是读取错误并且dd 无法读取文件。)。因此,带有conv=sync,noerror 的dd将在 4K 块对齐中用微不足道但有用的数据填充 3K 到物理介质。虽然不会出现可能结束大型操作的错误。
当处理来自磁盘的数据时,我们总是希望包括:conv=sync,noerror参数。
这仅仅是因为磁盘不是像 TCP 数据那样的流。它们由对齐到特定大小的块组成。例如,如果我们有 512 字节的块,一个只有 300 字节的文件仍然需要完整的 512 字节磁盘空间(可能有 2 个块用于 inode 信息,如权限和其他文件系统信息)。
使用 gzip 和 tar 进行安全存储
gzip 和 tar 是 CentOS 管理员必须习惯使用的两个实用程序。它们不仅仅用于简单地解压缩档案。
在 CentOS Linux 中使用 Gnu Tar
Tar 是一个类似于Windows上的winrar的归档实用程序。它的名称Tape Archive缩写为tar几乎概括了该实用程序。tar将获取文件并将它们放入存档中以方便逻辑。因此,而不是存储在 /etc 中的数十个文件。我们可以将它们“tar”到一个存档中,以方便备份和存储。
tar多年来一直是在 Unix 和 Linux 上存储归档文件的标准。因此,将 tar 与gzip或bzip一起使用被认为是每个系统上存档的最佳实践。
以下是与 tar 一起使用的常用命令行开关和选项列表 –
Switch | 行动 |
---|---|
-c | 创建一个新的 .tar 存档 |
-C | 提取到不同的目录 |
-j | 使用 bzip2 压缩 |
-z | 使用 gzip 压缩 |
-v | 详细显示归档进度 |
-t | 列出存档内容 |
-f | 存档的文件名 |
-x | 提取 tar 存档 |
以下是创建tar存档的基本语法。
tar -cvf [tar archive name]
使用 tar 压缩机制的注意事项– 建议在使用 tar 时坚持使用两种常见压缩方案之一:gzip 和 bzip2。gzip 文件消耗较少的 CPU 资源,但通常较大。虽然 bzip2 需要更长的时间来压缩,但它们会使用更多的 CPU 资源;但会导致较小的最终文件大小。
使用文件压缩时,我们总是希望使用标准文件扩展名,让包括我们自己在内的每个人都知道(而不是通过反复试验来猜测)提取档案所需的压缩方案。
bzip2 | .tbz |
bzip2 | .tar.tbz |
bzip2 | .tb2 |
gzip | .tar.gz |
gzip | .tgz |
当需要在 Windows 机器上提取档案或在 Windows 上使用时,建议使用.tar.tbz或.tar.gz,因为大多数三个字符的单个扩展名会混淆 Windows 和仅 Windows 管理员(但是,即有时是想要的结果)
让我们从从 Mac 工作站复制的远程备份创建一个gzip 压缩的tar 存档 –
[rdc@mint Documents]$ tar -cvz -f RemoteStuff.tgz ./RemoteStuff/ ./RemoteStuff/ ./RemoteStuff/.DS_Store ./RemoteStuff/DDWRT/ ./RemoteStuff/DDWRT/.DS_Store ./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin ./RemoteStuff/DDWRT/ddwrt_mod_notes.docx ./RemoteStuff/DDWRT/factory-to-ddwrt.bin ./RemoteStuff/open_ldap_config_notes/ ./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png ./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt ./RemoteStuff/perl_scripts/ ./RemoteStuff/perl_scripts/mysnmp.pl ./RemoteStuff/php_scripts/ ./RemoteStuff/php_scripts/chunked.php ./RemoteStuff/php_scripts/gettingURL.php ./RemoteStuff/A Guide to the WordPress REST API | Toptal.pdf ./RemoteStuff/Rick Cardon Tech LLC.webloc ./RemoteStuff/VeeamDiagram.png ./RemoteStuff/backbox-4.5.1-i386.iso ./RemoteStuff/dhcp_admin_script_update.py ./RemoteStuff/test_file.txt [rdc@mint Documents]$ ls -ld RemoteStuff.tgz -rw-rw-r--. 1 rdc rdc 2317140451 Mar 12 06:10 RemoteStuff.tgz
注意– 我们没有将所有文件直接添加到存档中,而是存档了整个文件夹RemoteStuff。这是最简单的方法。仅仅是因为在提取时,整个目录RemoteStuff将与当前工作目录中的所有文件一起提取为./currentWorkingDirectory/RemoteStuff/
现在让我们解压缩/root/主目录中的存档。
[root@centos ~]# tar -zxvf RemoteStuff.tgz ./RemoteStuff/ ./RemoteStuff/.DS_Store ./RemoteStuff/DDWRT/ ./RemoteStuff/DDWRT/.DS_Store ./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin ./RemoteStuff/DDWRT/ddwrt_mod_notes.docx ./RemoteStuff/DDWRT/factory-to-ddwrt.bin ./RemoteStuff/open_ldap_config_notes/ ./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png ./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt ./RemoteStuff/perl_scripts/ ./RemoteStuff/perl_scripts/mysnmp.pl ./RemoteStuff/php_scripts/ ./RemoteStuff/php_scripts/chunked.php ./RemoteStuff/php_scripts/gettingURL.php ./RemoteStuff/A Guide to the WordPress REST API | Toptal.pdf ./RemoteStuff/Rick Cardon Tech LLC.webloc ./RemoteStuff/VeeamDiagram.png ./RemoteStuff/backbox-4.5.1-i386.iso ./RemoteStuff/dhcp_admin_script_update.py ./RemoteStuff/test_file.txt [root@mint ~]# ping www.google.com
如上所示,所有文件都被简单地提取到我们当前工作目录中的包含目录中。
[root@centos ~]# ls -l total 2262872 -rw-------. 1 root root 1752 Feb 1 19:52 anaconda-ks.cfg drwxr-xr-x. 137 root root 8192 Mar 9 04:42 etc_baks -rw-r--r--. 1 root root 1800 Feb 2 03:14 initial-setup-ks.cfg drwxr-xr-x. 6 rdc rdc 4096 Mar 10 22:20 RemoteStuff -rw-r--r--. 1 root root 2317140451 Mar 12 07:12 RemoteStuff.tgz -rw-r--r--. 1 root root 9446 Feb 25 05:09 ssl.conf [root@centos ~]#
使用 gzip 压缩文件备份
如前所述,我们可以使用带有-j或-z命令行开关的tar 中的 bzip2 或 gzip 。我们还可以使用 gzip 来压缩单个文件。但是,单独使用 bzip 或 gzip 无法提供与tar结合使用时那么多的功能。
使用gzip 时,默认操作是删除原始文件,将每个文件替换为添加 .gz 扩展名的压缩版本。
gzip 的一些常见命令行开关是 –
Switch | 行动 |
---|---|
-c | 放入存档后保留文件 |
-l | 获取压缩存档的统计信息 |
-r | 递归压缩目录中的文件 |
-1 thru 9 | 以 1 到 9 的比例指定压缩级别 |
gzip或多或少在逐个文件的基础上工作,而不是像某些 Windows O/S zip 实用程序那样在存档基础上工作。这样做的主要原因是tar已经提供了高级归档功能。gzip旨在仅提供压缩机制。
因此,在考虑gzip 时,请考虑单个文件。考虑多个文件时,请考虑tar档案。现在让我们用我们之前的tar档案来探索这个。
注意– 经验丰富的 Linux 专业人士通常将 tarred 存档称为 tarball。
让我们从rsync备份制作另一个tar存档。
[root@centos Documents]# tar -cvf RemoteStuff.tar ./RemoteStuff/ [root@centos Documents]# ls RemoteStuff.tar RemoteStuff/
为了演示,让我们gzip压缩新创建的压缩包,并告诉gzip的保留旧的文件。默认情况下,如果没有-c选项,gzip 将用.gz文件替换整个 tar 存档。
[root@centos Documents]# gzip -c RemoteStuff.tar > RemoteStuff.tar.gz [root@centos Documents]# ls RemoteStuff RemoteStuff.tar RemoteStuff.tar.gz We now have our original directory, our tarred directory and finally our gziped tarball.
让我们尝试使用gzip测试-l开关。
[root@centos Documents]# gzip -l RemoteStuff.tar.gz compressed uncompressed ratio uncompressed_name 2317140467 2326661120 0.4% RemoteStuff.tar [root@centos Documents]#
为了演示gzip与 Windows Zip 实用程序有何不同,让我们在文本文件文件夹上运行 gzip。
[root@centos Documents]# ls text_files/ file1.txt file2.txt file3.txt file4.txt file5.txt [root@centos Documents]#
现在让我们使用 -r 选项递归压缩目录中的所有文本文件。
[root@centos Documents]# gzip -9 -r text_files/ [root@centos Documents]# ls ./text_files/ file1.txt.gz file2.txt.gz file3.txt.gz file4.txt.gz file5.txt.gz [root@centos Documents]#
看?不是一些人可能预料到的。所有原始文本文件都被删除,每个文件都被单独压缩。由于这种行为,最好在需要处理单个文件时单独考虑gzip。
使用tarballs,让我们将rsynced tarball解压缩到一个新目录中。
[root@centos Documents]# tar -C /tmp -zxvf RemoteStuff.tar.gz ./RemoteStuff/ ./RemoteStuff/.DS_Store ./RemoteStuff/DDWRT/ ./RemoteStuff/DDWRT/.DS_Store ./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin ./RemoteStuff/DDWRT/ddwrt_mod_notes.docx ./RemoteStuff/DDWRT/factory-to-ddwrt.bin ./RemoteStuff/open_ldap_config_notes/ ./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png ./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt ./RemoteStuff/perl_scripts/ ./RemoteStuff/perl_scripts/mysnmp.pl ./RemoteStuff/php_scripts/ ./RemoteStuff/php_scripts/chunked.php
如上所示,我们将 tarball 提取并解压到 /tmp 目录中。
[root@centos Documents]# ls /tmp hsperfdata_root RemoteStuff
加密 TarBall 档案
在灾难恢复的情况下,加密用于存储组织其他员工可能需要访问的安全文档的 tarball 档案可能是一个棘手的概念。基本上有三种方法可以做到这一点:使用 GnuPG,或使用 openssl,或使用第三方实用程序。
GnuPG 主要是为非对称加密而设计的,并且考虑到身份关联而不是密码短语。没错,它可以与对称加密一起使用,但这不是 GnuPG 的主要优势。因此,当比原来的人更多的人可能需要访问时,我会打折扣 GnuPG 存储具有物理安全性的档案(例如,可能是公司经理想要防止管理员持有王国的所有密钥作为杠杆)。
像 GnuPG 这样的 Openssl 可以做我们想做的事,并且随 CentOS 一起提供。但同样,加密并不是专门为做我们想做的事情而设计的,并且加密在安全社区中受到了质疑。
我们选择的是一个名为7zip的实用程序。7zip 是一个类似于gzip的压缩实用程序,但具有更多功能。与 Gnu Gzip 一样,7zip 及其标准属于开源社区。我们只需要从我们的 EHEL 存储库安装 7zip(下一章将详细介绍如何安装扩展企业存储库)。
在 Centos 上安装 7zip
一旦我们的 EHEL 存储库在 CentOS 中加载和配置,7zip 是一个简单的安装。
[root@centos Documents]# yum -y install p7zip.x86_64 p7zip-plugins.x86_64 Loaded plugins: fastestmirror, langpacks base | 3.6 kB 00:00:00 epel/x86_64/metalink | 13 kB 00:00:00 epel | 4.3 kB 00:00:00 extras | 3.4 kB 00:00:00 updates | 3.4 kB 00:00:00 (1/2): epel/x86_64/updateinfo | 756 kB 00:00:04 (2/2): epel/x86_64/primary_db | 4.6 MB 00:00:18 Loading mirror speeds from cached hostfile --> Running transaction check ---> Package p7zip.x86_64 0:16.02-2.el7 will be installed ---> Package p7zip-plugins.x86_64 0:16.02-2.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved
就这么简单,7zip 已安装并准备好与 256 位 AES 加密一起用于我们的 tarball 档案。
现在让我们使用 7z 用密码加密我们的 gzip 压缩文件。这样做的语法非常简单 –
7z a -p <output filename><input filename>
其中,a:添加到存档,以及-p:加密并提示输入密码
[root@centos Documents]# 7z a -p RemoteStuff.tgz.7z RemoteStuff.tar.gz 7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21 p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,1 CPU Intel(R) Core(TM) i5-4278U CPU @ 2.60GHz (40651),ASM,AES-NI) Scanning the drive: 1 file, 2317140467 bytes (2210 MiB) Creating archive: RemoteStuff.tgz.7z Items to compress: 1 Enter password (will not be echoed): Verify password (will not be echoed) : Files read from disk: 1 Archive size: 2280453410 bytes (2175 MiB) Everything is Ok [root@centos Documents]# ls RemoteStuff RemoteStuff.tar RemoteStuff.tar.gz RemoteStuff.tgz.7z slapD text_files [root@centos Documents]#
现在,我们有了 .7z 存档,它使用 256 位 AES 加密 gzip 压缩包。
注意– 7zip 使用 AES 256 位加密和密码和计数器的 SHA-256 散列,重复多达 512K 次以导出密钥。如果使用复杂的密钥,这应该足够安全。
对于较大的档案,进一步加密和重新压缩档案的过程可能需要一些时间。
7zip 是一种高级产品,具有比 gzip 或 bzip2 更多的功能。然而,它不是 CentOS 或 Linux 世界的标准。因此,应尽可能经常使用其他实用程序。
Linux 管理员 – 系统更新
CentOS 7 系统可以通过三种方式更新 –
- 手动
- 自动地
- 针对重大安全问题手动更新并配置自动更新
在生产环境中,建议对生产服务器手动更新。或者至少建立一个更新计划,以便管理员可以确保对业务运营至关重要的服务。
一个简单的安全更新可能会导致需要管理员升级和重新配置的常见应用程序的递归问题,这似乎是合理的。因此,在首先在开发服务器和桌面上进行测试之前,不要在生产中安排自动更新。
手动更新 CentOS 7
要更新 CentOS 7,我们需要熟悉yum命令。yum用于处理 CentOS 7 中的软件包存储库。yum是常用的工具 –
- 更新 CentOS 7 Linux 系统
- 搜索包
- 安装包
- 检测并安装包所需的依赖项
为了使用yum进行更新,您的 CentOS 服务器需要连接到 Internet。大多数配置将安装一个基本系统,然后使用yum查询主要 CentOS 存储库以获取软件包中的附加功能并应用系统更新。
我们已经使用yum安装了一些软件包。使用yum 时,您始终需要以 root 用户身份执行此操作。或具有 root 访问权限的用户。因此,让我们搜索并安装一个名为nano的易于使用的文本编辑器。
[root@centos rdc]# yum search nano Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirror.rackspace.com * epel: mirror.chpc.utah.edu * extras: repos.forethought.net * updates: repos.forethought.net ====================================================================== N/S matched: nano ====================================================================== nano.x86_64 : A small text editor nodejs-nano.noarch : Minimalistic couchdb driver for Node.js perl-Time-Clock.noarch : Twenty-four hour clock object with nanosecond precision Name and summary matches only, use "search all" for everything. [root@centos rdc]#
现在,让我们安装nano文本编辑器。
[root@centos rdc]# yum install nano Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirror.keystealth.org * epel: pubmirror1.math.uh.edu * extras: centos.den.host-engine.com * updates: repos.forethought.net Resolving Dependencies --> Running transaction check ---> Package nano.x86_64 0:2.3.1-10.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: nano x86_64 2.3.1-10.el7 base 440 k Transaction Summary Install 1 Package Total download size: 440 k Installed size: 1.6 M Is this ok [y/d/N]: y Downloading packages: nano-2.3.1-10.el7.x86_64.rpm | 440 kB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : nano-2.3.1-10.el7.x86_64 1/1 Verifying : nano-2.3.1-10.el7.x86_64 1/1 Installed: nano.x86_64 0:2.3.1-10.el7 Complete! [root@centos rdc]#
我们已经安装了 nano 文本编辑器。这种方法,IMO,比在网站上搜索实用程序和手动运行安装程序要容易得多。此外,存储库使用数字签名来验证包,确保它们来自 yum 的可信来源。在信任新存储库时,由管理员来验证真实性。这就是为什么厌倦第三方存储库被认为是最佳实践的原因。
Yum 也可用于删除包。
[root@centos rdc]# yum remove nano Loaded plugins: fastestmirror, langpacks Resolving Dependencies --> Running transaction check ---> Package nano.x86_64 0:2.3.1-10.el7 will be erased --> Finished Dependency Resolution Dependencies Resolved
现在让我们检查更新。
[root@centos rdc]# yum list updates Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirror.keystealth.org * epel: pubmirror1.math.uh.edu * extras: centos.den.host-engine.com * updates: repos.forethought.net Updated Packages NetworkManager.x86_64 1:1.4.0-17.el7_3 updates NetworkManager-adsl.x86_64 1:1.4.0-17.el7_3 updates NetworkManager-glib.x86_64 1:1.4.0-17.el7_3 updates NetworkManager-libnm.x86_64 1:1.4.0-17.el7_3 updates NetworkManager-team.x86_64 1:1.4.0-17.el7_3 updates NetworkManager-tui.x86_64 1:1.4.0-17.el7_3 updates NetworkManager-wifi.x86_64 1:1.4.0-17.el7_3 updates audit.x86_64 2.6.5-3.el7_3.1 updates audit-libs.x86_64 2.6.5-3.el7_3.1 updates audit-libs-python.x86_64
如图所示,我们有几十个更新等待安装。实际上,由于我们尚未配置自动更新,因此总共有大约 100 个更新。因此,让我们安装所有挂起的更新。
[root@centos rdc]# yum update Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.usc.edu * epel: pubmirror1.math.uh.edu * extras: repos.forethought.net * updates: repos.forethought.net Resolving Dependencies --> Running transaction check ---> Package NetworkManager.x86_64 1:1.4.0-14.el7_3 will be updated ---> Package NetworkManager.x86_64 1:1.4.0-17.el7_3 will be an update selinux-policy noarch 3.13.1102.el7_3.15 updates 414 k selinux-policy-targeted noarch 3.13.1102.el7_3.15 updates 6.4 M systemd x86_64 21930.el7_3.7 updates 5.2 M systemd-libs x86_64 21930.el7_3.7 updates 369 k systemd-python x86_64 21930.el7_3.7 updates 109 k systemd-sysv x86_64 21930.el7_3.7 updates 63 k tcsh x86_64 6.18.01-13.el7_3.1 updates 338 k tzdata noarch 2017a1.el7 updates 443 k tzdata-java noarch 2017a1.el7 updates 182 k wpa_supplicant x86_64 1:2.021.el7_3 updates 788 k Transaction Summary =============================================================================== Install 2 Packages Upgrade 68 Packages Total size: 196 M Total download size: 83 M Is this ok [y/d/N]:
按“y”键后,CentOS 7 的更新将开始。yum更新时经历的一般过程是 –
- 检查当前包
- 在存储库中查找更新的软件包
- 计算更新包所需的依赖项
- 下载更新
- 安装更新
现在,让我们确保我们的系统是最新的 –
[root@centos rdc]# yum list updates Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * updates: mirror.compevo.com [root@centos rdc]#
如您所见,没有列出更新。
为 YUM 配置自动更新
在企业环境中,如前所述,自动更新可能是也可能不是首选的安装方法。让我们回顾一下使用 yum 配置自动更新的步骤。
首先,我们安装一个名为yum-cron的包。
[root@centos rdc]# yum -y install yum-cron Install 1 Package Total download size: 61 k Installed size: 51 k Downloading packages: yum-cron-3.4.3-150.el7.centos.noarch.rpm | 61 kB 00:00:01 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : yum-cron-3.4.3-150.el7.centos.noarch 1/1 Verifying : yum-cron-3.4.3-150.el7.centos.noarch 1/1 Installed: yum-cron.noarch 0:3.4.3-150.el7.centos Complete! [root@centos rdc]#
默认情况下,yum-cron只会下载更新而不安装它们。是否自动安装更新由管理员决定。最大的警告是:某些更新需要重新启动系统。此外,某些更新可能需要在服务再次运行之前更改配置。
在以下情况下更新依赖项可能会产生递归问题 –
-
yum 推荐了某个库的更新
-
该库仅支持 Apache Server 2.4,但我们有服务器 2.3
-
我们的商业网站依赖于特定版本的 PHP
-
为库安装的新版Apache需要升级PHP
-
我们的生产 Web 应用程序尚未使用较新的 PHP 版本进行测试
Yum 可能会在没有通知的情况下自动升级 Apache 和 PHP,除非配置为不这样做。
如果所有 5 种情况都出现,则可能导致从早上头疼到可能暴露用户数据的安全隐患。虽然前面提到的例子是一场完美的风暴,但我们从不希望这样的场景发生。
由于更新重新启动和重新配置可能导致停机,管理员有责任访问从恢复服务所需的时间造成的潜在收入损失的可能情况。对于拥有数百万客户的每天价值数百万美元的电子商务网站而言,这种做法可能不够保守。
现在让我们配置yum-cron以自动安装系统更新。
[root@centos rdc]# vim /etc/yum/yum-cron.conf # Whether updates should be applied when they are available. Note # that download_updates must also be yes for the update to be applied. apply_updates = yes
我们想将apply_updates = no更改为apply_updates = yes。现在让我们为yum-cron配置更新间隔。
同样,是否使用自动更新和按需安装更新可能是一把双刃剑,需要管理员针对每种独特情况进行考虑。
Linux 管理员 – Shell 脚本
Bash Shell 简介
就像 GNU Linux 的风格一样,shell 有很多种,兼容性也各不相同。CentOS 中的默认 shell 称为 Bash 或 Bourne Again Shell。Bash shell 是由 Stephen Bourne 开发的 Bourne Shell 的现代修改版本。Bash 是由 Ken Thompson 和 Dennis Ritchie 在贝尔实验室开发的 Unix 操作系统上原始 Thompson Shell 的直接替代品(Stephen Bourne 也受雇于贝尔实验室)
每个人都有自己喜欢的贝壳,每个人都有自己的长处和难点。但在大多数情况下,Bash 将成为所有 Linux 发行版和最常用的默认 shell。有了经验,每个人都会想探索和使用最适合他们的 shell。然而同时,每个人也会想要掌握 Bash shell。
其他 Linux shell 包括:Tcsh、Csh、Ksh、Zsh 和 Fish。
对于 CentOS 管理员来说,培养使用任何 Linux shell 的专家级技能是极其重要的。正如我们之前提到的,与 Windows 不同,Linux 的核心是一个命令行操作系统。shell 只是一个用户界面,允许管理员(或用户)向操作系统发出命令。如果 Linux 系统管理员是航空公司的飞行员,那么使用 shell 将类似于让飞机脱离自动驾驶并手动控制以实现更机动的飞行。
Linux shell,如 Bash,在计算机科学术语中被称为命令行解释器。Microsoft Windows 还有两个命令行解释器,称为 DOS(不要与原始 DOS 操作系统混淆)和 PowerShell。
大多数像 Bash 这样的现代 shell 提供了允许更复杂的shell 脚本来自动化常见和复杂任务的构造。
构造包括 –
- 脚本流控制(ifthen 和 else)
- 逻辑比较运算(大于、小于、等于)
- 循环
- 变量
- 参数定义操作(类似于带命令的开关)
使用 Shell 脚本与脚本语言
在考虑执行任务时,管理员经常会问自己:我应该使用 shell 脚本还是脚本语言,如 Perl、Ruby 或 Python?
这里没有固定的规则。shell 与脚本语言之间只有典型的区别。
壳
Shell 允许在 Linux 操作系统上使用 Linux 命令,例如sed、grep、tee、cat和所有其他基于命令行的实用程序。事实上,几乎任何命令行 Linux 实用程序都可以在您的 shell 中编写脚本。
使用 shell 的一个很好的例子是一个快速脚本来检查主机列表以进行 DNS 解析。
我们简单的 Bash 脚本来检查 DNS 名称 –
#!/bin/bash for name in $(cat $1); do host $name.$2 | grep "has address" done exit
用于测试 DNS 解析的小词表 –
dns www test dev mail rdp remote
针对 google.com 域的输出 –
[rdc@centos ~]$ ./dns-check.sh dns-names.txt google.com -doing dns dns.google.com has address 172.217.6.46 -doing www www.google.com has address 172.217.6.36 -doing test -doing dev -doing mail googlemail.l.google.com has address 172.217.6.37 -doing rdp -doing remote [rdc@centos ~]$
在我们的 shell 中利用简单的 Linux 命令,我们能够制作一个简单的 5 行脚本来审核单词列表中的 DNS 名称。即使在使用很好实现的 DNS 库时,这在 Perl、Python 或 Ruby 中也需要相当长的时间。
脚本语言
脚本语言将在 shell 之外提供更多控制。上面的 Bash 脚本在 Linux主机命令周围使用了一个包装器。如果我们想做更多事情并让我们自己的应用程序像主机一样在 shell 之外进行交互怎么办?这是我们将使用脚本语言的地方。
此外,使用高度维护的脚本语言,我们知道我们的操作在大多数情况下可以跨不同系统工作。例如,Python 3.5 可以在安装了相同库的任何其他运行 Python 3.5 的系统上运行。不是这样,如果我们想在 Linux 和 HP-UX 上运行我们的 BASH 脚本。
有时,脚本语言和强大的 shell 之间的界限会变得模糊。可以使用 Python、Perl 或 Ruby 自动执行 CentOS Linux 管理任务。这样做真的很平常。此外,富裕的 shell 脚本开发人员在 Bash 中制作了一个简单但功能强大的 Web 服务器守护程序。
凭借在脚本语言和 shell 中自动化任务方面的经验,CentOS 管理员将能够在需要解决问题时快速确定从哪里开始。使用 shell 脚本启动项目是很常见的。然后,随着项目变得更加复杂,逐渐使用脚本(或编译)语言。
此外,可以对项目的不同部分同时使用脚本语言和 shell 脚本。一个例子可能是用于抓取网站的 Perl 脚本。然后,使用 shell 脚本使用sed、awk和egrep进行解析和格式化。最后,使用 PHP 脚本通过 Web GUI 将格式化数据插入 MySQL 数据库。
有了 shell 背后的一些理论,让我们从 CentOS 中的 Bash shell 自动化任务的基本构建块开始。
输入输出和重定向
处理标准输出到另一个命令 –
[rdc@centos ~]$ cat ~/output.txt | wc -l 6039 [rdc@centos ~]$
上面,我们已经将cat’sstoud传递给wc进行管道字符处理。wc然后处理cat的输出,将 output.txt 的行数打印到终端。将管道字符视为从一个命令传递输出的“管道”,由下一个命令处理。
以下是处理命令重定向时要记住的关键概念 –
Number | 文件描述符 | 特点 |
---|---|---|
0 | 标准输入 | < |
1 | 标准输出 | > |
2 | 标准误 | |
附加标准输出 | >> | |
分配重定向 | & | |
管道标准输出到标准输入 | | |
我们在第一章中介绍了这一点,并没有真正谈论重定向或分配重定向。在 Linux 中打开终端时,您的 shell 被视为以下的默认目标 –
- 标准输入 < 0
- 标准输出 > 1
- 标准错误 2
让我们看看这是如何工作的 –
[rdc@centos ~]$ lsof -ap $BASHPID -d 0,1,2 COMMAND PID USER **FD** TYPE DEVICE SIZE/OFF NODE NAME bash 13684 rdc **0u** CHR 136,0 0t0 3 /dev/pts/0 bash 13684 rdc **1u** CHR 136,0 0t0 3 /dev/pts/0 bash 13684 rdc **2u** CHR 136,0 0t0 3 /dev/pts/0 [rdc@centos ~]$
/dev/pts/0是我们的伪终端。CentOS Linux 着眼于此,将我们的开放式终端应用程序视为真正的终端,键盘和显示器通过串行接口插入。然而,就像管理程序将硬件抽象为操作系统一样,/dev/pts将我们的终端抽象为应用程序。
从上面的lsof命令,我们可以在FD列下看到所有三个文件描述符都设置为我们的虚拟终端 (0,1,2)。我们现在可以发送命令、查看命令输出以及与命令相关的任何错误。
以下是 STDIN 和 STDOUT 的示例 –
标准输出
[root@centosLocal centos]# echo "I am coming from Standard output or STDOUT." > output.txt && cat output.txt I am coming from Standard output or STDOUT. [root@centosLocal centos]#
也可以将stdout和stderr发送到单独的文件 –
bash-3.2# find / -name passwd 1> good.txt 2> err.txt bash-3.2# cat good.txt /etc/pam.d/passwd /etc/passwd bash-3.2# cat err.txt find: /dev/fd/3: Not a directory find: /dev/fd/4: Not a directory bash-3.2#
在搜索整个文件系统时,遇到了两个错误。每个都被发送到一个单独的文件供以后阅读,而返回的结果则被放入一个单独的文本文件中。
在执行将大量数据输出到终端(如编译应用程序)的操作时,将stderr发送到文本文件会很有用。这将允许细读可能从终端回滚历史记录中丢失的错误。
将 STDOUT 传递给文本文件时的一个注意事项是>>和>之间的区别。双“>>”将附加到文件,而单数形式将破坏文件并写入新内容(因此所有先前的数据都将丢失)。
标准输入
[root@centosLocal centos]# cat < stdin.txt Hello, I am being read form Standard input, STDIN. [root@centosLocal centos]#
在上面的命令中,文本文件stdin.txt被重定向到cat命令,该命令将其内容回显到STDOUT。
管道字符“|”
管道字符将获取第一个命令的输出,将其作为输入传递给下一个命令,允许第二个命令对输出执行操作。
现在,让我们将 cat 的标准输出“管道”到另一个命令 –
[root@centosLocal centos]# cat output.txt | wc -l 2 [root@centosLocal centos]#
上面,wc对从管道传递的cat 的输出执行计算。管道命令在过滤grep或egrep的输出时特别有用–
[root@centosLocal centos]# egrep "^[0-9]{4}$" /usr/dicts/nums | wc -l 9000 [root@centosLocal centos]#
在上面的命令中,我们将每 4 位数字从包含 65535 中所有数字的文本文件传递给wc,并通过egrep过滤器。
使用 & 重定向输出
可以使用&字符重定向输出。如果我们想将 STDOUT 和 STDERR 的输出定向到同一个文件中,可以按如下方式完成 –
[root@centosLocal centos]# find / -name passwd > out.txt 2>&1 [root@centosLocal centos]# cat out.txt find: /dev/fd/3: Not a directory find: /dev/fd/4: Not a directory /etc/passwd [root@centosLocal centos]#
使用&字符重定向的工作方式如下:首先,输出被重定向到out.txt。其次,STDERR 或文件描述符 2 被重新分配到与 STDOUT 相同的位置,在本例中为out.txt。
重定向非常有用,在解决处理大型文本文件、编译源代码、重定向 shell 脚本中的输出以及发出复杂的 Linux 命令时出现的问题时非常有用。
虽然功能强大,但对于新的 CentOS 管理员来说,重定向可能会变得复杂。练习、研究和偶尔向 Linux 论坛(例如 Stack Overflow Linux)提问将有助于解决高级解决方案。
Bash Shell 构造
现在我们对Bash shell 的工作原理有了很好的了解,让我们学习一些常用的基本构造来编写脚本。在本节中,我们将探讨 –
BASH 故障排除提示
与专用脚本语言相比,BASH 可能有点棘手。BASH 脚本中的一些最大问题是由于错误地转义或不转义传递给 shell 的脚本操作。如果您已经查看了几次脚本并且它没有按预期工作,请不要担心。即使对于那些每天使用 BASH 创建复杂脚本的人来说,这也很常见。
快速搜索 Google 或在专家 Linux 论坛上注册以提出问题将导致快速解决。很可能有人遇到了确切的问题并且已经解决了。
BASH 脚本是一种很好的方法,可以为从自动化管理任务到创建有用工具的所有内容快速创建强大的脚本。成为专家级 BASH 脚本开发人员需要时间和练习。因此,尽可能使用 BASH 脚本,它是 CentOS 管理工具箱中的一个很好的工具。
Linux 管理员 – 包管理
CentOS 中的软件包管理可以通过两种方式进行:从终端和从图形用户界面。
大多数情况下,CentOS 管理员的大部分时间都会使用终端。为 CentOS 更新和安装软件包也不例外。考虑到这一点,我们将首先探索终端中的包管理,然后接触使用 CentOS 提供的图形包管理工具。
YUM 包管理器
YUM是 CentOS 中提供的包管理工具。我们在前面的章节中已经简要地谈到了这个话题。在本章中,我们将从干净的 CentOS 安装开始工作。我们将首先完全更新我们的安装,然后安装一个应用程序。
YUM为 Linux 中的软件安装和管理带来了很长的路要走。除了过时的软件包之外,YUM还会“自动”检查过时的依赖项。与过去从源代码编译每个应用程序相比,这确实减轻了 CentOS 管理员的负担。
百胜检查更新
检查可以更新候选的包。在本教程中,我们将假设这是一个面向 Internet 的生产系统,在升级包之前没有需要 DevOps 测试的生产应用程序。现在让我们将更新的候选项安装到系统上。
[root@localhost rdc]# yum check-update Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirror.scalabledns.com * extras: mirror.scalabledns.com * updates: mirror.clarkson.edu NetworkManager.x86_64 1:1.4.0-19.el7_3 updates NetworkManager-adsl.x86_64 1:1.4.0-19.el7_3 updates NetworkManager-glib.x86_64 1:1.4.0-19.el7_3 updates NetworkManager-libnm.x86_64 1:1.4.0-19.el7_3 updates NetworkManager-team.x86_64 1:1.4.0-19.el7_3 updates NetworkManager-tui.x86_64 1:1.4.0-19.el7_3 updates NetworkManager-wifi.x86_64 1:1.4.0-19.el7_3 updates audit.x86_64 2.6.5-3.el7_3.1 updates vim-common.x86_64 2:7.4.160-1.el7_3.1 updates vim-enhanced.x86_64 2:7.4.160-1.el7_3.1 updates vim-filesystem.x86_64 2:7.4.160-1.el7_3.1 updates vim-minimal.x86_64 2:7.4.160-1.el7_3.1 updates wpa_supplicant.x86_64 1:2.0-21.el7_3 updates xfsprogs.x86_64 4.5.0-9.el7_3 updates [root@localhost rdc]#
百胜更新
这将安装所有更新的候选,使您的 CentOS 安装成为最新。对于全新安装,这可能需要一些时间,具体取决于您的安装和 Internet 连接速度。
[root@localhost rdc]# yum update vim-minimal x86_64 2:7.4.160-1.el7_3.1 updates 436 k wpa_supplicant x86_64 1:2.0-21.el7_3 updates 788 k xfsprogs x86_64 4.5.0-9.el7_3 updates 895 k Transaction Summary ====================================================================================== Install 2 Packages Upgrade 156 Packages Total download size: 371 M Is this ok [y/d/N]:
通过 YUM 安装软件
除了更新 CentOS 系统外,YUM 包管理器是我们安装软件的首选工具。从网络监控工具、视频播放器到文本编辑器,一切都可以通过YUM从中央存储库安装。
在安装一些软件实用程序之前,让我们先看看几个YUM命令。对于日常工作,CentOS 管理员 90% 的 YUM 使用将使用大约 7 个命令。我们将逐一介绍,希望能够在日常使用中熟练掌握 YUM 的操作。然而,与大多数 Linux 实用程序一样,YUM 提供了丰富的高级功能,通过手册页探索这些功能总是很棒的。使用man yum永远是使用任何 Linux 实用程序执行不熟悉的操作的第一步。
最常用的 YUM 命令
以下是常用的 YUM 命令。
Command | 行动 |
---|---|
list installed | 列出通过 YUM 安装的软件包 |
list all | 列出所有当前可用的包 |
group list | 列出分组的包 |
info | 提供有关包的详细信息 |
search | 搜索包描述和名称 |
install | 安装一个包 |
localinstall | 安装本地 rpm 包 |
remove | 删除和安装包 |
clean all | 清理 /var/cache/yum 以释放磁盘空间 |
man yum | 像所有 linux 命令一样,帮助文件 |
使用 YUM 安装软件
我们现在将安装一个名为Lynx的基于文本的 Web 浏览器。在安装之前,我们必须首先获取包含 Lynx 网络浏览器的包名。我们甚至不能 100% 确定我们的默认 CentOS 存储库为 Lynx 网络浏览器提供了一个包,所以让我们搜索并查看 –
[root@localhost rdc]# yum search web browser Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirror.scalabledns.com * extras: mirror.scalabledns.com * updates: mirror.clarkson.edu ================================================================= N/S matched: web, browser ================================================================== icedtea-web.x86_64 : Additional Java components for OpenJDK - Java browser plug-in and Web Start implementation elinks.x86_64 : A text-mode Web browser firefox.i686 : Mozilla Firefox Web browser firefox.x86_64 : Mozilla Firefox Web browser lynx.x86_64 : A text-based Web browser Full name and summary matches only, use "search all" for everything. [root@localhost rdc]#
我们看到,CentOS 确实在存储库中提供了 Lynx 网络浏览器。让我们看看有关该包的更多信息。
[root@localhost rdc]# lynx.x86_64 bash: lynx.x86_64: command not found... [root@localhost rdc]# yum info lynx.x86_64 Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirror.scalabledns.com * extras: mirror.scalabledns.com * updates: mirror.clarkson.edu Available Packages Name : lynx Arch : x86_64 Version : 2.8.8 Release : 0.3.dev15.el7 Size : 1.4 M Repo : base/7/x86_64 Summary : A text-based Web browser URL : http://lynx.isc.org/ License : GPLv2 Description : Lynx is a text-based Web browser. Lynx does not display any images, : but it does support frames, tables, and most other HTML tags. One : advantage Lynx has over graphical browsers is speed; Lynx starts and : exits quickly and swiftly displays web pages. [root@localhost rdc]#
好的!2.8 版本已经足够了,所以让我们安装 Lynx。
[root@localhost rdc]# yum install lynx Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirror.scalabledns.com * extras: mirror.scalabledns.com * updates: mirror.clarkson.edu Resolving Dependencies --> Running transaction check ---> Package lynx.x86_64 0:2.8.8-0.3.dev15.el7 will be installed --> Finished Dependency Resolution Dependencies Resolved =============================================================================== =============================================================================== Package Arch Version Repository Size =============================================================================== =============================================================================== Installing: lynx x86_64 2.8.80.3.dev15.el7 base 1.4 M Transaction Summary =============================================================================== =============================================================================== Install 1 Package Total download size: 1.4 M Installed size: 5.4 M Is this ok [y/d/N]: y Downloading packages: No Presto metadata available for base lynx-2.8.8-0.3.dev15.el7.x86_64.rpm | 1.4 MB 00:00:10 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : lynx-2.8.8-0.3.dev15.el7.x86_64 1/1 Verifying : lynx-2.8.8-0.3.dev15.el7.x86_64 1/1 Installed: lynx.x86_64 0:2.8.8-0.3.dev15.el7 Complete! [root@localhost rdc]#
接下来,让我们确保 Lynx 确实安装正确。
[root@localhost rdc]# yum list installed | grep -i lynx lynx.x86_64 2.8.8-0.3.dev15.el7 @base [root@localhost rdc]#
伟大的!让我们使用 Lynx 来看看没有“喜欢”和漂亮图片的网络是什么样的。
[root@localhost rdc]# lynx www.tutorialpoint.in
太好了,现在我们的生产服务器有了一个 Web 浏览器,可以使用它而不必担心通过 Web 启动的远程攻击。这对生产服务器来说是一件好事。
我们快完成了,但是首先我们需要设置这个服务器以供开发人员测试应用程序。因此,让我们确保他们拥有工作所需的所有工具。我们可以单独安装所有东西,但 CentOS 和 YUM 使安装速度更快。让我们安装Development Group Package。
[root@localhost rdc]# yum groups list Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirror.scalabledns.com * extras: mirror.scalabledns.com * updates: mirror.clarkson.edu Available Groups: Compatibility Libraries Console Internet Tools Development Tools Graphical Administration Tools Legacy UNIX Compatibility Scientific Support Security Tools Smart Card Support System Administration Tools System Management Done [root@localhost rdc]#
这是 CentOS 提供的一个较小的软件包组列表。让我们看看“开发组”中包含哪些内容。
[root@localhost rdc]# yum group info "Development Tools" Loaded plugins: fastestmirror, langpacks There is no installed groups file. Maybe run: yum groups mark convert (see man yum) Loading mirror speeds from cached hostfile * base: mirror.scalabledns.com * extras: mirror.scalabledns.com * updates: mirror.clarkson.edu Group: Development Tools Group-Id: development Description: A basic development environment. Mandatory Packages: autoconf automake binutils bison
输出的第一个屏幕如上所示。整个列表相当全面。但是,随着时间的推移,通常需要完整安装该组。让我们安装整个开发组。
[root@localhost rdc]# yum groupinstall "Development Tools"
这将是一个更大的安装。完成后,您的服务器将拥有大多数用于 Perl、Python、C 和 C++ 的开发库和编译器。
CentOS 中的图形包管理
Gnome Desktop 提供了一个名为Software的图形包管理工具。它使用起来相当简单且直接。软件,CentOS 的 Gnome 包管理工具可以通过导航到:应用程序 → 系统工具 → 软件找到。
软件包管理工具分为多个组,允许管理员选择要安装的软件包。虽然此工具非常适合最终用户的易用性和简单性,但 YUM 更强大,管理员可能会更多地使用它。
以下是软件包管理工具的屏幕截图,并非真正为系统管理员设计。
Linux 管理员 – 卷管理
逻辑卷管理 (LVM)是 Linux 用于跨不同物理硬盘管理存储卷的一种方法。这不要与 RAID 混淆。但是,可以将其视为与 RAID 0 或 J-Bod 类似的概念。使用 LVM,可以拥有(例如)三个 1TB 的物理磁盘,然后是大约 3TB 的逻辑卷,例如 /dev/sdb。甚至两个 1.5TB 的逻辑卷、5 个 500GB 的卷,或任意组合。单个磁盘甚至可以用于逻辑卷的快照。
注意– 如果配置正确,使用逻辑卷实际上会增加磁盘 I/O。这与 RAID 0 在不同磁盘上条带化数据的方式类似。
在学习使用 LVM 进行卷管理时,如果我们知道 LVM 中的每个组件是什么会更容易。请研究下表以牢牢掌握每个组件。如果需要,请使用谷歌学习。了解逻辑卷的每个部分对于管理它们很重要。
PV | 物理卷 | 斯达 |
PP | 物理分区 | sda1 , sda2 |
VG | 卷组 | 汇集物理资源 |
LV | 逻辑卷 | 被视为操作系统的存储设施 |
甲物理卷将被看作/ dev / sda上,的/ dev / SDB; Linux 检测到的物理磁盘。
甲物理分区将是由磁盘实用程序如fdisk隔开的盘的部分。请记住,在最常见的 LVM 设置中不建议使用物理分区。示例:磁盘 /dev/sda 被分区为包括两个物理分区:/dev/sda1和/dev/sda1
如果我们有两个 1TB 的物理磁盘,我们可以在两者之间创建一个几乎 2TB的卷组。
从卷组中,我们可以创建三个逻辑卷,每个逻辑卷的大小不超过总卷组大小。
传统的 Linux 磁盘管理工具
在了解 CentOS 7 中最新最好的 LVM 管理特色工具之前,我们应该先探索更多用于 Linux 磁盘管理的传统工具。这些工具将派上用场,并且仍然可以与当今的高级 LVM 工具一起使用,例如系统存储管理器 – lsblk、parted 和 mkfs.xfs。
现在,假设我们在系统中添加了一两个磁盘,我们需要枚举 Linux 检测到的磁盘。在执行被认为具有破坏性的操作之前,我总是建议每次枚举磁盘。lsblk是一个很好的获取磁盘信息的工具。让我们看看 CentOS 检测到哪些磁盘。
[root@localhost rdc]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 part ├─cl-root 253:0 0 17G 0 lvm / └─cl-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 6G 0 disk sdc 8:32 0 4G 0 disk sr0 11:0 1 1024M 0 rom
如您所见,我们在这个系统上有三个磁盘:sda、sdb 和 sdc。
磁盘 sda 包含我们正在运行的 CentOS 安装,所以我们不想玩弄 sda。无论SDB和SDC被添加到系统中本教程。让我们让这些磁盘可用于 CentOS。
创建磁盘标签
[root@localhost rdc]# parted /dev/sdb mklabel GPT Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue? Yes/No? Yes [root@localhost rdc]#
我们现在有一个磁盘标记。只需在sdc上以相同的方式运行parted命令。
在磁盘上创建分区
我们只会在每个磁盘上创建一个分区。要创建分区,再次使用parted命令。
[root@localhost rdc]# parted -a opt /dev/sdb mkpart primary ext4 0% 100%
警告– 您请求了一个从 0.00B 到 6442MB 的分区(扇区 0..12582911)。
我们可以管理的最近位置是 17.4kB 到 1048kB(扇区 34..2047)。
你还能接受吗?
是/否?不
[root@localhost rdc]# parted -a opt /dev/sdc mkpart primary ext4 0% 100%
信息– 您可能需要更新 /etc/fstab。
[root@localhost rdc]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part / boot └─sda2 8:2 0 19G 0 part ├─cl-root 253:0 0 17G 0 lvm / └─cl-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 6G 0 disk └─sdb1 8:17 0 6G 0 part sdc 8:32 0 4G 0 disk └─sdc1 8:33 0 4G 0 part sr0 11:0 1 1024M 0 rom [root@localhost rdc]#
正如您从 lsblk 输出中看到的,我们现在有两个分区,每个分区在 sdb 和 sdc 上。
制作文件系统
最后,在挂载和使用任何卷之前,我们需要添加一个文件系统。我们将使用 XFS 文件系统。
root@localhost rdc]# mkfs.xfs -f /dev/sdb1 meta-data = /dev/sdb1 isize = 512 agcount = 4, agsize = 393088 blks = sectsz = 512 attr = 2, projid32bit = 1 = crc = 1 finobt = 0, sparse = 0 data = bsize = 4096 blocks = 1572352, imaxpct = 25 = sunit = 0 swidth = 0 blks naming = version 2 bsize = 4096 ascii-ci = 0 ftype = 1 log = internal log bsize = 4096 blocks = 2560, version = 2 = sectsz = 512 sunit = 0 blks, lazy-count = 1 realtime = none extsz = 4096 blocks = 0, rtextents = 0 [root@localhost rdc]# mkfs.xfs -f /dev/sdc1 meta-data = /dev/sdc1 isize = 512 agcount = 4, agsize = 262016 blks = sectsz = 512 attr = 2, projid32bit = 1 = crc = 1 finobt = 0, sparse = 0 data = bsize = 4096 blocks = 1048064, imaxpct = 25 = sunit = 0 swidth = 0 blks naming = version 2 bsize = 4096 ascii-ci = 0 ftype = 1 log = internal log bsize = 4096 blocks = 2560, version = 2 = sectsz = 512 sunit = 0 blks, lazy-count = 1 realtime = none extsz = 4096 blocks = 0, rtextents = 0 [root@localhost rdc]#
让我们检查以确保每个都有一个可用的文件系统。
[root@localhost rdc]# lsblk -o NAME,FSTYPE NAME FSTYPE sda ├─sda1 xfs └─sda2 LVM2_member ├─cl-root xfs └─cl-swap swap sdb └─sdb1 xfs sdc └─sdc1 xfs sr0 [root@localhost rdc]#
现在每个都使用 XFS 文件系统。让我们挂载它们,检查挂载,然后将文件复制到每个文件。
[root@localhost rdc]# mount -o defaults /dev/sdb1 /mnt/sdb [root@localhost rdc]# mount -o defaults /dev/sdc1 /mnt/sdc [root@localhost ~]# touch /mnt/sdb/myFile /mnt/sdc/myFile [root@localhost ~]# ls /mnt/sdb /mnt/sdc /mnt/sdb: myFile /mnt/sdc: myFile
此时我们有两个可用磁盘。但是,它们只有在我们手动挂载它们时才可用。要在启动时挂载每个,我们必须编辑fstab文件。此外,必须为需要访问新磁盘的组设置权限。
创建卷组和逻辑卷
CentOS 7 最大的新增功能之一是包含一个名为System Storage Manager或ssm的实用程序。System Storage Manager极大地简化了在 Linux 上管理 LVM 池和存储卷的过程。
我们将完成在 CentOS 中创建简单卷池和逻辑卷的过程。第一步是安装系统存储管理器。
[root@localhost rdc]# yum install system-storage-manager
让我们使用ssm list命令查看我们的磁盘。
如上所示,系统上总共安装了三个磁盘。
-
/sdba1 –托管我们的 CentOS 安装
-
/sdb1 – 安装在 /mnt/sdb
-
/sdc1 – 安装在 /mnt/sdc
我们想要做的是使用两个磁盘(sdb 和 sdc)创建一个卷组。然后为系统提供三个 3GB 逻辑卷。
让我们创建我们的卷组。
[root@localhost rdc]# ssm create -p NEW_POOL /dev/sdb1 /dev/sdc1
默认情况下,ssm将创建一个扩展池的整个 10GB 的逻辑卷。我们不想要这个,所以让我们删除它。
[root@localhost rdc]# ssm remove /dev/NEW_POOL/lvol001 Do you really want to remove active logical volume NEW_POOL/lvol001? [y/n]: y Logical volume "lvol001" successfully removed [root@localhost rdc]#
最后,让我们创建三个逻辑卷。
[root@localhost rdc]# ssm create -n disk001 --fs xfs -s 3GB -p NEW_POOL [root@localhost rdc]# ssm create -n disk002 --fs xfs -s 3GB -p NEW_POOL [root@localhost rdc]# ssm create -n disk003 --fs xfs -s 3GB -p NEW_POOL
现在,让我们检查一下我们的新卷。
我们现在拥有跨越两个物理磁盘分区的三个独立的逻辑卷。
逻辑卷是一个强大的功能,现在 CentOS Linux 内置。我们已经触及了管理这些的表面。掌握池和逻辑卷来自 Tutorials Point 的练习和扩展学习。现在,您已经学习了 CentOS 中 LVM 管理的基础知识,并具备在单个主机上创建基本条带化逻辑卷的能力。