SaltStack入门【管理用户】

使用Salt在多平台进行用户管理将变得非常简单。 user模块允许管理员管理(原文为present)账户各个方面和删除(absent)账户。本文将讲述帐号的添加等管理操作。

一、参数说明

user.present
user.present: 确保指定的账户名存在,并指定其对应的属性. 这些属性包括如下内容:

name: 指定需要管理的账户名.

uid: 指定uid, 如果不设置将配自动分配下一个有效的uid.

gid: 指定默认的组id(group id)

gid_from_name: 如果设置为_True_,默认的组id将自动设置为和本用户同名的组id

groups: 分配给该用户的组列表(a list of groups). 如果组在minion上不存在,则本state会报错. 如果设置会空,将会删除本用户所属的除了默认组之外的其他组

optional_groups: 分配给用户的组列表。 如果组在minion上不存在,则state会忽略它.

home: 关于用户的家目录(home directory).

password: 设置用户hash之后的密码.

enforce_password: 当设置为_False_时,如果设置的_password_与用户原密码不同,将保持原密码不做更改.如果没有设置_password_选项,该选项将自动忽略掉.

shell: 指定用户的login shell。 默认将设置为系统默认shell。

unique: UID唯一,默认为True.

system: 从_FIRST_SYSTEM_UID_和_LAST_SYSTEM_UID_间选择一个随机的UID.

用户描述选项(GECOS)支持(当前只支持Linux和FreeBSD系统):

fullname: 指定用户全名(full name).

roomnumber: 指定用户的房间号.

workphone: 指定用户的工作电话号码.

homephone: 指定用户的家庭电话号码.

user.absent
本部分为译者依据官方手册进行的补充,原文中并没有相关内容
user.absent 用于删除用户.其有以下选项:

name: 指定需要删除的用户名.

purge: 设置清除用户的文件(家目录)

force: 如果用户当前已登录,则absent state会失败. 设置_force_选项为True时,就算用户当前处于登录状态也会删除本用户.

当管理用户时,至少需要指定_user.present_或_user.absent_。 其他选项是可选的,比如_uid_、_gid_、_home_等选项没有指定是,将自动使用下一个有效的或者系统默认的.

二、示例
1、添加用户:
####修改用户,与添加用户类似,只需更改对应参数值即可,这里不做赘述。
生成一个MD5密码加密串

openssl passwd  -1


$1$6Wit4zof$E4yDRIBJQXzwWnx0uVd1Z1

编辑usertest.sls文件

[root@server01 salt]# vi usertest.sls
user01:     ####  可以是任意有意义的字符串,在没有设置下边name 关键字时,默认为用户名
  user.present:
    - name: user01  ####默认可以不设置,采用上边的值为用户名
    - fullname: Christer Edwards  ###默认可以不设置
    - password: ’$1$6Wit4zof$E4yDRIBJQXzwWnx0uVd1Z1‘  ###加密后的密码
    - shell: /bin/bash  ###默认可以不设置 ,默认为/bin/bash
    - home: /home/user01  ###默认可以不设置,默认为/home/用户名
    - uid: 500   ###默认可以不设置,默认为下一个可用的UID
    - gid: 500  ####默认可以不设置,默认会创建同名的组
    - groups:   ##可以将用户添加到多个用户组
      - user02    
      - user03

所以上边的例子可以写成这样:效果是一样的。

user01:     
  user.present:
    - password: ’$1$6Wit4zof$E4yDRIBJQXzwWnx0uVd1Z1‘ 
    - groups:  
      - user02    
      - user03

或者你只需要建立个用户和同名的用户组,那就直接这样写就可以了。

user01:     
  user.present:
    - password: '$1$6Wit4zof$E4yDRIBJQXzwWnx0uVd1Z1'

编辑top.sls文件

vi top.sls
base:
 '*':
  - usertest

运行结果如下:

[root@server01 salt]# salt 'server13' state.highstate 
server13:
----------
          ID: user01
    Function: user.present
      Result: True
     Comment: New user user01 created
     Started: 11:52:58.659648
    Duration: 120.219 ms
     Changes:   
              ----------
              fullname:
                  user01
              gid:
                  600
              groups:
                  - user01
              home:
                  /home/user01
              homephone:
              name:
                  user01
              passwd:
                  x
              password:
                  $1$6Wit4zof$E4yDRIBJQXzwWnx0uVd1Z1
              roomnumber:
              shell:
                  /bin/bash
              uid:
                  600
              workphone:

Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
 

