如何用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/puppetlabsrelease610.noarch.rpm
在CentOS/RHEL 7上:
# rpm -ivh https://yum.puppetlabs.com/el/7/products/x86_64/puppetlabsrelease710.noarch.rpm
在你成功地安裝了這個倉庫後,在你的系統中安裝RubyAugeas:
# yum install rubyaugeas
或者如果你是從我的上一篇教程中繼續的,使用puppet的方法安裝這個包。在/etc/puppet/manifests/site.pp中修改你的custom_utils類,在packages這行中加入「rubyaugeas」。
class custom_utils {
package { ["nmap","telnet","vimenhanced","traceroute","rubyaugeas"]:
ensure => latest,
allow_virtual => false,
}
}
不帶Puppet的Augeas
如我先前所說,最初Augeas並不是來自Puppet實驗室,這意味著即使沒有Puppet本身我們仍然可以使用它。這種方法可在你將它們部署到Puppet環境之前,驗證你的修改和想法是否是正確的。要做到這一點,你需要在你的系統中安裝一個額外的軟體包。請執行以下命令:
# yum install augeas
Puppet Augeas 示例
用於演示,這裡有幾個Augeas使用案例。
管理 /etc/sudoers 文件
- 給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
- 添加命令別稱
下面這部分會向你展示如何定義命令別名,它可以在你的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,並且它會讓你知道可以用它節省多少時間。
如有任何問題,歡迎在下面的評論中發布,我會儘力解答和向你建議。
有用的鏈接
- http://www.watzmann.net/categories/augeas.html: 包含許多關於 Augeas 使用的教程。
- http://projects.puppetlabs.com/projects/1/wiki/puppet_augeas: Puppet wiki 帶有許多實例。
via: http://xmodulo.com/2014/09/manage-configurations-linux-puppet-augeas.html
作者:Jaroslav Štěpánek 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive