使用Ansible在Linux上管理用户和组

这是续集。
您可以通过以下链接以PDF格式下载本文,以为我们提供支持。

将指南下载为PDF


这是续集。

这是续集。
这是续集。

在Linux上,所有进程均以特定用户身份运行,并且所有文件和文件夹均由特定用户拥有。此外,用户对这些文件和文件夹的访问受到限制。这表明学习以普通用户或管理员身份完成Linux中的用户管理非常重要。有关本地用户的信息可以在etc / passwd中找到。

[email protected]:~$ tail -9 /etc/passwd
colord:x:121:126:colord colour management daemon,,,:/var/lib/colord:/usr/sbin/nologin
geoclue:x:122:127::/var/lib/geoclue:/usr/sbin/nologin
pulse:x:123:128:PulseAudio daemon,,,:/var/run/pulse:/usr/sbin/nologin
gnome-initial-setup:x:124:65534::/run/gnome-initial-setup/:/bin/false
gdm:x:125:130:Gnome Display Manager:/var/lib/gdm3:/bin/false
eugene:x:1000:1000:Eugene,,,:/home/eugene:/bin/bash
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
mysql:x:126:133:MySQL Server,,,:/nonexistent:/bin/false
redis:x:127:134::/var/lib/redis:/usr/sbin/nologin

格式解释如下:

username:password:uid:gid:gecos:home/dir:shell

该组还具有一个ID,并且所有用户都属于默认组“用户专用组”(UPG)。用户也可以具有补充组。这些补充组可帮助用户访问其他文件和进程的权限。有关组的信息通常可以在etc / group中找到。

[email protected]:~$ tail -9 /etc/group
gdm:x:130:
lxd:x:131:eugene
eugene:x:1000:
sambashare:x:132:eugene
systemd-coredump:x:999:
mysql:x:133:
redis:x:134:
vboxusers:x:135:
docker:x:136:

格式解释如下:

groupname:password:GID:

我听说过root用户。 root用户是超级用户,对系统具有完全权限。根目录可以覆盖文件的所有权限,并用于管理系统。通常,您将以非特权用户身份登录并使用sudo命令获得root特权。

Linux管理员需要执行各种任务来管理用户帐户,例如添加和删除用户。使用Ansible可以轻松管理这些任务。我将解释使用Ansible Playbook。在Ansible中,“用户和组”模块可帮助您执行用户管理任务。这本剧本涵盖了各种任务。

Ansible组模块的常用选项

  • 名称 –组名
  • 状态 –(不存在/存在)确保组存在或不存在
  • 圭多 –指定组ID
  • 系统 –(是/否)创建的组是否为系统组

Ansible用户模块的常用选项

  • 名称 – 用户名
  • 密码 –用户的加密密码。密码必须已经加密,或者您必须使用Ansible剧本加密,但是将密码隐藏在Ansible Vault中。
  • update_password –(始终/ on_create)在创建用户时更新密码或仅添加一次
  • uid –指定用户ID
  • –指定用户的主要组
  • –将用户添加到补充组
  • 添加 –(否/是)将用户添加到补充组时,请勿覆盖主要组,或两者都不覆盖。
  • 评论 –设置GECOS
  • 贝壳 –设置用户的默认外壳
  • 删除 –删除与用户关联的目录和文件

使用Ansible创建/添加用户和组

手册, user.yml

---
- hosts: localhost #change to your hosts
  become: yes

  vars:
    # NOTICE!!!:
    # DO NOT PUT PLAIN TEXT PASSWORDS HERE!
    # use encrypted passwords or put them in Ansible vault
    # but this is just a demo
    vaulted_password: mySecret.

  tasks:
    - name: Add a simple user called janedoe
      user:
        name: janedoe
        comment: Jane Doe

    - name: Add user anita with a password
      user:
        name: anita
        password: "{{ vaulted_password | password_hash('sha512') }}"
        update_password: on_create

    - name: Add a group called developer
      group:
        name: developer
        state: present

    - name: Add a user johndoe and add them to a group developer
      user:
        name: johndoe
        groups: developer
        append: yes

    - name: Add user jSmith and generate for them an SSH key
      user:
        name: jSmith
        generate_ssh_key: yes
        ssh_key_bits: 2048
        ssh_key_file: .ssh/id_rsa

    - name: Add user noHome with no home and set account to expire on certain date
      user:
        name: noHome
        create_home: no
        expires: 1590155615

