分类 技术 下的文章

网络时间协议 - NTP - 是运行在传输层 123 号端口的 UDP 协议,它允许计算机通过网络同步准确时间。随着时间的流逝,计算机内部时间会出现漂移,这会导致时间不一致问题,尤其是对于服务器和客户端日志文件,或者你想要复制服务器的资源或数据库。

在 CentOS 上安装 NTP 服务器

在 CentOS 和 RHEL 7 上安装 NTP 服务器

前置要求:

额外要求:

这篇指南会告诉你如何在 CentOS/RHCE 7 上安装和配置 NTP 服务器,并使用 NTP 公共时间服务器池 NTP Public Pool Time Servers 列表中和你服务器地理位置最近的可用节点中同步时间。

步骤一:安装和配置 NTP 守护进程

1、 官方 CentOS /RHEL 7 库默认提供 NTP 服务器安装包,可以通过使用下面的命令安装。

# yum install ntp

在 CentOS 上安装 NTP 服务器

安装 NTP 服务器

2、 安装完服务器之后,首先到官方 NTP 公共时间服务器池 NTP Public Pool Time Servers ,选择你服务器物理位置所在的洲,然后搜索你的国家位置,然后会出现 NTP 服务器列表。

NTP 服务器池

NTP 服务器池

3、 然后打开编辑 NTP 守护进程的主配置文件,注释掉来自 pool.ntp.org 项目的公共服务器默认列表,并用类似下面截图中提供给你所在国家的列表替换。(LCTT 译注:中国使用 0.cn.pool.ntp.org 等)

在 CentOS 中配置 NTP 服务器

配置 NTP 服务器

4、 下一步,你需要允许来自你的网络的客户端和这台服务器同步时间。为了做到这点,添加下面一行到 NTP 配置文件,其中 restrict 语句控制允许哪些网络查询和同步时间 - 请根据需要替换网络 IP。

restrict 192.168.1.0 netmask 255.255.255.0 nomodify notrap

nomodify notrap 语句意味着不允许你的客户端配置服务器或者作为同步时间的节点。

5、 如果你需要用于错误处理的额外信息,以防你的 NTP 守护进程出现问题,添加一个 logfile 语句,用于记录所有 NTP 服务器问题到一个指定的日志文件。

logfile /var/log/ntp.log

在 CentOS 中启用 NTP 日志

启用 NTP 日志

6、 在你编辑完所有上面解释的配置并保存关闭 ntp.conf 文件后,你最终的配置看起来像下面的截图。

CentOS 中 NTP 服务器的配置

NTP 服务器配置

步骤二:添加防火墙规则并启动 NTP 守护进程

7、 NTP 服务使用 OSI 传输层(第四层)的 123 号 UDP 端口。它是为了避免可变延迟的影响所特别设计的。要在 RHEL/CentOS 7 中开放这个端口,可以对 Firewalld 服务使用下面的命令。

# firewall-cmd --add-service=ntp --permanent
# firewall-cmd --reload

在 Firewall 中开放 NTP 端口

在 Firewall 中开放 NTP 端口

8、 你在防火墙中开放了 123 号端口之后,启动 NTP 服务器并确保系统范围内可用。用下面的命令管理服务。

# systemctl start ntpd
# systemctl enable ntpd
# systemctl status ntpd

启动 NTP 服务

启动 NTP 服务

步骤三:验证服务器时间同步

9、 启动了 NTP 守护进程后,用几分钟等服务器和它的服务器池列表同步时间,然后运行下面的命令验证 NTP 节点同步状态和你的系统时间。

# ntpq -p
# date -R

验证 NTP 服务器时间

验证 NTP 时间同步

10、 如果你想查询或者和你选择的服务器池同步,你可以使用 ntpdate 命令,后面跟服务器名或服务器地址,类似下面建议的命令行示例。

# ntpdate -q  0.ro.pool.ntp.org  1.ro.pool.ntp.org

同步 NTP 同步

同步 NTP 时间

步骤四:设置 Windows NTP 客户端

11、 如果你的 windows 机器不是域名控制器的一部分,你可以配置 Windows 和你的 NTP服务器同步时间。在任务栏右边 -> 时间 -> 更改日期和时间设置 -> 网络时间标签 -> 更改设置 -> 和一个网络时间服务器检查同步 -> 在 Server 空格输入服务器 IP 或 FQDN -> 马上更新 -> OK。

和 NTP 同步 Windows 时间

和 NTP 同步 Windows 时间

就是这些。在你的网络中配置一个本地 NTP 服务器能确保你所有的服务器和客户端有相同的时间设置,以防出现网络连接失败,并且它们彼此都相互同步。


via: http://www.tecmint.com/install-ntp-server-in-centos/

作者:Matei Cezar 译者:ictlyh 校对:wxy

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

尽管现在有很多在线联系方式,电子邮件仍然是一个人传递信息给远在世界尽头或办公室里坐在我们旁边的另一个人的有效方式。

下面的图描述了电子邮件从发送者发出直到信息到达接收者收件箱的传递过程。

电子邮件如何工作

电子邮件如何工作

要实现这一切,背后发生了好多事情。为了使电子邮件信息从一个客户端应用程序(例如 Thunderbird、Outlook,或者 web 邮件服务,例如 Gmail 或 Yahoo 邮件)投递到一个邮件服务器,并从其投递到目标服务器并最终到目标接收人,每个服务器上都必须有 SMTP(简单邮件传输协议)服务。

这就是为什么我们要在这篇博文中介绍如何在 RHEL 7 中设置 SMTP 服务器,从本地用户发送的邮件(甚至发送到另外一个本地用户)被 转发 forward 到一个中央邮件服务器以便于访问。

在这个考试的要求中这称为 无客户端 null-client 安装。

