saltstack实战1---安装和配置文件初步讲解

前期准备

 

准备4台机器,设置IP地址和主机名

10.0.1.171     master    

10.0.1.172    minion01

10.0.1.173    minion02

10.0.1.174    mysql 

10.0.1.175    master-bak(用于模拟更换master的练习)

系统环境:

5台机器系统版本都是centos6.6  64位版本

[root@master ~]# cat /etc/redhat-release 
CentOS release 6.6 (Final)
[root@master ~]# uname -r
2.6.32-504.el6.x86_64
[root@master ~]# uname -m
x86_64
[root@master ~]# 

  

在初步学习中,认识到saltstack可以批量管理很多机器。master是管理服务器,minion上是被管理的机器。mysql服务器可以存放一些minion返回的消息

saltstack是python语言写的,是个开源的软件,底层通信方式采取ZeroMQ。

master启动后默认有两个端口,4505和4506,其中4505是发送命令消息到minion上,4506接收来自minion的返回消息。

4506端口是minion主动连接master的端口,是一个长连接端口

 

 

saltstack中master和minion的安装部分

 

saltstack有3种安装方式:

1、源码安装
2、pip安装
3、yum安装
这3种方式结果都一样,都是把模块拷贝到相应目录下,yum安装方式是主流,这里我们采用这种方式,安装过程比较简单,完全能实现我们的功能要求。
saltstack是python开发的,安装过程会有很多python的包,master上没必要安装minion包了,一般监控zabbix的server上可能会安装那种agent包,但是master用于批量管理机器的,没必要安装minion

 

由于saltstack包可以在epel源中下载安装,因此需要先安装epel源,这样yum仓库中才能安装

1、每台机器上先安装epel源,它会在/etc/yum.repos.d/下面自动生成epel的源
 
rpm  -Uvh  http://mirrors.yun-idc.com/epel/6Server/x86_64/epel-release-6-8.noarch.rpm

 

2、master机器上安装salt-master包,需要在10.0.1.171机器上执行如下命令

yum -y install salt-master

3、在两台minion机器上安装salt-minion包,在10.0.1.172和10.0.1.173上执行如下命令

yum -y install salt-minion
 
4、master命令行上输入salt然后按两次tab键出现如下命令提示
[root@master ~]# salt
salt         salt-key     salt-run     
salt-cp      salt-master  salt-unity   
[root@master ~]# salt
salt : 发送命令,让所有minion执行工作都是通过它
salt-key:管理minion密钥的
salt-cp:复制作用的
salt-mater:用的比较少
salt-run:用的比较少,暂时没用过
 
5、master和minion默认配置文件路径
 
salt-master的默认配置文件路径如下
[root@master ~]# ll /etc/salt/master 
-rw-r----- 1 root root 29560 Dec  3 06:10 /etc/salt/master
[root@master ~]# 
 
salt-minion的默认配置文件路径如下
[root@minion01 ~]# ll /etc/salt/minion
-rw-r----- 1 root root 26366 Dec 15 22:42 /etc/salt/minion
[root@minion01 ~]# 

  

 
 
重启master端的服务,查看监听,可以看到4505和4506已经启动,对于master配置文件默认修改后不重启也可能会生效,但是最好每次修改重启
其中4505端口是pub_port 给minion下发命令的端;4506端口是ret_port,是接收minion返回命令执行结果的端口
[root@master ~]# /etc/init.d/salt-master restart
Stopping salt-master daemon:                               [  OK  ]
Starting salt-master daemon:                               [  OK  ]
[root@master ~]# netstat -antp|grep 450
tcp        0      0 0.0.0.0:4505                0.0.0.0:*                   LISTEN      4533/python2.6      
tcp        0      0 0.0.0.0:4506                0.0.0.0:*                   LISTEN      4549/python2.6 

关于4505和4506端口这两个默认监听端口都是可以改的 

 4505端口在22行,用于发送命令给minion端
 21 # The tcp port used by the publisher:
 22 #publish_port: 4505

 4506端口,接收来自minion端的执行结果
 55 # The port used by the communication interface. The ret (return) port is the
 56 # interface used for the file server, authentication, job returns, etc.
 57 #ret_port: 4506

