2015年9月

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

Yum Package Management Cron Jobs Log Monitoring Linux

RHCSA: Yum包管理、任务计划和系统监控 – Part 10

使用yum 管理包

要安装一个包以及所有尚未安装的依赖包,您可以使用:

# yum -y install package_name(s)

package\_name(s) 需要是至少一个真实的软件包名

例如,安装 httpd 和 mlocate(按顺序),输入。

# yum -y install httpd mlocate

注意: 字符 y 表示绕过执行下载和安装前的确认提示。如果需要提示,你可以不用它。

默认情况下,yum 将安装与操作系统体系结构相匹配的包,除非通过在包名加入架构名。

例如,在 64 位系统上,yum install package将安装包的 x86\_64 版本,而 yum install package.x86(如果有的话)将安装 32 位的。

有时,你想安装一个包,但不知道它的确切名称。search all 选项可以在当前启用的软件库中的包名称和包描述中搜索它,或者search选项可以在包名称中搜索。

比如,

# yum search log

将搜索安装的软件库中名字和摘要与该词(log)类似的软件,而

# yum search all log

也将在包描述和网址中寻找寻找相同的关键字。

一旦搜索返回包列表,您可能希望在安装前显示一些信息。这时 info 选项派上了用场:

# yum info logwatch

Search Package Information

搜索包信息

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

# yum check-update

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

Check For Package Updates

检查包更新

然后,您可以更新该包,

# yum update rhel-7-server-rpms

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

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

# yum whatprovides “*/ps2pdf”

Find Package Belongs to Which Package

查找文件属于哪个包

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

# yum remove httpd

文本式 RPM 工具

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

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

# rpm -Uvh package.rpm

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

# rpm -qa

Query All RPM Packages

查询所有包

使用 Cron 调度任务

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

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

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

Crontab Entries

crontab条目

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

15 02 2 * * /bin/updatedb

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

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

# ls -l /var/spool/cron

Check All Cron Jobs

检查所有cron任务

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

# crontab -l

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

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

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

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

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

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

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

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

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

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

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

定位和查看日志

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

# ls /var/log

Linux Log Files Location

Linux 日志的位置

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

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

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

# tail -f /var/log/dmesg

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

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

总结

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

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


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

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

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

QGit是一款由Marco Costalba用Qt和C++写的开源的图形界面 Git 客户端。它是一款可以在图形界面环境下更好地提供浏览版本历史、查看提交记录和文件补丁的客户端。它利用git命令行来执行并显示输出。它有一些常规的功能像浏览版本历史、比较、文件历史、文件标注、归档树。我们可以格式化并用选中的提交应用补丁,在两个或多个实例之间拖拽并提交等等。它允许我们用它内置的生成器来创建自定义的按钮去执行特定的命令。

这里有简单的几步在Ubuntu 14.04 LTS "Trusty"中编译并安装QGit客户端。

1. 安装 QT4 库

首先在ubuntu中运行QGit需要先安装QT4库。由于apt是ubuntu默认的包管理器,同时qt4也在官方的仓库中,因此我们直接用下面的apt-get命令来安装qt4。

$ sudo apt-get install qt4-default

2. 下载QGit压缩包

安装完Qt4之后,我们要安装git,这样我们才能在QGit中克隆git仓库。运行下面的apt-get命令。

$ sudo apt-get install git

现在,我们要使用下面的git命令来克隆QGit客户端的仓库。

$ git clone git://repo.or.cz/qgit4/redivivus.git

Cloning into 'redivivus'...
remote: Counting objects: 7128, done.
remote: Compressing objects: 100% (2671/2671), done.
remote: Total 7128 (delta 5464), reused 5711 (delta 4438)
Receiving objects: 100% (7128/7128), 2.39 MiB | 470.00 KiB/s, done.
Resolving deltas: 100% (5464/5464), done.
Checking connectivity... done.

3. 编译 QGit

克隆之后,我们现在进入redivivus的目录,并创建我们编译需要的makefile文件。进入目录,运行下面的命令。

$ cd redivivus

接下来,我们运行下面的命令从qmake项目文件(qgit.pro)来生成新的Makefile。

