ansible-playbookユーザーを一括作成しsudo権限を構成

6823 ワード

1.業務側ニーズ


複数ホスト一括新規ユーザー名:appユーザーグループ:appパスワード:Alf#!@wq(ここでは例のみ)ホームディレクトリ:/home/appユーザはsudo命令を必要とする:app ALL=(ALL)NOPASWD:/usr/bin/cat,/usr/bin/tail,/usr/sbin/ss,/usr/bin/netstat,/usr/bin/bin/vi,/usr/bin/bin/vin,/usr/bin/mkdir,/usr/bin/kill,/usr/bin/bin/rpm,/usr/bin/sbin/sbin/sbin/service,/usr/usr/bin/bin/bin/bin/bin/bin/bin/bin/biyum,/usr/bin/ps

2.タスク分解


#次の2つのステップansibleサービス側はStep 1を単独で実行する.予め設定されたユーザパスワードを暗号化し、暗号化に変換します.Step2.ansibleサービス側は新しいsudofileファイルを作成します
#次の4つのステップansible-playbookでStep 3を実行します.ansible userモジュールを用いてユーザを一括作成し、パスワードStep 4を設定する.作成したsudofileファイルをansible copyモジュールを介してターゲットホスト/tmp/sudofile Step 5にコピーする.ターゲットホストでansible shellモジュールを使用してsudofileファイルを/etc/sudoersファイルに追加するStep 6./tmp/sudofileファイルの削除

3.需要実現

  • pythonモジュールを用いて明文パスワードを暗号文
  • に変換する
    [root@ansible yml]# python -c 'import crypt;print(crypt.crypt("Alf#!@wq","app"))'
    apQ.IZHqPUR46
    
  • ansibleサービス側/scriptsディレクトリの下にsudofileファイルを作成し、
  • を追加します.
    [root@ansible yml]# vi /scripts/sudofile 
    Cmnd_Alias PASSADMIN = /usr/bin/cat,/usr/bin/tail,/usr/sbin/ss,/usr/bin/netstat,/usr/bin/vi,/usr/bin/mkdir,/usr/bin/kill,/usr/bin/rpm,/usr/bin/systemctl,/usr/sbin/service,/usr/bin/yum,/usr/bin/ps
    app	ALL=(ALL)	NOPASSWD: PASSADMIN
    
  • playbookシナリオ
  • を作成
    [root@ansible yml]# cat useradd.yml 
    ---
        - hosts: all
          gather_facts: no
          tasks: 
          - name: add app user to remote host
            user: 
              name: app
              home: /home/app
              password: apQ.IZHqPUR46
              state: present
          - name: copy sudo file to remote host
            copy: src=/scripts/sudofile dest=/tmp/sudofile
          - name: attach sudofile to /etc/sudoers
            shell: cat /tmp/sudofile >> /etc/sudoers 
          - name: rm remote host sudofile
            file: 
              path: /tmp/sudofile
              state: absent
    [root@ansible yml]# 
    

    4.ansible hostsファイルの編集
    [root@ansible yml]# cat /etc/ansible/hosts
    [zte]
    10.142.1.[1:12]     ansible_ssh_user=root ansible_ssh_pass='password'
    [root@ansible yml]# 
    

    5.ansible-playbookシナリオを実行シナリオが置かれているディレクトリを見つけ、ansible-playbookを実行する
    [root@ansible yml]# ansible-playbook useradd.yml 
    

    注記:ansibleがユーザーを一括作成する方法はいくつかありますが、本稿では1つの方法を挙げます.参考にしてください.問題のあるコメントエリアで議論してください.