如果要修改4506端口的话,minion端由于是主动连接master端的4506,因此minion的配置文件里也有此端口,也需要修改

vim /etc/salt/minion

在第52行 

 51 # Set the port used by the master reply and authentication server.
 52 #master_port: 4506
 53 
 54 # The user to run salt.

  

 

master和minion配置文件讲解

 

minion端的配置文件如下
[root@minion01 ~]# ll /etc/salt/minion
-rw-r----- 1 root root 26365 Mar 23  2016 /etc/salt/minion
[root@minion01 ~]# 

 salt-minion端的版本如下(注意saltstack的版本采用日期的方式命名)

[root@minion01 ~]# salt-minion --version
salt-minion 2015.5.10 (Lithium)
[root@minion01 ~]# 

 

先在2台minion上配置master的主机域名解析,修改minion的hosts文件。 (master是根据minionid操作的,对于hosts文件中添加minion的主机名不是必须的)

修改minion01主机,添加master的解析
[root@minion01 ~]# tail -1 /etc/hosts
10.0.1.171    master
[root@minion01 ~]# 
同时保证添加之后可以通过主机名ping通master
[root@minion01 ~]# ping master
PING master (10.0.1.171) 56(84) bytes of data.
64 bytes from master (10.0.1.171): icmp_seq=1 ttl=64 time=0.513 ms
64 bytes from master (10.0.1.171): icmp_seq=2 ttl=64 time=1.18 ms
minion02上同样操作

 

 

1、master和minion是通过密钥认证方式管理的。  

 

minion端启动服务之前要指定它的master端ip或者hostname

关于minion设置自己的id:你不写的话,它默认以minion主机名代表。

minion的配置文件有两个地方需要注意

 第一个,master的主机名或者ip地址
vim /etc/salt/minion 

找到第16行 15 # resolved, then the minion will fail to start. 16 #master: salt 17 18 # If multiple masters are specified in the 'master' setting, the default b ehavior
取消注释,同时填写salt-master的地址,这里写成主机名 15 # resolved, then the minion will fail to start. 16 master: master 17 18 # If multiple masters are specified in the 'master' setting, the default b ehavior
检查结果,找以master开头的,已经修改正确 [root@minion01 ~]# vim /etc/salt/minion [root@minion01 ~]# grep ^master /etc/salt/minion master: master [root@minion01 ~]#

 

第二个地方是id,这里无需修改,默认是以你的主机名作为自己的id的,这里的id类似一个身份证标识,必须唯一。

它在/etc/salt/minion第78行

78 #id:

修改完毕后需要重启minion的服务,才会生效 ,两台minion都要重启此服务

[root@minion01 ~]# /etc/init.d/salt-minion restart
Stopping salt-minion daemon:                               [  OK  ]
Starting salt-minion daemon:                               [  OK  ]
[root@minion01 ~]# 

 

 

 

 

 salt-key的学习

当修改完minion端的配置文件,设置了master的指向之后。回到master服务器终端上输入如下命令
可以见到Unaccepted  Keys下面有如下内容
[root@master ~]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
minion01
minion02
Rejected Keys:
[root@master ~]# 

这里我们选择接受认证

[root@master ~]# salt-key -A -y
The following keys are going to be accepted:
Unaccepted Keys:
minion01
minion02
Key for minion minion01 accepted.
Key for minion minion02 accepted.
[root@master ~]# salt-key -L
Accepted Keys:
minion01
minion02
Denied Keys:
Unaccepted Keys:
Rejected Keys:
[root@master ~]# 

上面-A参数表示接受所有的minion,-y参数表示确认。如果不输入-y参数会出现二次确认,输入y也可以接受

关于salt-key的常见的参数和用法


-L, --list-all      会显示所有公钥,相当月: "--list all" 列出所有minion端发出的key
 