2、批量添加用户:
####批量修改用户,与批量添加用户类似,只需更改对应参数值即可,这里不做赘述。

[root@server01 salt]# cat usertest.sls
{% set users = ['user07','user08','user09'] %}
{% for user in users %}
{{ user }}:
user.present:
- password: '$1$YIlsYoVs$B1Vczyf/KI6qlyP9EN5GL/'
- gid: 501 ##如果想将用户加到同一组,添加这个参数,否则可以不设置。每个用都默认创建一个同名用户组
{% endfor %}

运行结果如下:

[root@server01 salt]# salt 'server13' state.highstate 
server13:
----------
          ID: user07
    Function: user.present
      Result: True
     Comment: New user user07 created
     Started: 14:20:06.900449
    Duration: 87.247 ms
     Changes:   
              ----------
              fullname:
              gid:
                  606
              groups:
                  - user07
              home:
                  /home/user07
              homephone:
              name:
                  user07
              passwd:
                  x
              password:
                  $1$YIlsYoVs$B1Vczyf/KI6qlyP9EN5GL/
              roomnumber:
              shell:
                  /bin/bash
              uid:
                  606
              workphone:
----------
          ID: user08
    Function: user.present
      Result: True
     Comment: New user user08 created
     Started: 14:20:06.987870
    Duration: 63.892 ms
     Changes:   
              ----------
              fullname:
              gid:
                  607
              groups:
                  - user08
              home:
                  /home/user08
              homephone:
              name:
                  user08
              passwd:
                  x
              password:
                  $1$YIlsYoVs$B1Vczyf/KI6qlyP9EN5GL/
              roomnumber:
              shell:
                  /bin/bash
              uid:
                  607
              workphone:
----------
          ID: user09
    Function: user.present
      Result: True
     Comment: New user user09 created
     Started: 14:20:07.051936
    Duration: 66.787 ms
     Changes:   
              ----------
              fullname:
              gid:
                  608
              groups:
                  - user09
              home:
                  /home/user09
              homephone:
              name:
                  user09
              passwd:
                  x
              password:
                  $1$YIlsYoVs$B1Vczyf/KI6qlyP9EN5GL/
              roomnumber:
              shell:
                  /bin/bash
              uid:
                  608
              workphone:

Summary
------------
Succeeded: 3 (changed=3)
Failed:    0
------------
Total states run:     3

3、删除用户:

[root@server01 salt]# cat usertest.sls
user01
user.absent:
- purge: True #设置清除用户的文件(家目录)
- force: True #如果用户当前已登录,则absent state会失败. 设置force选项为True时,就算用户当前处于登录状态也会删除本用户.
{% endfor %}

 4、批量删除用户:

[root@server01 salt]# cat usertest.sls
{% set users = ['user04','user05'] %}
{% for user in users %}
{{ user }}:
user.absent:
- purge: True #设置清除用户的文件(家目录)
- force: True #如果用户当前已登录,则absent state会失败. 设置force选项为True时,就算用户当前处于登录状态也会删除本用户.
{% endfor %}

5、增加用户组

编辑 grouptest.sls文件

devgroup:
 group.present:
    - gid: 1000

执行结果如下:

[root@server01 salt]# salt 'server13' state.highstate
server13:
----------
ID: devgroup
Function: group.present
Result: True
Comment: New group devgroup created
Started: 16:01:32.638773
Duration: 87.384 ms
Changes:
----------
gid:
1000
members:
name:
devgroup
passwd:
x

Summary
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1

6、删除用户组:
查看 grouptest.sls

devgroup: 
 group.absent:
   - gid: 1000
[root@server01 salt]# salt 'server13' state.highstate
server13:
----------
          ID: devgroup
    Function: group.absent
      Result: True
     Comment: Removed group devgroup
     Started: 16:28:56.960932
    Duration: 45.879 ms
     Changes:   
              ----------
              devgroup:
    Warnings: 'gid' is an invalid keyword argument for 'group.absent'. If you   ###这提示gid是无效的关键字,但是不加这个关键字却执行报错,加了只是警告,但是可以删除用户组
              were trying to pass additional data to be used in a template          
              context, please populate 'context' with 'key: value' pairs. Your
              approach will work until Salt Carbon is out. Please update your
              state files.

Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
Warnings:  1
------------
Total states run:     1

发表评论