$ qmake qgit.pro

生成Makefile之后,我们现在终于可以编译qgit的源代码并生成二进制。首先我们要安装make和g++包用于编译,因为这是一个用C++写的程序。

$ sudo apt-get install make g++

现在,我们要用make命令来编译代码了。

$ make

4. 安装 QGit

成功编译QGit的源码之后,我们就要在Ubuntu 14.04中安装它了,这样就可以在系统中执行它。因此我们将运行下面的命令。

$ sudo make install

cd src/ && make -f Makefile install
make[1]: Entering directory `/home/arun/redivivus/src'
make -f Makefile.Release install
make[2]: Entering directory `/home/arun/redivivus/src'
install -m 755 -p "../bin/qgit" "/usr/lib/x86_64-linux-gnu/qt4/bin/qgit"
strip "/usr/lib/x86_64-linux-gnu/qt4/bin/qgit"
make[2]: Leaving directory `/home/arun/redivivus/src'
make[1]: Leaving directory `/home/arun/redivivus/src'

接下来,我们需要从bin目录下复制qgit的二进制文件到/usr/bin/,这样我们就可以全局运行它了。

$ sudo cp bin/qgit /usr/bin/

5. 创建桌面文件

既然我们已经在ubuntu中成功安装了qgit,我们来创建一个桌面文件,这样QGit就可以在我们桌面环境中的菜单或者启动器中找到了。要做到这点,我们要在/usr/share/applications/创建一个新文件叫qgit.desktop。

$ sudo nano /usr/share/applications/qgit.desktop

接下来复制下面的行到文件中。

[Desktop Entry]
Name=qgit
GenericName=git 图形界面 viewer
Exec=qgit
Icon=qgit
Type=Application
Comment=git 图形界面 viewer
Terminal=false
MimeType=inode/directory;
Categories=Qt;Development;RevisionControl;

完成之后,保存并退出。

6. 运行 QGit 客户端

QGit安装完成之后,我们现在就可以从任何启动器或者程序菜单中启动它了。要在终端下面运行QGit,我们可以像下面那样。

$ qgit

这会打开基于Qt4框架图形界面模式的QGit。

QGit Viewer

总结

QGit是一个很棒的基于QT的git客户端。它可以在Linux、MAC OSX和 Microsoft Windows所有这三个平台中运行。它帮助我们很容易地浏览历史、版本、分支等等git仓库提供的信息。它减少了使用命令行的方式去执行诸如浏览版本、历史、比较功能的需求,并用图形化的方式来简化了这些任务。最新的qgit版本也在默认仓库中,你可以使用 apt-get install qgit 命令来安装。因此,QGit用它简单的图形界面使得我们的工作更加简单和快速。


via: http://linoxide.com/ubuntu-how-to/install-qgit-viewer-ubuntu-14-04/

作者:Arun Pyasi 译者:geekpi 校对:wxy

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

有一个神话是 linux 的磁盘从来不需要整理碎片。在大多数情况下这是真的,大多数因为是使用的是优秀的日志文件系统(ext3、4等等)来处理文件系统。然而,在一些特殊情况下,碎片仍旧会产生。如果正巧发生在你身上,解决方法很简单。

什么是磁盘碎片

文件系统会按块更新文件,如果这些块没有连成一整块而是分布在磁盘的各个角落中时,就会形成磁盘碎片。这对于 FAT 和 FAT32 文件系统而言是这样的。在 NTFS 中这种情况有所减轻,但在 Linux(extX)中却几乎不会发生。下面是原因:

在像 FAT 和 FAT32 这类文件系统中,文件紧挨着写入到磁盘中。文件之间没有空间来用于增长或者更新:

NTFS 中在文件之间保留了一些空间,因此有空间进行增长。但因块之间的空间是有限的,碎片也会随着时间出现。

Linux 的日志型文件系统采用了一个不同的方案。与文件相互挨着不同,每个文件分布在磁盘的各处,每个文件之间留下了大量的剩余空间。这就给文件更新和增长留下了很大的空间,碎片很少会发生。

此外,碎片一旦出现了,大多数 Linux 文件系统会尝试将文件和块重新连续起来。