-a ACCEPT, --accept=ACCEPT
                        许可指定的公钥(使用--include-all选项
                        可以指定除了挂起的key外的所有reject状态的公钥),后面要指定你允许的minion的id名
 
 -A, --accept-all    许可所有minion的公钥 
 
-r REJECT, --reject=REJECT
                        拒绝指定的公钥 (使用--include-all选项
                        可以指定除了挂起的key外的所有accept状态的公钥)
 
-R, --reject-all    拒接所有pending的公钥
 
-d DELETE, --delete=DELETE
                        根据公钥的名称删除公钥,删除指定的minion
-D, --delete-all    删除所有 keys,删除所有已经认证的minion
-y, --yes            对所有询问是否继续,回答yes,默认:false(类似yum时的-y参数)
 
 
 

初步认识stalstack模块之test.ping

 
 test.ping的学习
对minion执行命令,该如何发起呢,测试命令是否通
 
在server端输入
salt '*' test.ping 这个命令中的*表示匹配所有已认证的minionid的意思
minion收到test.ping命令,它在它自己机器上ping master,把ping的结果返回
下面的*表示所有已经认证的minion,用单引号引起来, test.ping是一个python方法。用于测试master到minion是否通。master把这个命令发送给所有minion,所有minion执行完毕然后把结果返回给master
显示True表示master和minion可以正常通信,这个命令平时可以用来检查master和minion网络和服务是否正常
[root@master ~]# salt  '*'  test.ping
minion02:
    True
minion01:
    True
[root@master ~]# 

 

 

 

初步认识密钥文件和minion_id文件

 

minion启动后,它会生成自己的minion_id和自己的公钥以及私钥,在通过master的认证后,它会取得master的公钥
[root@minion01 ~]# ll /etc/salt/
total 40
-rw-r----- 1 root root 26366 Dec 15 22:42 minion
drwxr-xr-x 2 root root  4096 Dec  2 22:37 minion.d
-rw-r--r-- 1 root root     8 Dec  3 05:52 minion_id
drwxr-xr-x 3 root root  4096 Dec  3 05:52 pki

  minion启动的时候,会在下面目录生成一个minion_id 里面信息包含了这个minion的主机名,因为我们没在配置文件中定义minionid,默认就是以主机名作为minionid了
  [root@minion01 ~]# cat /etc/salt/minion_id
minion01[root@minion01 ~]# 
[root@minion01 ~]# ll /etc/salt/pki/
total 4
drwx------ 2 root root 4096 Dec  2 22:37 minion


minion.pem是minion的私钥,minion.pub是minion的公钥,这俩是在minion服务启动后生成的
在minion通过master的认证之后,它会取得master的公钥,如下minion_master.pub就是master的公钥
[root@minion01 ~]# ll /etc/salt/pki/minion/
total 12
-rw-r--r-- 1 root root  451 Dec  2 22:37 minion_master.pub
-r-------- 1 root root 1679 Dec  3 05:52 minion.pem
-rw-r--r-- 1 root root  451 Dec  3 05:52 minion.pub
[root@minion01 ~]# 

  

 

下面在接受minion01的认证之前,它会先处于Unaccepted Keys状态,此时可以在minions_pre目录里找到它

而我们接受的minion02,它就在minions这个目录下了。 对于拒绝的认证,它会被放在minions_rejected里面

[root@master ~]# salt-key -L
Accepted Keys:
minion02
Denied Keys:
Unaccepted Keys:
minion01
Rejected Keys:
[root@master ~]# tree /etc/salt/pki/master
/etc/salt/pki/master
├── master.pem
├── master.pub
├── minions
│   └── minion02
├── minions_autosign
├── minions_denied
├── minions_pre
│   └── minion01
└── minions_rejected

5 directories, 4 files
[root@master ~]# 

  

 其实这个文件里的内容,就是minion端服务启动后生成的公钥

