使用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