Contents
owncloudとActive Directoryでユーザー認証の連携しているシステムをAWX(Ansible Tower)を使ってユーザー登録を自動化してみた例です。
環境
項目 | バージョン |
---|---|
owncloud | 10.2.1 |
AWX | 6.0.0.0 |
Windows Server | 2016 |
処理の流れ
- WinRMでADにアクセスしてADユーザーを作成
- owncloudは
owncloud Users
に属していないとログインできないようにする - そのため、作成したユーザーには
owncloud Users
を紐付ける - ユーザーは
OU=owncloud
に作成します
- owncloudは
- SSHでowncloudサーバにアクセスしてADユーザーのディレクトリを作成する
- owncloudのCLIツールで登録したユーザー情報をADから取得する
- ディレクトリは
objectGUID
名で作成する(owncloud上の管理)
Playbook
Playbookは以下の2つを使います。
1 2 3 4 5 |
[root@awx owncloud]# tree . . ├── create_user_owncloud.yml └── domain_operation.yml |
domain_operation.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
--- - name: domain user operation hosts: all gather_facts: no tasks: - name: domain user operation. win_domain_user: name: "{{ user }}" firstname: "{{ firstname }}" surname: "{{ surname }}" postal_code: "{{ postal_code }}" country: "{{ country }}" state_province: "{{ state_province }}" city: "{{ city }}" company: "{{ company }}" email: "{{ email }}" password: "{{ password }}" groups: "{{ domain_groups }}" path: "{{ path }}" state: "{{ state }}" |
パラメーターの詳細は以下ドキュメントを参照ください。
https://docs.ansible.com/ansible/latest/modules/win_domain_user_module.html#win-domain-user-module
create_user_owncloud.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
--- - name: owncloud create user operation hosts: all gather_facts: no tasks: - name: check if the user exists in active directory. shell: "/usr/local/bin/php /var/www/html/owncloud/occ ldap:search {{ user }} | grep \"{{ user }} (\"" register: check_user_exists_result changed_when: False ignore_errors: yes become: yes become_method: su become_user: apache become_flags: '-s /bin/bash' - debug: msg="user {{ user }} not found." failed_when: check_user_exists_result.stdout | length == 0 when: check_user_exists_result.stdout | length == 0 - set_fact: guid: "{{ check_user_exists_result.stdout | regex_replace('.*\\((.*)\\)', '\\1') }}" - name: create user directory file: path: "/var/www/html/owncloud/data/{{ guid }}/files" state: directory become: yes become_method: su become_user: apache become_flags: '-s /bin/bash' when: check_user_exists_result.stdout | length > 0 and check_user_exists_result.stdout_lines | length == 1 |
ldap:search
を使ってADからユーザー情報を取得します。
取得した情報を元にユーザー用のディレクトリを作成します。
ちなみに取得出来る情報は以下のものです。
1 2 3 4 |
[root@c46588d76fb5 data]# su - apache -s /bin/bash -c "/usr/local/bin/php /var/www/html/owncloud/occ ldap:search example" The process control (PCNTL) extensions are required in case you want to interrupt long running commands - see http://php.net/manual/en/book.pcntl.php example (4242AF9D-CC0B-43C2-9346-6C249DB4A9E8) |
ユーザーが存在する場合の実行結果は ユーザー名 (objectGUID)
です。
owncloud設定
AWX設定
AD user operation
ADのユーザーを登録するテンプレートです。
owncloud create user operation
owncloud上にADユーザーのディレクトリを作成するテンプレートです。
create owncloud user
上記2つのテンプレートを使ったワークフローです。
ワークフローは AD user operation
-> owncloud create user operation
の順番で実行するようにしています。
ワークフローでは以下のSURVEYを設定しています。
都道府県
のデフォルトは日本語で入れているので数値参照(10進数)でエンコードされています。
実行
以下がデモ動画です。
Create users in active directory and owncloud with AWX(Ansible Tower) from sky_joker on Vimeo.
ADにユーザーを作成してowncloudにログインすることが出来ました 🙂
最後に
ちなみに、owncloud上にユーザーのディレクトリを作成しなくても初回ログイン時に自動で作成されます。
ここで作った理由は、例えばログインする前にファイルを事前に作っておきたい場合などで使えるかもと思って試しにやっています。
例えば、標準のファイルなどを事前に入れておきたい時とかに使えるかもと思っています 🙂
後は、AnsibleやTower/AWXで作成したファイルの保存先にユーザー名を指定する場合は、同じような処理が必要なので後々役立つかもしれないと言う備忘録的な感じで書いていたりします。
それでは、みんなでハッピーオートメーション!
参考になりました。ありがとうございます。一つ質問なのですが、
ADのグループポリシーなんかはどうやって適用してんでしょう。
現状の設定からだと部門毎のポリシーは設定されているかみえなかったです。みんな、Domain Userなのでしょうかね。
コメントありがとうございます 🙂
> 現状の設定からだと部門毎のポリシーは設定されているかみえなかったです。みんな、Domain Userなのでしょうかね。
ご認識の通りです。
今回は簡単な動作検証のため専用のグループポリシーは作成しておらずADユーザーの作成およびグループを紐付けているだけになります 🙂