[root@master master]# cat  /etc/salt/pki/master/minions_pre/minion01 
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyRsmw55p5nDjAT3avJJi
knHMVpcb0H+wnXnrxAfaJ+PHBXTtCh20+Jg3hZoK9Zy7AlladsgOb4DnKhuQHbIK
dNseae8dH7KpQP2Ta9urwWQ3t7MSAiS0fUU/aKAAF5bzgMm5KmViCLYSZdfZeftE
lv3Qiw0gOZohla1rMBtiIKaIMu+Su+OtC3dHvhKnOHmRSlO4dG2+qyKphMsErWVH
wMHKdLA8rtgfPGjgBiqXrhgB9rWPEZO0UlgE1ynu6SFn+nd34pZ/8etL8aimPQTb
LZeiS+k6etcXukEs+IUV55GWzwKDta7kRMnoOlj28deYhJGbY7TkH3KyynCkQYyv
IQIDAQAB
-----END PUBLIC KEY-----
[root@master master]# 

下面是minion01的公钥

[root@minion01 minion]# cat /etc/salt/pki/minion/minion.pub 
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyRsmw55p5nDjAT3avJJi
knHMVpcb0H+wnXnrxAfaJ+PHBXTtCh20+Jg3hZoK9Zy7AlladsgOb4DnKhuQHbIK
dNseae8dH7KpQP2Ta9urwWQ3t7MSAiS0fUU/aKAAF5bzgMm5KmViCLYSZdfZeftE
lv3Qiw0gOZohla1rMBtiIKaIMu+Su+OtC3dHvhKnOHmRSlO4dG2+qyKphMsErWVH
wMHKdLA8rtgfPGjgBiqXrhgB9rWPEZO0UlgE1ynu6SFn+nd34pZ/8etL8aimPQTb
LZeiS+k6etcXukEs+IUV55GWzwKDta7kRMnoOlj28deYhJGbY7TkH3KyynCkQYyv
IQIDAQAB
-----END PUBLIC KEY-----
[root@minion01 minion]# 

  

 

 

minion端修改主机名的操作

 
minion修改主机名操作之前注意事项:
如果minion端的id默认采用的是主机名的话,会在/etc/salt/minion_id文件里面有主机名信息,它就是默认的minion_id
 
[root@minion01 ~]# ll /etc/salt/minion_id 
-rw-r--r-- 1 root root 8 Dec 15 23:45 /etc/salt/minion_id
[root@minion01 ~]# cat /etc/salt/minion_id 
minion01[root@minion01 ~]# 
[root@minion01 ~]# 

因此如果默认采用主机名的minion,修改主机名过程如下

1、停止minion服务
2、清空minion_id 文件
3、修改主机名
4、重启minion服务
5、master删除以前的minion_id的认证,添加新的主机认证
 
下面把minion01主机改为minion001这个主机名演示下
 
minion01上操作
停止服务,清空minion_id文件,修改主机名
[root@minion01 ~]# /etc/init.d/salt-minion stop
Stopping salt-minion daemon:                               [  OK  ]
[root@minion01 ~]# > /etc/salt/minion_id
[root@minion01 ~]# hostname minion001
[root@minion01 ~]# sed -i  's#minion01#minion001#g' /etc/sysconfig/network
[root@minion01 ~]# grep minion001 /etc/sysconfig/network
HOSTNAME=minion001
[root@minion01 ~]# 

退出当前终端,重新连接

[root@minion01 ~]# exit
logout

Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Last login: Sat Dec 24 21:21:35 2016 from 10.0.1.53
[root@minion001 ~]# 

启动minion服务

[root@minion001 ~]# /etc/init.d/salt-minion start
Starting salt-minion daemon:                               [  OK  ]
[root@minion001 ~]# ps -ef | grep minion
root       3291      1  1 22:12 ?        00:00:00 /usr/bin/python2.6 /usr/bin/salt-minion -d
root       3315   3247  0 22:12 pts/1    00:00:00 grep --colour=auto minion
[root@minion001 ~]# 

  

 

master上操作

在master上操作如下,可以看到minion01已经无响应了
[root@master ~]# salt '*'  test.ping
minion02:
    True
