在工作中常常会有这样一种需求:某几个人需要某些测试服务器的root权限。比如,开发部门的张三,李四,王五,赵六需要rsync服务器的root权限。有些同学会说那直接 visudo在里面添加几个人不就行了。是的。这样做没错。
但我们rsync服务器有10台呢。我们一个一个的这样做是不是太麻烦了。而且后期如果把赵六换成马强呢?所以我们需要通过puppet做一个模板。有什么变动,只需要改动模板就行了。
前奏:

notify{'notice': message => "I am $vlan_name" #打印变更内容 } #判断变更是否等于 itd(不区分大小写) case $vlan_name { 'itd': { package { ['SQLyog', 'navicat-premium','imake']: } file {"test files/tmp/test": path => '/tmp/test' content => "hello" mode =>0644 #简写形式 #file {"/tmp/test": # content => "hello" } } }
sudoers.pp

class basefx::sudoers{ #定义sudoers类 case $::system_class{ #判断变理system_class是什么 'nagios_server': { #如果服务器的system_class是nagios_server file{ 'sudoers file': content => template("$svn_files/etc/sudoers.erb"), #调用erb模板 path => '/etc/sudoers' , mode => 0440, } } 'render','workstation': { file{ 'sudoers file': content => template("$svn_files/etc/sudoers.erb"), path => '/etc/sudoers' , mode => 0440, } file{ 'qube sudoers file': source => "$svn_files/etc/sudoers.d/qube" , path => '/etc/sudoers.d/qube' , mode => 0440, } } } case $::hostname { #判断服务器hostname是什么 /^ple-web-test/: { #如果是以ple-web-test开头的服务器,则继续执行 file{ '/etc/sudoers.d/ple': content => template("$svn_files/etc/sudoers.d/ple.erb") } } /^dvd/: { file{ '/etc/sudoers.d/dvd': content => template("$svn_files/etc/sudoers.d/dvd.erb") } } } }
sudoers.erb

<% if @hostname == 'dvd02' -%> User_Alias DVD = qiangbs,linsn,caoxu,apache DVD ALL=(ALL) NOPASSWD: ALL <% end -%> <% if @hostname == 'dvd03' -%> User_Alias DVD = qiangbs,chenbin,wanghao1,apache DVD ALL=(ALL) NOPASSWD: ALL <% end -%> <% if @hostname =~ /^dvd/ -%> #主机名以dvd开头的机器 User_Alias DVD = qiangbs,apache Cmnd_Alias DVD_CMD = /bin,/usr/sbin/xfs_fsr DVD ALL=(ALL) NOPASSWD: ALL
puppet参考文档:https://puppet.com/docs/puppet/5.3/type.html