使用Salt在多平臺(tái)進(jìn)行用戶管理將變得非常簡(jiǎn)單。 user模塊允許管理員管理(原文為present)賬戶各個(gè)方面和刪除(absent)賬戶。本文將講述帳號(hào)的添加等管理操作。
一、參數(shù)說明
user.present
user.present: 確保指定的賬戶名存在,并指定其對(duì)應(yīng)的屬性. 這些屬性包括如下內(nèi)容:
name: 指定需要管理的賬戶名.
uid: 指定uid, 如果不設(shè)置將配自動(dòng)分配下一個(gè)有效的uid.
gid: 指定默認(rèn)的組id(group id)
gid_from_name: 如果設(shè)置為True,默認(rèn)的組id將自動(dòng)設(shè)置為和本用戶同名的組id
groups: 分配給該用戶的組列表(a list of groups). 如果組在minion上不存在,則本state會(huì)報(bào)錯(cuò). 如果設(shè)置會(huì)空,將會(huì)刪除本用戶所屬的除了默認(rèn)組之外的其他組
optional_groups: 分配給用戶的組列表。 如果組在minion上不存在,則state會(huì)忽略它.
home: 關(guān)于用戶的家目錄(home directory).
password: 設(shè)置用戶hash之后的密碼.
enforce_password: 當(dāng)設(shè)置為False時(shí),如果設(shè)置的password與用戶原密碼不同,將保持原密碼不做更改.如果沒有設(shè)置password選項(xiàng),該選項(xiàng)將自動(dòng)忽略掉.
shell: 指定用戶的login shell。 默認(rèn)將設(shè)置為系統(tǒng)默認(rèn)shell。
unique: UID唯一,默認(rèn)為True.
system: 從FIRST_SYSTEM_UID和LAST_SYSTEM_UID間選擇一個(gè)隨機(jī)的UID.
用戶描述選項(xiàng)(GECOS)支持(當(dāng)前只支持Linux和FreeBSD系統(tǒng)):
fullname: 指定用戶全名(full name).
roomnumber: 指定用戶的房間號(hào).
workphone: 指定用戶的工作電話號(hào)碼.
homephone: 指定用戶的家庭電話號(hào)碼.
user.absent
本部分為譯者依據(jù)官方手冊(cè)進(jìn)行的補(bǔ)充,原文中并沒有相關(guān)內(nèi)容
user.absent 用于刪除用戶.其有以下選項(xiàng):
name: 指定需要?jiǎng)h除的用戶名.
purge: 設(shè)置清除用戶的文件(家目錄)
force: 如果用戶當(dāng)前已登錄,則absent state會(huì)失敗. 設(shè)置force選項(xiàng)為True時(shí),就算用戶當(dāng)前處于登錄狀態(tài)也會(huì)刪除本用戶.
當(dāng)管理用戶時(shí),至少需要指定user.present或user.absent。 其他選項(xiàng)是可選的,比如uid、gid、home等選項(xiàng)沒有指定是,將自動(dòng)使用下一個(gè)有效的或者系統(tǒng)默認(rèn)的.
二、示例
1、添加用戶:
修改用戶,與添加用戶類似,只需更改對(duì)應(yīng)參數(shù)值即可,這里不做贅述。
生成一個(gè)MD5密碼加密串
openssl passwd -1
$1$6Wit4zof$E4yDRIBJQXzwWnx0uVd1Z1
編輯usertest.sls文件
[root@server01 salt]# vi usertest.sls
user01: #### 可以是任意有意義的字符串,在沒有設(shè)置下邊name 關(guān)鍵字時(shí),默認(rèn)為用戶名
user.present:
- name: user01 ####默認(rèn)可以不設(shè)置,采用上邊的值為用戶名
- fullname: Christer Edwards ###默認(rèn)可以不設(shè)置
- password: ’$1$6Wit4zof$E4yDRIBJQXzwWnx0uVd1Z1‘ ###加密后的密碼
- shell: /bin/bash ###默認(rèn)可以不設(shè)置 ,默認(rèn)為/bin/bash
- home: /home/user01 ###默認(rèn)可以不設(shè)置,默認(rèn)為/home/用戶名
- uid: 500 ###默認(rèn)可以不設(shè)置,默認(rèn)為下一個(gè)可用的UID
- gid: 500 ####默認(rèn)可以不設(shè)置,默認(rèn)會(huì)創(chuàng)建同名的組
- groups: ##可以將用戶添加到多個(gè)用戶組
- user02
- user03
所以上邊的例子可以寫成這樣:效果是一樣的。
user01:
user.present:
- password: ’$1$6Wit4zof$E4yDRIBJQXzwWnx0uVd1Z1‘
- groups:
- user02
- user03
或者你只需要建立個(gè)用戶和同名的用戶組,那就直接這樣寫就可以了。
user01:
user.present:
- password: '$1$6Wit4zof$E4yDRIBJQXzwWnx0uVd1Z1'
編輯top.sls文件
vi top.sls
base:
'*':
- usertest
運(yùn)行結(jié)果如下:
[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、批量添加用戶:
批量修改用戶,與批量添加用戶類似,只需更改對(duì)應(yīng)參數(shù)值即可,這里不做贅述。
[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 ##如果想將用戶加到同一組,添加這個(gè)參數(shù),否則可以不設(shè)置。每個(gè)用都默認(rèn)創(chuàng)建一個(gè)同名用戶組
{% endfor %}
運(yùn)行結(jié)果如下:
[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 #設(shè)置清除用戶的文件(家目錄)
- force: True #如果用戶當(dāng)前已登錄,則absent state會(huì)失敗. 設(shè)置force選項(xiàng)為True時(shí),就算用戶當(dāng)前處于登錄狀態(tài)也會(huì)刪除本用戶.
{% endfor %}
4、批量刪除用戶:
[root@server01 salt]# cat usertest.sls
{% set users = ['user04','user05'] %}
{% for user in users %}
{{ user }}:
user.absent:
- purge: True #設(shè)置清除用戶的文件(家目錄)
- force: True #如果用戶當(dāng)前已登錄,則absent state會(huì)失敗. 設(shè)置force選項(xiàng)為True時(shí),就算用戶當(dāng)前處于登錄狀態(tài)也會(huì)刪除本用戶.
{% endfor %}
5、增加用戶組
編輯 grouptest.sls文件
devgroup:
group.present:
- gid: 1000
執(zhí)行結(jié)果如下:
[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是無效的關(guān)鍵字,但是不加這個(gè)關(guān)鍵字卻執(zhí)行報(bào)錯(cuò),加了只是警告,但是可以刪除用戶組
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