minion01:
    Minion did not return. [Not connected]

查看认证的key,看到有个Unaccepted Keys
[root@master ~]# salt-key -L
Accepted Keys:
minion01
minion02
Denied Keys:
Unaccepted Keys:
minion001
Rejected Keys:

删除之前的无效的key
[root@master ~]# salt-key -d 'minion01'  -y
Deleting the following keys:
Accepted Keys:
minion01
Key for minion minion01 deleted.

重新添加认证
[root@master ~]# salt-key -A  -y
The following keys are going to be accepted:
Unaccepted Keys:
minion001
Key for minion minion001 accepted.
[root@master ~]# salt-key -L
Accepted Keys:
minion001
minion02
Denied Keys:
Unaccepted Keys:
Rejected Keys:
再次执行test.ping 返回成功 [root@master ~]# salt '*' test.ping minion02: True minion001: True [root@master ~]#

  

清空minion_id文件之后,也可以把认证的key都清空,这样更彻底,重启minion后还会生成公钥和私钥。不清空这个目录也没关系(一些特殊的场合,如果上述方法没效果可以尝试清空下面的pki目录)
 
[root@minion001 ~]# ll  /etc/salt/pki/minion/
total 12
-rw-r--r-- 1 root root  451 Dec  2 22:37 minion_master.pub
-r-------- 1 root root 1679 Dec  3 05:52 minion.pem
-rw-r--r-- 1 root root  451 Dec  3 05:52 minion.pub
[root@minion001 ~]# 

以上演示了minion修改主机名的过程,演示完毕我们把minion01主机名在改回去,恢复之前的主机名。

有时候上面执行完毕后,master上执行test.ping命令可能不会立即成功,要等一会

[root@master ~]# salt '*'  test.ping
minion02:
    True
minion01:
    Minion did not return. [No response]
等一会就执行成功了。 [root@master ~]# salt '*' test.ping minion02: True minion01: True [root@master ~]#

  

 

更换master机器

 
 一些特殊的场景,master机器性能更不上,需要更换机器等,这时候需要更换master,或者准备一台备用的master机器,防止现网的master坏掉
怎么处理呢,如果认证了上千台minion。如果重新添加认证可能会很麻烦。
 
注意:这里只提到了对于key的处理,关于master的配置文件和/srv下面的各种文件也需要一起打包发送到新的master机器上
 
可以如下操作。
由于master和minion是基于key文件互相认证的。而一台新的master机器启动时会产生新的公钥和私钥。
但是如果在新的master机器启动服务salt服务之前,把现网的密钥拷贝过去就行了
因此步骤如下
1、新的mater机器修改主机名和现网一致,同时安装salt-master服务(这里先不要把此机器加入dns服务器解析,防止影响现网)
2、在master机器上打包整个pki认证目录
3、把pki认证目录传输到新的master机器上解压
4、在新的master机器上启动salt服务
5、批量操作minion备份hosts文件,然后修改hosts文件,把ip解析指向新的master机器IP(假如新的master机器主机名和现网的一致的话)
6、先重启1台minion服务,在新的master上对此minion操作test.ping,无问题后批量重启其余minion服务,然后批量检查
 
 操作过程如下
 