在我们的测试环境中将包括一个 起源 originating 邮件服务器和一个中央服务器或 中继主机 relayhost

  • 起源邮件服务器: (主机名: box1.mydomain.com / IP: 192.168.0.18)
  • 中央邮件服务器: (主机名: mail.mydomain.com / IP: 192.168.0.20)

我们在两台机器中都会使用你熟知的 /etc/hosts 文件做名字解析:

192.168.0.18    box1.mydomain.com       box1
192.168.0.20    mail.mydomain.com       mail

安装 Postfix 和防火墙/SELinux 注意事项

首先,我们需要(在两台机器上):

1、 安装 Postfix:

# yum update && yum install postfix

2、 启动服务并启用开机自动启动:

# systemctl start postfix
# systemctl enable postfix

3、 允许邮件流量通过防火墙:

# firewall-cmd --permanent --add-service=smtp
# firewall-cmd --add-service=smtp

在防火墙中开通邮件服务器端口

在防火墙中开通邮件服务器端口

4、 在 box1.mydomain.com 配置 Postfix

Postfix 的主要配置文件是 /etc/postfix/main.cf。这个文件本身是一个很大的文本文件,因为其中包含了解释程序设置的用途的注释。

为了简洁,我们只显示了需要编辑的行(没错,在起源服务器中你需要保留 mydestination 为空;否则邮件会被存储到本地,而不是我们实际想要发往的中央邮件服务器):

myhostname = box1.mydomain.com
mydomain = mydomain.com
myorigin = $mydomain
inet_interfaces = loopback-only
mydestination =
relayhost = 192.168.0.20

5、 在 mail.mydomain.com 配置 Postfix

myhostname = mail.mydomain.com
mydomain = mydomain.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 192.168.0.0/24, 127.0.0.0/8

如果还没有设置,还要设置相关的 SELinux 布尔值永久为真:

# setsebool -P allow_postfix_local_write_mail_spool on

设置 Postfix SELinux 权限

设置 Postfix SELinux 权限

上面的 SELinux 布尔值会允许中央服务器上的 Postfix 可以写入 邮件池 mail spool

6、 在两台机子上重启服务以使更改生效:

# systemctl restart postfix

如果 Postfix 没有正确启动,你可以使用下面的命令进行错误处理。

# systemctl -l status postfix
# journalctl -xn
# postconf -n

测试 Postfix 邮件服务

要测试邮件服务器,你可以使用任何 邮件用户代理 Mail User Agent,MUA ,例如 mail 或 mutt

由于我个人喜欢 mutt,我会在 box1 中使用它发送邮件给用户 tecmint,并把现有文件(mailbody.txt)作为信息内容:

# mutt -s "Part 9-RHCE series" [email protected] < mailbody.txt

测试 Postfix 邮件服务器

测试 Postfix 邮件服务器

现在到中央邮件服务器(mail.mydomain.com)以 tecmint 用户登录,并检查是否收到了邮件:

# su – tecmint
# mail

检查 Postfix 邮件服务器发送

检查 Postfix 邮件服务器发送

如果没有收到邮件,检查 root 用户的邮件池看看是否有警告或者错误提示。你也许需要使用 nmap 命令确保两台服务器运行了 SMTP 服务,并在中央邮件服务器中打开了 25 号端口:

# nmap -PN 192.168.0.20

Postfix 邮件服务器错误处理

Postfix 邮件服务器错误处理

总结

像本文中展示的设置邮件服务器和中继主机是每个系统管理员必须拥有的重要技能,也代表了理解和安装更复杂情景的基础,例如一个邮件服务器托管有多个邮件账户(甚至成百上千)的域名。

(请注意这种类型的设置需要有 DNS 服务器,这不在本文的介绍范围),但你可以参照下面的文章设置 DNS 服务器:

最后,我强烈建议你熟悉 Postfix 的配置文件(main.cf)和这个程序的帮助手册。如果有任何疑问,别犹豫,使用下面的评论框或者我们的论坛 Linuxsay.com 告诉我们吧,你会从世界各地的 Linux 高手中获得几乎是及时的帮助。


via: http://www.tecmint.com/setup-postfix-mail-server-smtp-using-null-client-on-centos/

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

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

如果你是一个负责维护和确保 web 服务器安全的系统管理员,你需要花费最大的精力确保服务器中处理和通过的数据任何时候都受到保护。

使用 SSL/TLS 设置 Apache HTTPS

RHCE 系列:第八部分 - 使用网络安全服务(NSS)为 Apache 通过 TLS 实现 HTTPS

为了在客户端和服务器之间提供更安全的连接,作为 HTTP 和 SSL( Secure Sockets Layer 安全套接层 )或者最近称为 TLS( Transport Layer Security 传输层安全 )的组合,产生了 HTTPS 协议。

由于一些严重的安全漏洞,SSL 已经被更健壮的 TLS 替代。由于这个原因,在这篇文章中我们会解析如何通过 TLS 实现你 web 服务器和客户端之间的安全连接。

这里假设你已经安装并配置好了 Apache web 服务器。如果还没有,在进入下一步之前请阅读下面站点中的文章。

安装 OpenSSL 和一些工具包

首先,确保正在运行 Apache 并且允许 http 和 https 通过防火墙:

# systemctl start http
# systemctl enable http
# firewall-cmd --permanent –-add-service=http
# firewall-cmd --permanent –-add-service=https

然后安装一些必需的软件包:

# yum update && yum install openssl mod_nss crypto-utils