运行剧本。由于您将Playbook作为Ansible主节点的节点运行,因此您不必担心警告。

$ ansible-playbook user.yml -K
BECOME password: 
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

PLAY [localhost] *************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************
ok: [localhost]

TASK [Add a simple user called janedoe] **************************************************************************************************************
changed: [localhost]

TASK [Add user anita with a password] ****************************************************************************************************************
changed: [localhost]

TASK [Add a group called developer] ******************************************************************************************************************
changed: [localhost]

TASK [Add a user johndoe and add them to a group developer] ******************************************************************************************
changed: [localhost]

TASK [Add user jSmith and generate for them an SSH key] **********************************************************************************************
changed: [localhost]

TASK [Add user noHome with no home and set account to expire on certain date] ************************************************************************
changed: [localhost]

PLAY RECAP *******************************************************************************************************************************************
localhost                  : ok=7    changed=6    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

检查用户和组。

[email protected]:~/Projects/Ansible/users$ tail -9 /etc/passwd
eugene:x:1000:1000:Eugene,,,:/home/eugene:/bin/bash
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
mysql:x:126:133:MySQL Server,,,:/nonexistent:/bin/false
redis:x:127:134::/var/lib/redis:/usr/sbin/nologin
janedoe:x:1001:1001:Jane Doe:/home/janedoe:/bin/sh
anita:x:1002:1002::/home/anita:/bin/sh
johndoe:x:1003:1004::/home/johndoe:/bin/sh
jSmith:x:1004:1005::/home/jSmith:/bin/sh
noHome:x:1005:1006::/home/noHome:/bin/sh

[email protected]:~/Projects/Ansible/users$ tail -9 /etc/group
redis:x:134:
vboxusers:x:135:
docker:x:136:
janedoe:x:1001:
anita:x:1002:
developer:x:1003:johndoe
johndoe:x:1004:
jSmith:x:1005:
noHome:x:1006:

使用Ansible删除/删除用户

手册, user_delete.yml

---
- hosts: localhost
  become: yes
  tasks:
    - name: Remove janedoe
      user:
        name: janedoe
        state: absent
        remove: yes

    - name: Remove anita
      user:
        name: anita
        state: absent
        remove: yes

    - name: Remove developer group
      group:
        name: developer
        state: absent

    - name: Remove johndoe
      user:
        name: johndoe
        state: absent
        remove: yes

    - name: Remove jSmith
      user:
        name: jSmith
        state: absent
        remove: yes

    - name: Remove noHome
      user:
        name: noHome
        state: absent
        remove: yes

剧本执行:

[email protected]:~/Projects/Ansible/users$ ansible-playbook user_delete.yml -K
BECOME password: 
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

PLAY [localhost] *************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************
ok: [localhost]

TASK [Remove janedoe] **************************************************************************************************************
changed: [localhost]

TASK [Remove anita] ****************************************************************************************************************
changed: [localhost]

TASK [Remove developer group] ******************************************************************************************************************
changed: [localhost]

TASK [Remove johndoe] ******************************************************************************************
changed: [localhost]

TASK [Remove jSmith] **********************************************************************************************
changed: [localhost]

TASK [Remove noHome] ************************************************************************
changed: [localhost]

PLAY RECAP *******************************************************************************************************************************************
localhost                  : ok=7    changed=6    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Ansible中还有其他用于管理用户的选项,但是我没有全部介绍,但是Ansible文档中提供了这些选项。您可以签出。

今天就这些。买咖啡,支持我们!

有关Ansible的更多信息:

如何生成Ansible Linux用户加密密码

在CentOS / Ubuntu上使用Ansible设置Elasticsearch Cluster

如何在无业游民中使用Ansible Playbook

这是续集。
您可以通过以下链接以PDF格式下载本文,以为我们提供支持。

将指南下载为PDF


这是续集。

这是续集。
这是续集。

Sidebar