新的master机器10.0.1.175修改主机名,让其和现网的一致(如果不一致的话,而minion配置文件那里指向master时采用的是主机名的话,就需要修改minion配置文件了,多了一步操作) 
[root@matser ~]# tail -3 /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=master
[root@matser ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0C:29:F0:FB:E3  
          inet addr:10.0.1.175  Bcast:10.0.1.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fef0:fbe3/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:24267 errors:0 dropped:0 overruns:0 frame:0
          TX packets:564 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1649713 (1.5 MiB)  TX bytes:55814 (54.5 KiB)

[root@matser ~]# 

 确认新的master机器上安装了salt-master服务

[root@matser ~]# rpm  -Uvh  http://mirrors.yun-idc.com/epel/6Server/x86_64/epel-release-6-8.noarch.rpm
Retrieving http://mirrors.yun-idc.com/epel/6Server/x86_64/epel-release-6-8.noarch.rpm
Preparing...                ########################################### [100%]
	package epel-release-6-8.noarch is already installed
[root@matser ~]# yum  -y  install  salt-master
Loaded plugins: fastestmirror, refresh-packagekit, security
Setting up Install Process
Determining fastest mirrors
 * base: mirrors.cn99.com
 * epel: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.cn99.com
 * updates: mirrors.cn99.com
Package salt-master-2015.5.10-2.el6.noarch already installed and latest version
Nothing to do
[root@matser ~]# 

  

在现网master机器上打包整个pki认证目录并传输到新的master机器上,下面是通过rsync直接通过ssh隧道传输,当然也可以通过scp传输
 
[root@master ~]# cd /etc/salt/
[root@master salt]# ls
master  pki
[root@master salt]# tar cfz pki.tgz pki/
[root@master salt]# ls
master  pki  pki.tgz
[root@master salt]# rsync -e  'ssh -p 22' pki.tgz  root@10.0.1.175:/etc/salt/
root@10.0.1.175's password: 
[root@master salt]# 

  

新的master机器解压文件,启动服务

[root@matser ~]# cd /etc/salt/
[root@matser salt]# ls
master  pki.tgz
[root@matser salt]# tar xfz pki.tgz 
[root@matser salt]# ls
master  pki  pki.tgz
[root@matser salt]# /etc/init.d/salt-master start
Starting salt-master daemon:                               [  OK  ]
[root@matser salt]# 

 

在原先现网mater上更改minion01的hosts文件,把master的解析改为最新的mater的机器IP(这里使用了cmd.run模块,这是个万能模块,后面使用引号把需要执行的命令引起来) 

[root@master salt]# salt 'minion01'  cmd.run  'tail -1 /etc/hosts'
minion01:
    10.0.1.171    master
[root@master salt]# salt 'minion01'  cmd.run  "sed -i 's#10.0.1.171#10.0.1.175#g'  /etc/hosts"
minion01:
[root@master salt]# salt 'minion01'  cmd.run  'tail -1 /etc/hosts'
minion01:
    10.0.1.175    master
[root@master salt]# 

  

在原先master机器上操作重启minion01服务,下图?乱码不用理会

 
[root@master salt]# salt 'minion01'  cmd.run  '/etc/init.d/salt-minion restart'
minion01:
    Stopping salt-minion daemon: ?[60G[?[0;32m  OK  ?[0;39m]
    Starting salt-minion daemon: ?[60G[?[0;32m  OK  ?[0;39m]
[root@master salt]# 

  

 
 
新的master解压pki.tgz包后,启动服务,可以看到已经接受的key,如果minion那边hosts文件还没更改的话,执行任何命令都无响应
[root@matser salt]# salt-key -L Accepted Keys: minion01 minion02 Denied Keys: Unaccepted Keys: Rejected Keys: [root@matser salt]# [root@matser salt]# [root@matser salt]#
由于minion那边的hosts文件还没更新,因此执行模块方法无响应 [root@matser salt]# salt '*' test.ping minion02: Minion did not return. [No response] minion01: Minion did not return. [No response]

在原先master上修改minion01的主机名,重启此机器的minion服务后,在新的master上执行如下成功。 [root@matser salt]# salt 'minion01' test.ping minion01: True [root@matser salt]#

  

 上面测试无问题后,批量修改现网的minion的hosts文件(由于minion01已经操作过了,所以出现无法连接的提示,不用理会)
[root@master salt]# salt '*'  cmd.run  "/bin/cp  /etc/hosts /etc/host_bak1"
minion02:
minion01:
    Minion did not return. [Not connected]
[root@master salt]# salt '*'  cmd.run  "sed -i 's#10.0.1.171#10.0.1.175#g'  /etc/hosts"
minion02:
minion01:
    Minion did not return. [Not connected]
[root@master salt]# salt '*'  cmd.run  '/etc/init.d/salt-minion restart'
minion02:
    Stopping salt-minion daemon: ?[60G[?[0;32m  OK  ?[0;39m]
    Starting salt-minion daemon: ?[60G[?[0;32m  OK  ?[0;39m]
minion01:
    Minion did not return. [No response]
[root@master salt]# 

  

 新的master机器上执行test.ping 测试以上修改的结果。
[root@matser salt]# salt '*' test.ping
minion01:
    True
minion02:
    True
[root@matser salt]# 

  

 测试完毕,再改回原先的master指向。方便后面的测试
 
 
 
 

 salt 版本查看

salt-stack常规的版本号显示,改成了日期型的版本号显示 
master上执行
[root@master salt]# salt
salt         salt-cp      salt-key     salt-master  salt-run     salt-unity
[root@master salt]# salt --version
salt 2015.5.10 (Lithium)
[root@master salt]# salt-key --version
salt-key 2015.5.10 (Lithium)
[root@master salt]# 

minion上执行

[root@minion01 ~]# salt-
salt-call    salt-minion  
[root@minion01 ~]# salt-call --version
salt-call 2015.5.10 (Lithium)
[root@minion01 ~]# salt-minion --version
salt-minion 2015.5.10 (Lithium)
[root@minion01 ~]# 

  

saltstack的acl练习

acl访问控制可以让有的用户可以执行某些模块,有的用户无法执行某些模块

vim /etc/salt/master

找到245行

241 # Allow users on the master access to execute specific commands on minions.
242 # This setting should be treated with care since it opens up execution
243 # capabilities to non root users. By default this capability is completely
244 # disabled.
245 #client_acl:
246 #  larry:
247 #    - test.ping
248 #    - network.*

  改成如下,只允许zyx这个用户执行test.ping  和network这个模块下的所有方法

241 # Allow users on the master access to execute specific commands on minions.
242 # This setting should be treated with care since it opens up execution
243 # capabilities to non root users. By default this capability is completely
244 # disabled.
245 client_acl:
246   zyx:
247     - test.ping
248     - network.*

 由于zyx是对日志目录没有写的权限

[root@master pillar]# su - zyx
[zyx@master ~]$ salt '*'  test.ping
[WARNING ] Failed to open log file, do you have permission to write to /var/log/salt/master?
minion02:
    True
minion01:
    True
[zyx@master ~]$ 

 还需要一些授权 

 搜索文档中  Permission Issues 这个关键词

chmod 755 /var/cache/salt /var/cache/salt/master /var/cache/salt/master/jobs /var/run/salt /var/run/salt/master  

 操作如下,多加一个目录/var/log/salt/master

原文档是chmod操作,我们执行chown操作

下面测试执行cmd.run模块就提示没权限了

[zyx@master ~]$ exit
logout
[root@master pillar]# chown -R zyx /var/cache/salt /var/cache/salt/master /var/cache/salt/master/jobs /var/run/salt /var/run/salt/master  /var/log/salt/master
[root@master pillar]# su - zyx
[zyx@master ~]$ salt '*'  test.ping
minion02:
    True
minion01:
    True
[zyx@master ~]$ salt '*'  cmd.run 'w'
Failed to authenticate! This is most likely because this user is not permitted to execute commands, but there is a small possibility that a disk error occurred (check disk/inode usage).
[zyx@master ~]$ 

  

 设置多个用户的acl写法

client_acl:
  zyx:
    - test.ping
    - network.*
  user01:
    - test.ping
    - network.*

  

 另外还可以设置黑名单,这里不做太深的研究

250 # Blacklist any of the following users or modules
251 #
252 # This example would blacklist all non sudo users, including root from
253 # running any commands. It would also blacklist any use of the "cmd"
254 # module. This is completely disabled by default.
255 #
256 #client_acl_blacklist:
257 #  users:
258 #    - root
259 #    - '^(?!sudo_).*$'   #  all non sudo users
260 #  modules:
261 #    - cmd

  

 

 

posted on 2017-01-09 08:57  nmap  阅读(1049)  评论(0)    收藏  举报

导航