重要:请注意如果你想使用 OpenSSL 库而不是 NSS( Network Security Service 网络安全服务 )实现 TLS,你可以在上面的命令中用 mod\_ssl 替换 mod\_nss(使用哪一个取决于你,但在这篇文章中我们会使用 NSS,因为它更加安全,比如说,它支持最新的加密标准,比如 PKCS #11)。

如果你使用 mod\_nss,首先要卸载 mod\_ssl,反之如此。

# yum remove mod_ssl

配置 NSS(网络安全服务)

安装完 mod\_nss 之后,会创建默认的配置文件 /etc/httpd/conf.d/nss.conf。你应该确保所有 Listen 和 VirualHost 指令都指向 443 号端口(HTTPS 默认端口):

nss.conf – 配置文件


Listen 443
VirtualHost _default_:443

然后重启 Apache 并检查是否加载了 mod\_nss 模块:

# apachectl restart
# httpd -M | grep nss

在 Apache 中检查 mod_nss 模块

检查 Apache 是否加载 mod\_nss 模块

下一步,在 /etc/httpd/conf.d/nss.conf 配置文件中做以下更改:

1、 指定 NSS 数据库目录。你可以使用默认的目录或者新建一个。本文中我们使用默认的:

NSSCertificateDatabase /etc/httpd/alias

2、 通过保存密码到数据库目录中的 /etc/httpd/nss-db-password.conf 文件来避免每次系统启动时要手动输入密码:

NSSPassPhraseDialog file:/etc/httpd/nss-db-password.conf

其中 /etc/httpd/nss-db-password.conf 只包含以下一行,其中 mypassword 是后面你为 NSS 数据库设置的密码:

internal:mypassword

另外,要设置该文件的权限和属主为 0640 和 root:apache:

# chmod 640 /etc/httpd/nss-db-password.conf
# chgrp apache /etc/httpd/nss-db-password.conf

3、 由于 POODLE SSLv3 漏洞,红帽建议停用 SSL 和 TLSv1.0 之前所有版本的 TLS(更多信息可以查看这里)。

确保 NSSProtocol 指令的每个实例都类似下面一样(如果你没有托管其它虚拟主机,很可能只有一条):

NSSProtocol TLSv1.0,TLSv1.1

4、 由于这是一个自签名证书,Apache 会拒绝重启,并不会识别为有效发行人。由于这个原因,对于这种特殊情况我们还需要添加:

NSSEnforceValidCerts off

5、 虽然并不是严格要求,为 NSS 数据库设置一个密码同样很重要:

# certutil -W -d /etc/httpd/alias

为 NSS 数据库设置密码

为 NSS 数据库设置密码

创建一个 Apache SSL 自签名证书

下一步,我们会创建一个自签名证书来让我们的客户机可以识别服务器(请注意这个方法对于生产环境并不是最好的选择;对于生产环境你应该考虑购买第三方可信证书机构验证的证书,例如 DigiCert)。

我们用 genkey 命令为 box1 创建有效期为 365 天的 NSS 兼容证书。完成这一步后:

# genkey --nss --days 365 box1

选择 Next:

创建 Apache SSL 密钥

创建 Apache SSL 密钥

你可以使用默认的密钥大小(2048),然后再次选择 Next:

选择 Apache SSL 密钥大小

选择 Apache SSL 密钥大小

等待系统生成随机比特:

生成随机密钥比特

生成随机密钥比特

为了加快速度,会提示你在控制台输入随机字符,正如下面的截图所示。请注意当没有从键盘接收到输入时进度条是如何停止的。然后,会让你选择:

  1. 是否发送验证签名请求(CSR)到一个验证机构(CA):选择 No,因为这是一个自签名证书。
  2. 为证书输入信息。

最后,会提示你输入之前给 NSS 证书设置的密码:

# genkey --nss --days 365 box1

Apache NSS 证书密码

Apache NSS 证书密码

需要的话,你可以用以下命令列出现有的证书:

# certutil –L –d /etc/httpd/alias

列出 Apache NSS 证书

列出 Apache NSS 证书

然后通过名字删除(如果你真的需要删除的,用你自己的证书名称替换 box1):

# certutil -d /etc/httpd/alias -D -n "box1"

如果你需要继续进行的话,请继续阅读。

测试 Apache SSL HTTPS 连接

最后,是时候测试到我们服务器的安全连接了。当你用浏览器打开 https://,你会看到著名的信息 “This connection is untrusted”:

检查 Apache SSL 连接

检查 Apache SSL 连接

在上面的情况中,你可以点击 添加例外 Add Exception 然后 确认安全例外 Confirm Security Exception - 但先不要这么做。让我们首先来看看证书看它的信息是否和我们之前输入的相符(如截图所示)。

要做到这点,点击上面的 视图 View... -> 详情 Details 选项卡,当你从列表中选择发行人你应该看到这个:

确认 Apache SSL 证书详情

确认 Apache SSL 证书详情

现在你可以继续,确认例外(限于此次或永久),然后会通过 https 把你带到你 web 服务器的 DocumentRoot 目录,在这里你可以使用你浏览器自带的开发者工具检查连接详情:

在火狐浏览器中,你可以通过在屏幕中右击,然后从上下文菜单中选择 检查元素 Inspect Element 启动开发者工具,尤其要看“ 网络 Network ”选项卡:

检查 Apache HTTPS 连接

检查 Apache HTTPS 连接

请注意这和之前显示的在验证过程中输入的信息一致。还有一种方式通过使用命令行工具测试连接:

左图(测试 SSLv3):

# openssl s_client -connect localhost:443 -ssl3

右图(测试 TLS):

# openssl s_client -connect localhost:443 -tls1

测试 Apache SSL 和 TLS 连接

测试 Apache SSL 和 TLS 连接

参考上面的截图了解更详细信息。

总结

我想你已经知道,使用 HTTPS 会增加会在你站点中输入个人信息的访客的信任(从用户名和密码到任何商业/银行账户信息)。

在那种情况下,你会希望获得由可信验证机构签名的证书,正如我们之前解释的(步骤和设置需要启用例外的证书的步骤相同,发送 CSR 到 CA 然后获得返回的签名证书);否则,就像我们的例子中一样使用自签名证书即可。

要获取更多关于使用 NSS 的详情,可以参考关于 mod-nss 的在线帮助。如果你有任何疑问或评论,请告诉我们。


via: http://www.tecmint.com/create-apache-https-self-signed-certificate-using-nss/

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

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

大家好,本教程将学习如何在 ubuntu 15.04 上面安装 puppet,它可以用来管理你的服务器基础环境。puppet 是由 puppet 实验室 Puppet Labs 开发并维护的一款开源的配置管理软件,它能够帮我们自动化供给、配置和管理服务器的基础环境。不管我们管理的是几个服务器还是数以千计的计算机组成的业务报表体系,puppet 都能够使管理员从繁琐的手动配置调整中解放出来,腾出时间和精力去提系统的升整体效率。它能够确保所有自动化流程作业的一致性、可靠性以及稳定性。它让管理员和开发者更紧密的联系在一起,使开发者更容易产出付出设计良好、简洁清晰的代码。puppet 提供了配置管理和数据中心自动化的两个解决方案。这两个解决方案分别是 puppet 开源版puppet 企业版。puppet 开源版以 Apache 2.0 许可证发布,它是一个非常灵活、可定制的解决方案,设置初衷是帮助管理员去完成那些重复性操作工作。pupprt 企业版是一个全平台复杂 IT 环境下的成熟解决方案,它除了拥有开源版本所有优势以外还有移动端 apps、只有商业版才有的加强支持,以及模块化和集成管理等。Puppet 使用 SSL 证书来认证主控服务器与代理节点之间的通信。

本教程将要介绍如何在运行 ubuntu 15.04 的主控服务器和代理节点上面安装开源版的 puppet。在这里,我们用一台服务器做 主控服务器 master ,管理和控制剩余的当作 puppet 代理节点 agent node 的服务器,这些代理节点将依据主控服务器来进行配置。在 ubuntu 15.04 只需要简单的几步就能安装配置好 puppet,用它来管理我们的服务器基础环境非常的方便。(LCTT 译注:puppet 采用 C/S 架构,所以必须有至少有一台作为服务器,其他作为客户端处理)

1.设置主机文件

在本教程里,我们将使用2台运行 ubuntu 15.04 “Vivid Vervet" 的主机,一台作为主控服务器,另一台作为 puppet 的代理节点。下面是我们将用到的服务器的基础信息。

  • puupet 主控服务器 IP:44.55.88.6 ,主机名: puppetmaster
  • puppet 代理节点 IP: 45.55.86.39 ,主机名: puppetnode

我们要在代理节点和服务器这两台机器的 hosts 文件里面都添加上相应的条目,使用 root 或是 sudo 访问权限来编辑 /etc/hosts 文件,命令如下:

# nano /etc/hosts

45.55.88.6 puppetmaster.example.com puppetmaster
45.55.86.39 puppetnode.example.com puppetnode

注意,puppet 主控服务器必使用 8140 端口来运行,所以请务必保证开启8140端口。

2. 用 NTP 更新时间

puppet 代理节点所使用系统时间必须要准确,这样可以避免代理证书出现问题。如果有时间差异,那么证书将过期失效,所以服务器与代理节点的系统时间必须互相同步。我们使用 NTP( Network Time Protocol 网络时间协议 )来同步时间。在服务器与代理节点上面分别运行以下命令来同步时间。

# ntpdate pool.ntp.org

17 Jun 00:17:08 ntpdate[882]: adjust time server 66.175.209.17 offset -0.001938 sec    

(LCTT 译注:显示类似的输出结果表示运行正常)

如果没有安装 ntp,请使用下面的命令更新你的软件仓库,安装并运行ntp服务

# apt-get update && sudo apt-get -y install ntp ; service ntp restart

3. 安装主控服务器软件

安装开源版本的 puppet 有很多的方法。在本教程中我们在 puppet 实验室官网下载一个名为 puppetlabs-release 的软件包的软件源,安装后它将为我们在软件源里面添加 puppetmaster-passenger。puppetmaster-passenger 包括带有 apache 的 puppet 主控服务器。我们开始下载这个软件包:

# cd /tmp/
# wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb

--2015-06-17 00:19:26-- https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
Resolving apt.puppetlabs.com (apt.puppetlabs.com)... 192.155.89.90, 2600:3c03::f03c:91ff:fedb:6b1d
Connecting to apt.puppetlabs.com (apt.puppetlabs.com)|192.155.89.90|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7384 (7.2K) [application/x-debian-package]
Saving to: ‘puppetlabs-release-trusty.deb’

puppetlabs-release-tr 100%[===========================>] 7.21K --.-KB/s in 0.06s

2015-06-17 00:19:26 (130 KB/s) - ‘puppetlabs-release-trusty.deb’ saved [7384/7384]

下载完成,我们来安装它:

# dpkg -i puppetlabs-release-trusty.deb

Selecting previously unselected package puppetlabs-release.
(Reading database ... 85899 files and directories currently installed.)
Preparing to unpack puppetlabs-release-trusty.deb ...
Unpacking puppetlabs-release (1.0-11) ...
Setting up puppetlabs-release (1.0-11) ...

使用 apt 包管理命令更新一下本地的软件源:

# apt-get update

现在我们就可以安装 puppetmaster-passenger 了

# apt-get install puppetmaster-passenger

提示: 在安装的时候可能会报错:

Warning: Setting templatedir is deprecated.see http://links.puppetlabs.com/env-settings-deprecations (at /usr/lib/ruby/vendor_ruby/puppet/settings.rb:1139:in `issue_deprecation_warning')

不过不用担心,忽略掉它就好,我们只需要在设置配置文件的时候把这一项禁用就行了。

如何来查看 puppet 主控服务器是否已经安装成功了呢?非常简单,只需要使用下面的命令查看它的版本就可以了。

# puppet --version

3.8.1

现在我们已经安装好了 puppet 主控服务器。因为我们使用的是配合 apache 的 passenger,由 apache 来控制 puppet 主控服务器,当 apache 运行时 puppet 主控服务器才运行。

在开始之前,我们需要通过停止 apache 服务来让 puppet 主控服务器停止运行。

# systemctl stop apache2

4. 使用 Apt 工具锁定主控服务器的版本

现在已经安装了 3.8.1 版的 puppet,我们锁定这个版本不让它随意升级,因为升级会造成配置文件混乱。 使用 apt 工具来锁定它,这里我们需要使用文本编辑器来创建一个新的文件 /etc/apt/preferences.d/00-puppet.pref

# nano /etc/apt/preferences.d/00-puppet.pref

在新创建的文件里面添加以下内容:

# /etc/apt/preferences.d/00-puppet.pref
Package: puppet puppet-common puppetmaster-passenger
Pin: version 3.8*
Pin-Priority: 501

这样在以后的系统软件升级中, puppet 主控服务器将不会跟随系统软件一起升级。

5. 配置 Puppet 主控服务器

Puppet 主控服务器作为一个证书发行机构,需要生成它自己的证书,用于签署所有代理的证书的请求。首先我们要删除所有在该软件包安装过程中创建出来的 ssl 证书。本地默认的 puppet 证书放在 /var/lib/puppet/ssl。因此我们只需要使用 rm 命令来整个移除这些证书就可以了。

# rm -rf /var/lib/puppet/ssl

现在来配置该证书,在创建 puppet 主控服务器证书时,我们需要包括代理节点与主控服务器沟通所用的每个 DNS 名称。使用文本编辑器来修改服务器的配置文件 puppet.conf

# nano /etc/puppet/puppet.conf

输出的结果像下面这样

[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
templatedir=$confdir/templates

[master]
# These are needed when the puppetmaster is run by passenger
# and can safely be removed if webrick is used.
ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY

在这我们需要注释掉 templatedir 这行使它失效。然后在文件的 [main] 小节的结尾添加下面的信息。

server = puppetmaster
environment = production
runinterval = 1h
strict_variables = true
certname = puppetmaster
dns_alt_names = puppetmaster, puppetmaster.example.com

还有很多你可能用的到的配置选项。 如果你有需要,在 Puppet 实验室有一份详细的描述文件供你阅读: Main Config File (puppet.conf)

编辑完成后保存退出。

使用下面的命令来生成一个新的证书。

# puppet master --verbose --no-daemonize

Info: Creating a new SSL key for ca
Info: Creating a new SSL certificate request for ca
Info: Certificate Request fingerprint (SHA256): F6:2F:69:89:BA:A5:5E:FF:7F:94:15:6B:A7:C4:20:CE:23:C7:E3:C9:63:53:E0:F2:76:D7:2E:E0:BF:BD:A6:78
...
Notice: puppetmaster has a waiting certificate request
Notice: Signed certificate request for puppetmaster
Notice: Removing file Puppet::SSL::CertificateRequest puppetmaster at '/var/lib/puppet/ssl/ca/requests/puppetmaster.pem'
Notice: Removing file Puppet::SSL::CertificateRequest puppetmaster at '/var/lib/puppet/ssl/certificate_requests/puppetmaster.pem'
Notice: Starting Puppet master version 3.8.1
^CNotice: Caught INT; storing stop
Notice: Processing stop

至此,证书已经生成。一旦我们看到 Notice: Starting Puppet master version 3.8.1,就表明证书就已经制作好了。我们按下 CTRL-C 回到 shell 命令行。

查看新生成证书的信息,可以使用下面的命令。

# puppet cert list -all

+ "puppetmaster" (SHA256) 33:28:97:86:A1:C3:2F:73:10:D1:FB:42:DA:D5:42:69:71:84:F0:E2:8A:01:B9:58:38:90:E4:7D:B7:25:23:EC (alt names: "DNS:puppetmaster", "DNS:puppetmaster.example.com")

6. 创建一个 Puppet 清单

默认的主 清单 Manifest /etc/puppet/manifests/site.pp。 这个主要清单文件包括了用于在代理节点执行的配置定义。现在我们来创建一个清单文件:

# nano /etc/puppet/manifests/site.pp

在刚打开的文件里面添加下面这几行:

# execute 'apt-get update'
exec { 'apt-update': # exec resource named 'apt-update'
command => '/usr/bin/apt-get update' # command this resource will run
}

# install apache2 package
package { 'apache2':
require => Exec['apt-update'], # require 'apt-update' before installing
ensure => installed,
}

# ensure apache2 service is running
service { 'apache2':
ensure => running,
}

以上这几行的意思是给代理节点部署 apache web 服务。

7. 运行 puppet 主控服务

已经准备好运行 puppet 主控服务器 了,那么开启 apache 服务来让它启动

# systemctl start apache2

我们 puppet 主控服务器已经运行,不过它还不能管理任何代理节点。现在我们给 puppet 主控服务器添加代理节点.

提示: 如果报错

Job for apache2.service failed. see "systemctl status apache2.service" and "journalctl -xe" for details.

肯定是 apache 服务器有一些问题,我们可以使用 root 或是 sudo 访问权限来运行 apachectl start查看它输出的日志。在本教程执行过程中, 我们发现一个 /etc/apache2/sites-enabled/puppetmaster.conf 的证书配置问题。修改其中的 SSLCertificateFile /var/lib/puppet/ssl/certs/server.pemSSLCertificateFile /var/lib/puppet/ssl/certs/puppetmaster.pem,然后注释掉后面这行 SSLCertificateKeyFile 。然后在命令行重新启动 apache。

8. 安装 Puppet 代理节点的软件包

我们已经准备好了 puppet 的服务器,现在需要一个可以管理的代理节点,我们将安装 puppet 代理软件到节点上去。这里我们要给每一个需要管理的节点安装代理软件,并且确保这些节点能够通过 DNS 查询到服务器主机。下面将 安装最新的代理软件到 节点 puppetnode.example.com 上。

在代理节点上使用下面的命令下载 puppet 实验室提供的软件包:

# cd /tmp/
# wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb\

--2015-06-17 00:54:42-- https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
Resolving apt.puppetlabs.com (apt.puppetlabs.com)... 192.155.89.90, 2600:3c03::f03c:91ff:fedb:6b1d
Connecting to apt.puppetlabs.com (apt.puppetlabs.com)|192.155.89.90|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7384 (7.2K) [application/x-debian-package]
Saving to: ‘puppetlabs-release-trusty.deb’

puppetlabs-release-tr 100%[===========================>] 7.21K --.-KB/s in 0.04s

2015-06-17 00:54:42 (162 KB/s) - ‘puppetlabs-release-trusty.deb’ saved [7384/7384]

在 ubuntu 15.04 上我们使用 debian 包管理系统来安装它,命令如下:

# dpkg -i puppetlabs-release-trusty.deb

使用 apt 包管理命令更新一下本地的软件源:

# apt-get update

通过远程仓库安装:

# apt-get install puppet

Puppet 代理默认是不启动的。这里我们需要使用文本编辑器修改 /etc/default/puppet 文件,使它正常工作:

# nano /etc/default/puppet

更改 START 的值改成 "yes" 。

START=yes

最后保存并退出。

9. 使用 Apt 工具锁定代理软件的版本

和上面的步骤一样为防止随意升级造成的配置文件混乱,我们要使用 apt 工具来把它锁定。具体做法是使用文本编辑器创建一个文件 /etc/apt/preferences.d/00-puppet.pref

# nano /etc/apt/preferences.d/00-puppet.pref

在新建的文件里面加入如下内容

# /etc/apt/preferences.d/00-puppet.pref
Package: puppet puppet-common
Pin: version 3.8*
Pin-Priority: 501

这样 puppet 就不会随着系统软件升级而随意升级了。

10. 配置 puppet 代理节点

我们需要编辑一下代理节点的 puppet.conf 文件,来使它运行。

# nano /etc/puppet/puppet.conf

它看起来和服务器的配置文件完全一样。同样注释掉 templatedir这行。不同的是在这里我们需要删除掉所有关于[master] 的部分。

假定主控服务器可以通过名字“puppet-master”访问,我们的客户端应该可以和它相互连接通信。如果不行的话,我们需要使用完整的主机域名 puppetmaster.example.com

[agent]
server = puppetmaster.example.com
certname = puppetnode.example.com

在文件的结尾增加上面3行,增加之后文件内容像下面这样:

[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
#templatedir=$confdir/templates

[agent]
server = puppetmaster.example.com
certname = puppetnode.example.com

最后保存并退出。

使用下面的命令来启动客户端软件:

# systemctl start puppet

如果一切顺利的话,我们不会看到命令行有任何输出。 第一次运行的时候,代理节点会生成一个 ssl 证书并且给服务器发送一个请求,经过签名确认后,两台机器就可以互相通信了。

提示: 如果这是你添加的第一个代理节点,建议你在添加其他节点前先给这个证书签名。一旦能够通过并正常运行,回过头来再添加其他代理节点。

11. 在主控服务器上对证书请求进行签名

第一次运行的时候,代理节点会生成一个 ssl 证书并且给服务器发送一个签名请求。在主控服务器给代理节点服务器证书签名之后,主服务器才能和代理服务器通信并且控制代理服务器。

在主控服务器上使用下面的命令来列出当前的证书请求:

# puppet cert list
"puppetnode.example.com" (SHA256) 31:A1:7E:23:6B:CD:7B:7D:83:98:33:8B:21:01:A6:C4:01:D5:53:3D:A0:0E:77:9A:77:AE:8F:05:4A:9A:50:B2

因为只设置了一台代理节点服务器,所以我们将只看到一个请求。看起来类似如上,代理节点的完整域名即其主机名。

注意有没有“+”号在前面,代表这个证书有没有被签名。

使用带有主机名的 puppet cert sign这个命令来签署这个签名请求,如下:

# puppet cert sign puppetnode.example.com
Notice: Signed certificate request for puppetnode.example.com
Notice: Removing file Puppet::SSL::CertificateRequest puppetnode.example.com at '/var/lib/puppet/ssl/ca/requests/puppetnode.example.com.pem'

主控服务器现在可以通讯和控制它签名过的代理节点了。

如果想签署所有的当前请求,可以使用 -all 选项,如下所示:

# puppet cert sign --all

12. 删除一个 Puppet 证书

如果我们想移除一个主机,或者想重建一个主机然后再添加它。下面的例子里我们将展示如何删除 puppet 主控服务器上面的一个证书。使用的命令如下:

# puppet cert clean hostname
Notice: Revoked certificate with serial 5
Notice: Removing file Puppet::SSL::Certificate puppetnode.example.com at '/var/lib/puppet/ssl/ca/signed/puppetnode.example.com.pem'
Notice: Removing file Puppet::SSL::Certificate puppetnode.example.com at '/var/lib/puppet/ssl/certs/puppetnode.example.com.pem'

如果我们想查看所有的签署和未签署的请求,使用下面这条命令:

# puppet cert list --all
+ "puppetmaster" (SHA256) 33:28:97:86:A1:C3:2F:73:10:D1:FB:42:DA:D5:42:69:71:84:F0:E2:8A:01:B9:58:38:90:E4:7D:B7:25:23:EC (alt names: "DNS:puppetmaster", "DNS:puppetmaster.example.com") 

13. 部署 Puppet 清单

当配置并完成 puppet 清单后,现在我们需要部署清单到代理节点服务器上。要应用并加载主 puppet 清单,我们可以在代理节点服务器上面使用下面的命令:

# puppet agent --test

Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for puppetnode.example.com
Info: Applying configuration version '1434563858'
Notice: /Stage[main]/Main/Exec[apt-update]/returns: executed successfully
Notice: Finished catalog run in 10.53 seconds

这里向我们展示了主清单如何立即影响到了一个单一的服务器。

如果我们打算运行的 puppet 清单与主清单没有什么关联,我们可以简单使用 puppet apply 带上相应的清单文件的路径即可。它仅将清单应用到我们运行该清单的代理节点上。

# puppet apply /etc/puppet/manifest/test.pp

14. 为特定节点配置清单

如果我们想部署一个清单到某个特定的节点,我们需要如下配置清单。

在主控服务器上面使用文本编辑器编辑 /etc/puppet/manifest/site.pp

# nano /etc/puppet/manifest/site.pp

添加下面的内容进去

node 'puppetnode', 'puppetnode1' {
# execute 'apt-get update'
exec { 'apt-update': # exec resource named 'apt-update'
command => '/usr/bin/apt-get update' # command this resource will run
}

# install apache2 package
package { 'apache2':
require => Exec['apt-update'], # require 'apt-update' before installing
ensure => installed,
}

# ensure apache2 service is running
service { 'apache2':
ensure => running,
}
}

这里的配置显示我们将在名为 puppetnode 和 puppetnode1 的2个指定的节点上面安装 apache 服务。这里可以添加其他我们需要安装部署的具体节点进去。

15. 配置清单模块

模块对于组合任务是非常有用的,在 Puppet 社区有很多人贡献了自己的模块组件。

在主控服务器上, 我们将使用 puppet module 命令来安装 puppetlabs-apache 模块。

# puppet module install puppetlabs-apache

警告: 千万不要在一个已经部署 apache 环境的机器上面使用这个模块,否则它将清空你没有被 puppet 管理的 apache 配置。

现在用文本编辑器来修改 site.pp

# nano /etc/puppet/manifest/site.pp

添加下面的内容进去,在 puppetnode 上面安装 apache 服务。

node 'puppet-node' {
class { 'apache': } # use apache module
apache::vhost { 'example.com': # define vhost resource
port => '80',
docroot => '/var/www/html'
}
}

保存退出。然后重新运行该清单来为我们的代理节点部署 apache 配置。

总结

现在我们已经成功的在 ubuntu 15.04 上面部署并运行 puppet 来管理代理节点服务器的基础运行环境。我们学习了 puppet 是如何工作的,编写清单文件,节点与主机间使用 ssl 证书认证的认证过程。使用 puppet 开源软件配置管理工具在众多的代理节点上来控制、管理和配置重复性任务是非常容易的。如果你有任何的问题,建议,反馈,与我们取得联系,我们将第一时间完善更新,谢谢。


via: http://linoxide.com/linux-how-to/install-puppet-ubuntu-15-04/

作者:Arun Pyasi 译者:ivo-wang 校对:wxy

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

Linux tar) 命令是归档或分发文件时的强大武器。GNU tar 归档包可以包含多个文件和目录,还能保留其文件权限,它还支持多种压缩格式。Tar 表示 "Tape Archiver",这种格式是 POSIX 标准。

Tar 文件格式

tar 压缩等级简介:

  • 无压缩 没有压缩的文件用 .tar 结尾。
  • Gzip 压缩 Gzip 格式是 tar 使用最广泛的压缩格式,它能快速压缩和提取文件。用 gzip 压缩的文件通常用 .tar.gz 或 .tgz 结尾。这里有一些如何创建解压 tar.gz 文件的例子。
  • Bzip2 压缩 和 Gzip 格式相比 Bzip2 提供了更好的压缩比。创建压缩文件也比较慢,通常采用 .tar.bz2 结尾。
  • Lzip(LAMA)压缩 Lizp 压缩结合了 Gzip 快速的优势,以及和 Bzip2 类似(甚至更好) 的压缩率。尽管有这些好处,这个格式并没有得到广泛使用。
  • Lzop 压缩 这个压缩选项也许是 tar 最快的压缩格式,它的压缩率和 gzip 类似,但也没有广泛使用。

常见的格式是 tar.gz 和 tar.bz2。如果你想快速压缩,那么就是用 gzip。如果归档文件大小比较重要,就是用 tar.bz2。

tar 命令用来干什么?

下面是一些使用 tar 命令的常见情形。

  • 备份服务器或桌面系统
  • 文档归档
  • 软件分发

安装 tar

大部分 Linux 系统默认都安装了 tar。如果没有,这里有安装 tar 的命令。

CentOS

在 CentOS 中,以 root 用户在 shell 中执行下面的命令安装 tar。

yum install tar

Ubuntu

下面的命令会在 Ubuntu 上安装 tar。“sudo” 命令确保 apt 命令是以 root 权限运行的。

sudo apt-get install tar

Debian

下面的 apt 命令在 Debian 上安装 tar。

apt-get install tar

Windows

tar 命令在 Windows 也可以使用,你可以从 Gunwin 项目http://gnuwin32.sourceforge.net/packages/gtar.htm中下载它。

创建 tar.gz 文件

下面是在 shell 中运行 tar 命令 的一些例子。下面我会解释这些命令行选项。

tar pczf myarchive.tar.gz /home/till/mydocuments

这个命令会创建归档文件 myarchive.tar.gz,其中包括了路径 /home/till/mydocuments 中的文件和目录。命令行选项解释

  • [p] 这个选项表示 “preserve”,它指示 tar 在归档文件中保留文件属主和权限信息。
  • [c] 表示创建。要创建文件时不能缺少这个选项。
  • [z] z 选项启用 gzip 压缩。
  • [f] file 选项告诉 tar 创建一个归档文件。如果没有这个选项 tar 会把输出发送到标准输出( LCTT 译注:如果没有指定,标准输出默认是屏幕,显然你不会想在屏幕上显示一堆乱码,通常你可以用管道符号送到其它程序去)。

Tar 命令示例

示例 1: 备份 /etc 目录

创建 /etc 配置目录的一个备份。备份保存在 root 目录。

tar pczvf /root/etc.tar.gz /etc

用 tar 备份 /etc 目录

要以 root 用户运行命令确保 /etc 中的所有文件都会被包含在备份中。这次,我在命令中添加了 [v] 选项。这个选项表示 verbose,它告诉 tar 显示所有被包含到归档文件中的文件名。

示例 2: 备份你的 /home 目录

创建你的 home 目录的备份。备份会被保存到 /backup 目录。

tar czf /backup/myuser.tar.gz /home/myuser

用你的用户名替换 myuser。这个命令中,我省略了 [p] 选项,也就不会保存权限。

示例 3: 基于文件的 MySQL 数据库备份

在大部分 Linux 发行版中,MySQL 数据库保存在 /var/lib/mysql。你可以使用下面的命令来查看:

ls /var/lib/mysql

使用 tar 基于文件备份 MySQL

用 tar 备份 MySQL 数据文件时为了保持数据一致性,首先停用数据库服务器。备份会被写到 /backup 目录。

1) 创建 backup 目录

mkdir /backup
chmod 600 /backup

2) 停止 MySQL,用 tar 进行备份并重新启动数据库。