Linux 中的磁盘整理

除非你用的是一个很小的硬盘或者空间不够了,不然 Linux 很少会需要磁盘整理。一些可能需要磁盘整理的情况包括:

  • 如果你编辑的是大型视频文件或者 RAW 照片,但磁盘空间有限
  • 如果你使用一个老式硬件,如旧笔记本,你的硬盘会很小
  • 如果你的磁盘开始满了(大约使用了85%)
  • 如果你的家目录中有许多小分区

最好的解决方案是购买一个大硬盘。如果不可能,磁盘碎片整理就很有用了。

如何检查碎片

fsck 命令会为你做这个,换句话说,如果你可以在 LiveCD 中运行它,那么就可以用于所有卸载的分区

这一点很重要:在已经挂载的分区中运行 fsck 将会严重危害到你的数据和磁盘

你已经被警告过了。开始之前,先做一个完整的备份。

免责声明: 本文的作者与本站将不会对您的文件、数据、系统或者其他损害负责。你需要自己承担风险。如果你继续,你需要接受并了解这点。

你应该启动到一个 live 会话中(如使用安装磁盘,系统救援CD等)并在你卸载的分区上运行 fsck 。要检查是否有任何问题,请在使用 root 权限运行下面的命令:

fsck -fn [/path/to/your/partition]

您可以运行以下命令找到分区的路径

sudo fdisk -l

有一个在已挂载的分区中运行 fsck(相对)安全的方法是使用-n开关。这会对分区进行只读文件系统检查,而不会写入任何东西。当然,这并不能保证十分安全,你应该在创建备份之后进行。在 ext3 中,运行

sudo fsck.ext3 -fn /path/to/your/partition

这会产生大量的输出,大多数错误信息的原因是分区已经挂载了。最后会给出一个碎片相关的信息。

如果碎片率大于 20% 了,那么你应该开始整理你的磁盘碎片了。

如何简单地在 Linux 中整理碎片

你要做的是备份你所有的文件和数据到另外一块硬盘中(手动复制他们),格式化分区,然后重新复制回去(不要使用备份软件)。日志型文件系统会把它们作为新的文件,并将它们整齐地放置到磁盘中而不产生碎片。

要备份你的文件,运行

