Linux中國

如何用Puppet和Augeas管理Linux配置

Augeas基本上就是一個配置編輯工具。它以他們原生的格式解析配置文件並且將它們轉換成樹。配置的更改可以通過操作樹來完成,並可以以原生配置文件格式保存配置。

這篇教程要達成什麼目的?

我們會針對我們之前構建的Puppet伺服器安裝並配置Augeas。我們會使用這個工具創建並測試幾個不同的配置文件,並學習如何適當地使用它來管理我們的系統配置。

前置閱讀

我們需要一台工作的Puppet伺服器和客戶端。如果你還沒有,請先按照我先前的教程來。

Augeas安裝包可以在標準CentOS/RHEL倉庫中找到。不幸的是,Puppet用到的Augeas的ruby封裝只在puppetlabs倉庫中(或者EPEL)中才有。如果你系統中還沒有這個倉庫,請使用下面的命令:

在CentOS/RHEL 6.5上:

 # rpm -­ivh https://yum.puppetlabs.com/el/6.5/products/x86_64/puppetlabs­release­6­10.noarch.rpm 

在CentOS/RHEL 7上:

 # rpm -­ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabs­release­7­10.noarch.rpm 

在你成功地安裝了這個倉庫後,在你的系統中安裝Ruby­Augeas:

 # yum install ruby­augeas 

或者如果你是從我的上一篇教程中繼續的,使用puppet的方法安裝這個包。在/etc/puppet/manifests/site.pp中修改你的custom_utils類,在packages這行中加入「ruby­augeas」。

class custom_utils {
        package { ["nmap","telnet","vim­enhanced","traceroute","ruby­augeas"]:
                ensure => latest,
                allow_virtual => false,
        }
} 

不帶Puppet的Augeas

如我先前所說,最初Augeas並不是來自Puppet實驗室,這意味著即使沒有Puppet本身我們仍然可以使用它。這種方法可在你將它們部署到Puppet環境之前,驗證你的修改和想法是否是正確的。要做到這一點,你需要在你的系統中安裝一個額外的軟體包。請執行以下命令:

# yum install augeas 

Puppet Augeas 示例

用於演示,這裡有幾個Augeas使用案例。

管理 /etc/sudoers 文件

  1. 給wheel組加上sudo許可權。

這個例子會向你展示如何在你的GNU/Linux系統中為%wheel組加上sudo許可權。

# 安裝sudo包
package { 'sudo':
    ensure => installed, # 確保sudo包已安裝
}

# 允許用戶屬於wheel組來使用sudo
augeas { 'sudo_wheel':
    context => '/files/etc/sudoers', # 目標文件是 /etc/sudoers
    changes => [
        # 允許wheel用戶使用sudo
        'set spec[user = "%wheel"]/user %wheel',
        'set spec[user = "%wheel"]/host_group/host ALL',
        'set spec[user = "%wheel"]/host_group/command ALL',
        'set spec[user = "%wheel"]/host_group/command/runas_user ALL',
    ]
} 

現在來解釋這些代碼做了什麼:spec定義了/etc/sudoers中的用戶段,[user]定義了數組中給定的用戶,所有的定義放在該用戶的斜杠( / ) 後那部分。因此在典型的配置中這個可以這麼表達:

user host_group/host host_group/command host_group/command/runas_user

這個將被轉換成/etc/sudoers下的這一行:

%wheel ALL = (ALL) ALL 
  1. 添加命令別稱

下面這部分會向你展示如何定義命令別名,它可以在你的sudoer文件中使用。

# 創建新的SERVICE別名,包含了一些基本的特權命令。
augeas { 'sudo_cmdalias':
    context => '/files/etc/sudoers', # 目標文件是 /etc/sudoers
    changes => [
      "set Cmnd_Alias[alias/name = 'SERVICES']/alias/name SERVICES",
      "set Cmnd_Alias[alias/name = 'SERVICES']/alias/command[1] /sbin/service",
      "set Cmnd_Alias[alias/name = 'SERVICES']/alias/command[2] /sbin/chkconfig",
      "set Cmnd_Alias[alias/name = 'SERVICES']/alias/command[3] /bin/hostname",
      "set Cmnd_Alias[alias/name = 'SERVICES']/alias/command[4] /sbin/shutdown",
    ]
} 

sudo命令別名的語法很簡單:Cmnd_Alias定義了命令別名欄位,[alias/name]綁定所有給定的別名,/alias/name SERVICES 定義真實的別名,alias/command 是屬於該別名的所有命令的數組。以上將被轉換如下:

Cmnd_Alias SERVICES = /sbin/service , /sbin/chkconfig , /bin/hostname , /sbin/shutdown

關於/etc/sudoers的更多信息,請訪問官方文檔

向一個組中加入用戶

要使用Augeas向組中添加用戶,你也許要添加一個新用戶,不管是排在 gid 欄位還是最後的用戶 uid 之後。我們在這個例子中使用SVN組。這可以通過下面的命令達成:

在Puppet中:

augeas { 'augeas_mod_group:
    context => '/files/etc/group', #目標文件是 /etc/group
    changes => [
        "ins user after svn/*[self::gid or self::user][last()]",
        "set svn/user[last()] john",
    ]
}

使用 augtool:

 augtool> ins user after /files/etc/group/svn/*[self::gid or self::user][last()] augtool> set /files/etc/group/svn/user[last()] john 

總結

目前為止,你應該對如何在Puppet項目中使用Augeas有點明白了。隨意地試一下,你肯定需要瀏覽官方的Augeas文檔。這會幫助你了解如何在你的個人項目中正確地使用Augeas,並且它會讓你知道可以用它節省多少時間。

如有任何問題,歡迎在下面的評論中發布,我會儘力解答和向你建議。

有用的鏈接

via: http://xmodulo.com/2014/09/manage-configurations-linux-puppet-augeas.html

作者:Jaroslav Štěpánek 譯者:geekpi 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國