service mysql stop
tar pczf /backup/mysql.tar.gz /var/lib/mysql
service mysql start
ls -lah /backup

基于文件的 MySQL 备份

提取 tar.gz 文件

提取 tar.gz 文件的命令是:

tar xzf myarchive.tar.gz

tar 命令选项解释

  • [x] x 表示提取,提取 tar 文件时这个命令不可缺少。
  • [z] z 选项告诉 tar 要解压的归档文件是 gzip 格式。
  • [f] 该选项告诉 tar 从一个文件中读取归档内容,本例中是 myarchive.tar.gz。

上面的 tar 命令会安静地提取 tar.gz 文件,除非有错误信息。如果你想要看提取了哪些文件,那么添加 “v” 选项。

tar xzvf myarchive.tar.gz

[v] 选项表示 verbose,它会向你显示解压的文件名。

提取 tar.gz 文件


via: https://www.howtoforge.com/tutorial/linux-tar-command/

作者:howtoforge 译者:ictlyh 校对:wxy

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

AWStats 是一个开源的网站分析报告工具,可以生成强大的网站、流媒体、FTP 或邮件服务器的访问统计图。此日志分析器以 CGI 或命令行方式进行工作,并在网页中以图表的形式尽可能的显示你日志中所有的信息。它可以“部分”读取信息文件,以便能够频繁并快速处理大量的日志文件。它支持绝大多数 Web 服务器日志文件格式,包括 Apache,IIS 等。