cp -afv [/path/to/source/partition]/* [/path/to/destination/folder]

记住星号(*)是很重要的。

注意:通常认为复制大文件或者大量文件,使用 dd 或许是最好的。这是一个非常底层的操作,它会复制一切,包含空闲的空间甚至是留下的垃圾。这不是我们想要的,因此这里最好使用 cp

现在你只需要删除源文件。

sudo rm -rf [/path/to/source/partition]/*

可选:你可以使用如下命令将空闲空间用零填充。也可以用格式化来达到这点,但是如果你并没有复制整个分区而仅仅是复制大文件(它通常会形成碎片)的话,就不应该使用格式化的方法了。

sudo dd if=/dev/zero of=[/path/to/source/partition]/temp-zero.txt

等待它结束。你可以用 pv 来监测进度。

sudo apt-get install pv
sudo pv -tpreb | of=[/path/to/source/partition]/temp-zero.txt

这就完成了,只要删除这个用于填充的临时文件就行。

sudo rm [/path/to/source/partition]/temp-zero.txt

待你清零了空闲空间(或者跳过了这步)。重新复制回文件,将第一个cp命令翻转一下:

cp -afv [/path/to/original/destination/folder]/* [/path/to/original/source/partition]

使用 e4defrag

如果你想要简单的方法,安装 e2fsprogs

sudo apt-get install e2fsprogs

用 root 权限在分区中运行 e4defrag。如果你不想或不能卸载该分区,你可以使用它的挂载点而不是路径。要整理整个系统的碎片,运行:

sudo e4defrag  /

在挂载的情况下不保证成功(你也应该在它运行时不要使用你的系统),但是它比复制全部文件再重新复制回来简单多了。

总结

linux 系统中由于它的日志型文件系统有效的数据处理很少会出现碎片。如果你因任何原因产生了碎片,简单的方法是重新分配你的磁盘,如复制出去所有文件并复制回来,或者使用e4defrag。然而重要的是保证你数据的安全,因此在进行任何可能影响你全部或者大多数文件的操作之前,确保你的文件已经被备份到了另外一个安全的地方去了。


via: https://www.maketecheasier.com/defragment-linux/

作者:Attila Orosz 译者:geekpi 校对:wxy

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

让我们假定你有30GB的电影,并且你有3个驱动器,每个的大小为20GB。那么,你会怎么来存放东西呢?

很明显,你可以将你的视频分割成2个或者3个不同的卷,并将它们手工存储到驱动器上。这当然不是一个好主意,它成了一项费力的工作,它需要你手工干预,而且花费你大量时间。

另外一个解决方案是创建一个 RAID磁盘阵列。然而,RAID在存储可靠性,磁盘空间可用性差等方面声名狼藉。另外一个解决方案,就是mhddfs。

Combine Multiple Partitions in Linux

Mhddfs——在Linux中合并多个分区

mhddfs是一个用于Linux的设备驱动,它可以将多个挂载点合并到一个虚拟磁盘中。它是一个基于FUSE的驱动,提供了一个用于大数据存储的简单解决方案。它可以将所有小文件系统合并,创建一个单一的大虚拟文件系统,该文件系统包含其成员文件系统的所有内容,包括文件和空闲空间。

你为什么需要Mhddfs?

你的所有存储设备会创建为一个单一的虚拟池,它可以在启动时被挂载。这个小工具可以智能地照看并处理哪个存储满了,哪个存储空着,以及将数据写到哪个存储中。当你成功创建虚拟驱动器后,你可以使用SAMBA来共享你的虚拟文件系统。你的客户端将在任何时候都看到一个巨大的驱动器和大量的空闲空间。

Mhddfs特性

  • 获取文件系统属性和系统信息。
  • 设置文件系统属性。
  • 创建、读取、移除和写入目录和文件。
  • 在单一设备上支持文件锁和硬链接。
mhddfs的优点mhddfs的缺点
适合家庭用户mhddfs驱动没有内建在Linux内核中
运行简单运行时需要大量处理能力
没有明显的数据丢失没有冗余解决方案
不需要分割文件不支持移动硬链接
可以添加新文件到组成的虚拟文件系统
可以管理文件保存的位置
支持扩展文件属性

Linux中安装Mhddfs

在Debian及其类似的移植系统中,你可以使用下面的命令来安装mhddfs包。

# apt-get update && apt-get install mhddfs

Install Mhddfs on Debian based Systems

安装Mhddfs到基于Debian的系统中

在RHEL/CentOS Linux系统中,你需要开启epel仓库,然后执行下面的命令来安装mhddfs包。

# yum install mhddfs

在Fedora 22及以上系统中,你可以通过dnf包管理来获得它,就像下面这样。

# dnf install mhddfs

Install Mhddfs on Fedora

安装Mhddfs到Fedora

如果万一mhddfs包不能从epel仓库获取到,那么你需要解决下面的依赖,然后像下面这样来编译源码并安装。

  • FUSE头文件
  • GCC
  • libc6头文件
  • uthash头文件
  • libattr1头文件(可选)

接下来,只需从下面建议的地址下载最新的源码包,然后编译。

# wget http://mhddfs.uvw.ru/downloads/mhddfs_0.1.39.tar.gz
# tar -zxvf mhddfs*.tar.gz
# cd mhddfs-0.1.39/
# make

你应该可以在当前目录中看到mhddfs的二进制文件,以root身份将它移动到/usr/bin/和/usr/local/bin/中。

# cp mhddfs /usr/bin/ 
# cp mhddfs /usr/local/bin/

一切搞定,mhddfs已经可以用了。

我怎么使用Mhddfs?

1、 让我们看看当前所有挂载到我们系统中的硬盘。

$ df -h

Check Mounted Devices

样例输出

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda1       511M  132K  511M   1% /boot/efi
/dev/sda2       451G   92G  336G  22% /
/dev/sdb1       1.9T  161G  1.7T   9% /media/avi/BD9B-5FCE
/dev/sdc1       555M  555M     0 100% /media/avi/Debian 8.1.0 M-A 1

注意这里的‘挂载点’名称,我们后面会使用到它们。

2、 创建目录‘/mnt/virtual\_hdd’,所有这些文件系统将会在这里组织到一起。

# mkdir /mnt/virtual_hdd

3、 然后,挂载所有文件系统。你可以通过root或者FUSE组中的某个用户来完成。

# mhddfs /boot/efi, /, /media/avi/BD9B-5FCE/, /media/avi/Debian\ 8.1.0\ M-A\ 1/ /mnt/virtual_hdd  -o allow_other

Mount All File System in Linux

在Linux中挂载所有文件系统

注意:这里我们使用了所有硬盘的挂载点名称,很明显,你的挂载点名称会有所不同。也请注意“-o allow\_other”选项可以让这个虚拟文件系统让其它所有人可见,而不仅仅是创建它的人。

4、 现在,运行“df -h”来看看所有文件系统。它应该包含了你刚才创建的那个。

    $ df -h

Verify Virtual File System Mount

验证虚拟文件系统挂载

你可以像对已挂在的驱动器那样给虚拟文件系统应用所有的选项。

5、 要在每次系统启动创建这个虚拟文件系统,你应该以root身份添加下面的这行代码(在你那里会有点不同,取决于你的挂载点)到/etc/fstab文件的末尾。

mhddfs# /boot/efi, /, /media/avi/BD9B-5FCE/, /media/avi/Debian\ 8.1.0\ M-A\ 1/ /mnt/virtual_hdd fuse defaults,allow_other 0 0

6、 如果在任何时候你想要添加/移除一个新的驱动器到/从虚拟硬盘,你可以挂载一个新的驱动器,拷贝/mnt/vritualhdd的内容,卸载卷,弹出你要移除的的驱动器并/或挂载你要包含的新驱动器。使用mhddfs命令挂载全部文件系统到Virtualhdd下,这样就全部搞定了。

我怎么卸载Virtual\_hdd?

卸载virtual\_hdd相当简单,就像下面这样

# umount /mnt/virtual_hdd

Unmount Virtual Filesystem

卸载虚拟文件系统

注意,是umount,而不是unmount,很多用户都输错了。

到现在为止全部结束了。我正在写另外一篇文章,你们一定喜欢读的。到那时,请保持连线。请在下面的评论中给我们提供有用的反馈吧。请为我们点赞并分享,帮助我们扩散。


via: http://www.tecmint.com/combine-partitions-into-one-in-linux-using-mhddfs/

作者:Avishek Kumar 译者:GOLinux 校对:wxy

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

谷歌公布放弃 RC4 和 SSLv3 的详细计划

不出所料,这周谷歌正式宣布准备放弃支持流算法 RC4 和 SSLv3 协议,这二者都有悠久的被攻击历史。

该公司的一名安全工程师亚当.兰利周四在一篇博客中宣布了该计划。虽然没有一个具体的时间表,但是兰利坚称,谷歌会在适当的时段内在其所有的前端服务器、Chrome、Android、爬虫和 SMTP 服务器中放弃使用 RC4 和 SSLv3。

事实上,该公司宣布放弃 RC4 和 SSLv3 并不令人惊讶, 国际互联网工程任务组 IETF 在今年夏天发布的一个 互联网标准跟踪文档 Internet Standards Track document 宣称了 SSLv3 的死亡,说它“不够安全”,而且说“任何版本的 TLS 都比 SSLv3 安全”。

如兰利在博客中说到的,RC4 已经用了28年了,虽然其在早期的表现很好,但是多年来它一直是多种攻击的目标,其中一些攻击可以导致 TLS 会话降级和 cookie 解密。

作为这次计划的一部分,谷歌宣布了一些 TLS 客户端应该具有的最低安全性标准:

  1. 必须支持 TLS 1.2
  2. 在握手时必须包含 服务器名字指示 SNI (server name indication) 扩展,还要包含将要连接的域名
  3. 必须支持带有 P-256 和未压缩点的加密套件 TLS\_ECDHE\_RSA\_WITH\_AES\_128\_GCM\_SHA256
  4. 至少要信任 https://pki.google.com/roots.pem 中的证书
  5. 证书操作一定能支持 DNS 主题替代名称 SAN(Subject Alternative Name) ,并且这些主题替代名称可以包含一个通配符作为名字最左边的标签

兰利说:不满足需求的设备不会很快就停止工作,但是会受到 TLS 变化的影响,这可能持续到2020年。

“如果你的 TLS 客户端、web 服务器或者邮件服务器使用 SSLv3 或 RC4,虽然几年前就该更新了,不过现在更新总比不更新好。然而要注意,你现在使用 RC4 并不意味着你的客户端或网站就无法工作,TLS 会协商加密算法,但是如果你只支持 RC4 那就要出问题了。”,兰利说。

兰利在这个月早些时候发到 [email protected] 邮件列表的一封帖子中宣布了废弃 RC4 的大致计划。确认这个算法会在将来的 Chrome 构建中禁用,可能会在 2016 年一、二月稳定。该公司也已经做了一些废弃 SSLv3 的工作:随着取消 Chrome 中的 SSLv3 降级支持, POODLE 攻击就会失效,该公司也会逐步淘汰 SHA-1 算法

Web 服务器(也被称为 HTTP 服务器)是在网络中将内容(最为常见的是网页,但也支持其他类型的文件)进行处理并传递给客户端的服务。

FTP 服务器是最为古老且最常使用的资源之一(即便到今天也是这样),在身份认证不是必须的情况下,它可通过客户端在一个网络访问文件,因为 FTP 使用没有加密的用户名和密码,所以有些情况下不需要验证也行。

在 RHEL 7 中可用的 web 服务器是版本号为 2.4 的 Apache HTTP 服务器。至于 FTP 服务器,我们将使用 Very Secure Ftp Daemon (又名 vsftpd) 来建立用 TLS 加固的连接。

配置和加固 Apache 和 FTP 服务器

RHCSA: 安装,配置及加固 Apache 和 FTP 服务器 – Part 9

在这篇文章中,我们将解释如何在 RHEL 7 中安装、配置和加固 web 和 FTP 服务器。

安装 Apache 和 FTP 服务器

在本指导中,我们将使用一个静态 IP 地址为 192.168.0.18/24 的 RHEL 7 服务器。为了安装 Apache 和 VSFTPD,运行下面的命令:

# yum update && yum install httpd vsftpd

当安装完成后,这两个服务在开始时是默认被禁用的,所以我们需要暂时手动开启它们并让它们在下一次启动时自动地开启它们:

# systemctl start httpd
# systemctl enable httpd
# systemctl start vsftpd
# systemctl enable vsftpd

另外,我们必须打开 80 和 21 端口,它们分别是 web 和 ftp 守护进程监听的端口,为的是允许从外面访问这些服务:

# firewall-cmd --zone=public --add-port=80/tcp --permanent
# firewall-cmd --zone=public --add-service=ftp --permanent
# firewall-cmd --reload

为了确认 web 服务工作正常,打开你的浏览器并输入服务器的 IP,则你应该可以看到如下的测试页面:

确认 Apache Web 服务器

确认 Apache Web 服务器

对于 ftp 服务器,在确保它如期望中的那样工作之前,我们必须进一步地配置它,我们将在几分钟后来做这件事。

配置并加固 Apache Web 服务器

Apache 的主要配置文件位于 /etc/httpd/conf/httpd.conf 中,但它可能依赖 /etc/httpd/conf.d 中的其他文件。

尽管默认的配置对于大多数的情形都够用了,但熟悉在 官方文档 中介绍的所有可用选项是一个不错的主意。

同往常一样,在编辑主配置文件前先做一个备份:

# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.$(date +%Y%m%d)

然后用你钟爱的文本编辑器打开它,并查找下面这些变量:

  • ServerRoot: 服务器的配置,错误和日志文件保存的目录。
  • Listen: 通知 Apache 去监听特定的 IP 地址或端口。
  • Include: 允许包含其他配置文件,要包含的文件必须存在,否则,服务器将会失败。它恰好与 IncludeOptional 相反,假如特定的配置文件不存在,它将静默地忽略掉它们。
  • UserGroup: 运行 httpd 服务的用户/组的名称。
  • DocumentRoot: Apache 为你的文档所服务的目录。默认情况下,所有的请求将在这个目录中被获取,但符号链接和别名可能会被用于指向其他位置。
  • ServerName: 这个指令将设定用于识别它自身的主机名(或 IP 地址)和端口。

安全措施的第一步将包含创建一个特定的用户和组(如 tecmint/tecmint)来运行 web 服务器,以及更改默认的端口为一个更高的端口(在这个例子中为 9000) (LCTT 译注:如果你的 Web 服务器对外公开提供服务,则不建议修改为非默认端口。):

ServerRoot "/etc/httpd"
Listen 192.168.0.18:9000
User tecmint
Group tecmint
DocumentRoot "/var/www/html"
ServerName 192.168.0.18:9000

你可以使用下面的命令来测试配置文件:

# apachectl configtest

假如一切 OK,接着重启 web 服务器。

# systemctl restart httpd

并别忘了在防火墙中开启新的端口(并禁用旧的端口):

# firewall-cmd --zone=public --remove-port=80/tcp --permanent
# firewall-cmd --zone=public --add-port=9000/tcp --permanent
# firewall-cmd --reload

请注意,由于 SELinux 策略,你只能给给 web 服务器使用如下命令所返回的端口。

# semanage port -l | grep -w '^http_port_t'

假如你想让 httpd 服务使用另一个端口(如 TCP 端口 8100),你必须将它加到 SELinux 的端口上下文:

# semanage port -a -t http_port_t -p tcp 8100

添加 Apache 端口到 SELinux 策略

添加 Apache 端口到 SELinux 策略

为了进一步加固你安装的 Apache,请遵循以下步骤:

  1. 运行 Apache 的用户不应该拥有访问 shell 的能力:
# usermod -s /sbin/nologin tecmint
  1. 禁用目录列表功能,这是为了阻止浏览器展示一个未包含 index.html 文件的目录里的内容。

编辑 /etc/httpd/conf/httpd.conf (以及虚拟主机的配置文件,假如有的话),并确保出现在顶层的和Directory 块中的 Options 指令都被设置为 None:

Options None
  1. 在 HTTP 响应中隐藏有关 web 服务器和操作系统的信息。像下面这样编辑文件 /etc/httpd/conf/httpd.conf
ServerTokens Prod 
ServerSignature Off

现在,你已经做好了从 /var/www/html 目录开始服务内容的准备了。

配置并加固 FTP 服务器

和 Apache 的情形类似, Vsftpd 的主配置文件 /etc/vsftpd/vsftpd.conf 带有详细的注释,且虽然对于大多数的应用实例,默认的配置应该足够了,但为了更有效率地操作 ftp 服务器,你应该开始熟悉相关的文档和 man 页 man vsftpd.conf(对于这点,再多的强调也不为过!)。

在我们的示例中,使用了这些指令:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

通过使用 chroot_local_user=YES,(默认情况下)本地用户在登录之后,将被限制在以用户的家目录为 chroot 监狱的环境中。这意味着本地用户将不能访问除其家目录之外的任何文件。

最后,为了让 ftp 能够在用户的家目录中读取文件,设置如下的 SELinux 布尔值:

# setsebool -P ftp_home_dir on

现在,你可以使用一个客户端例如 Filezilla 来连接一个 ftp 服务器:

查看 FTP 连接

查看 FTP 连接

注意, /var/log/xferlog 日志将会记录下载和上传的情况,这与上图的目录列表一致:

监视 FTP 的下载和上传情况

监视 FTP 的下载和上传情况

另外请参考: 在 Linux 系统中使用 Trickle 来限制应用使用的 FTP 网络带宽

总结

在本教程中,我们解释了如何设置 web 和 ftp 服务器。由于这个主题的广泛性,涵盖这些话题的所有方面是不可能的(如虚拟主机)。因此,我推荐你也阅读这个网站中有关 Apache 的其他卓越的文章。


via: http://www.tecmint.com/rhcsa-series-install-and-secure-apache-web-server-and-ftp-in-rhel/

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

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