本文将帮助你在 Ubuntu 上安装配置 AWStats。

安装 AWStats 包

默认情况下,AWStats 的包可以在 Ubuntu 仓库中找到。

可以通过运行下面的命令来安装:

sudo apt-get install awstats

接下来,你需要启用 Apache 的 CGI 模块。

运行以下命令来启动 CGI:

sudo a2enmod cgi

现在,重新启动 Apache 以使改变生效。

sudo /etc/init.d/apache2 restart

配置 AWStats

你需要为你想要查看统计的每个域或网站创建一个配置文件。在这个例子中,我们将为 “test.com” 创建一个配置文件。

要完成此步,你可以通过复制 AWStats 的默认配置文件来配置你要统计的域。

sudo cp /etc/awstats/awstats.conf /etc/awstats/awstats.test.com.conf

现在,你需要在配置文件中做一些修改:

sudo nano /etc/awstats/awstats.test.com.conf

像下面这样修改一下:

# Change to Apache log file, by default it's /var/log/apache2/access.log
LogFile="/var/log/apache2/access.log"

# Change to the website domain name
SiteDomain="test.com"
HostAliases="www.test.com localhost 127.0.0.1"

# When this parameter is set to 1, AWStats adds a button on report page to allow to "update" statistics from a web browser
AllowToUpdateStatsFromBrowser=1

保存并关闭文件。

修改配置文件后,你需要用服务器的当前日志建立初步统计。你可以这样做:

sudo /usr/lib/cgi-bin/awstats.pl -config=test.com -update

输出会是这个样子:

awtstats

为 Apache 配置 AWStats

接下来,你需要配置 Apache2 来显示统计数据。现在你需要将 “cgi-bin” 文件夹中的内容复制到 Apache 默认根目录下。默认它是在 “/usr/lib/cgi-bin”。

运行以下命令来完成此步:

sudo cp -r /usr/lib/cgi-bin /var/www/html/
sudo  chown www-data:www-data /var/www/html/cgi-bin/
sudo chmod -R 755 /var/www/html/cgi-bin/

测试 AWStats

现在,您可以通过访问 url “http://your-server-ip/cgi-bin/awstats.pl?config=test.com.” 来查看 AWStats 的页面。

它的页面像下面这样:

awstats_page

设置定时任务来更新日志

建议你创建一个定时任务,使用新创建的日志条目定期更新 AWStats 的数据库,然后统计会定期更新。这也将节省你的时间。

要做到这一点,你需要编辑 “/etc/crontab” 文件:

sudo nano /etc/crontab

添加下面那一行来让 AWStats 每十分钟更新一次。

*/10 * * * * root /usr/lib/cgi-bin/awstats.pl -config=test.com -update

保存并关闭文件。

结论

AWStats 是一个非常有用的工具,可以让你对网站的状况了如指掌,并能协助你分析网站。它非常容易安装和配置。如果你有任何疑问,请在下面发表评论。


via: https://www.maketecheasier.com/set-up-awstats-ubuntu/

作者:Hitesh Jethva 译者:strugglingyouth 校对:wxy

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