From fb017565f41876e6f28c2f1dd11efd14770f31a8 Mon Sep 17 00:00:00 2001 From: Thomas Kleinendorst Date: Wed, 10 Apr 2024 20:09:34 +0200 Subject: [PATCH] Add user creation for ddns script --- README.md | 21 ++++++++++++++++++ images/login_success.png | Bin 0 -> 62305 bytes playbook.yml | 3 +++ requirements.yml | 3 +++ roles/cloudflare-ddns/tasks/main.yml | 14 ++++++++++++ .../templates/ddns_config.ini.j2 | 6 +++++ roles/cloudflare-ddns/vars/defaults.yml | 13 +++++++++++ vault.yml | 18 +++++++++------ 8 files changed, 71 insertions(+), 7 deletions(-) create mode 100644 images/login_success.png create mode 100644 roles/cloudflare-ddns/tasks/main.yml create mode 100644 roles/cloudflare-ddns/templates/ddns_config.ini.j2 create mode 100644 roles/cloudflare-ddns/vars/defaults.yml diff --git a/README.md b/README.md index d7c0138..cc99716 100644 --- a/README.md +++ b/README.md @@ -51,3 +51,24 @@ It's possible to connect to the Raspberry Pi from the internal network via eithe When logged in the user will be prompted with the **zsh** configured with **[Oh My Zsh](https://ohmyz.sh)** and **[Starhip](https://starship.rs) prompts**. ![zsh](./images/zsh.png) + +## Other +### Creating users with the `singleplatform-eng.users` role +See the documentation [here](https://galaxy.ansible.com/ui/standalone/roles/singleplatform-eng/users/documentation/). The `password` setting for users states that a hash should be provided. +This hash should be stored within an ansible vault and can be generated with the following command: + +```bash +# Enter the password after which the hash will be printed +mkpasswd -m sha512crypt +``` + +Logging into the new user's account can be done as follows (for testing and debugging): + +```bash +# Enter both the username and password +sudo login +``` + +This is verified to be working: + +![new users](./images/login_success.png) diff --git a/images/login_success.png b/images/login_success.png new file mode 100644 index 0000000000000000000000000000000000000000..1343894a54c7628cacf7591370bc30d7fcc742a7 GIT binary patch literal 62305 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

J~B~okGIn2Rzp&Wa^l8m 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 LF+WW^=^Xh#P(_!- literal 0 HcmV?d00001 diff --git a/playbook.yml b/playbook.yml index 2fa0dd0..38635cc 100644 --- a/playbook.yml +++ b/playbook.yml @@ -15,6 +15,7 @@ # become: true # - role: zsh - role: pi-hole + - role: cloudflare-ddns vars: # devsec.hardening.os_hardening vars: os_auth_pw_max_age: 99999 # Effectively disables the setting as mentioned in the docs. @@ -25,6 +26,8 @@ ssh_allow_users: 'thomas' ssh_client_port: 22 # Default, but duplicated here for documentation purpose. Not changed because its only accessible via LAN. ssh_client_password_login: false # Default, but duplicated here for documentation purpose. + # Default for the "singleplatform-eng.users" role. + users_default_shell: '/usr/bin/zsh' tasks: # This task can be handy for debugging gathered facts, uncomment it if necessary: # - name: Store gathered facts in local file diff --git a/requirements.yml b/requirements.yml index a7fcc8e..abbeb83 100644 --- a/requirements.yml +++ b/requirements.yml @@ -4,3 +4,6 @@ collections: # See: https://galaxy.ansible.com/ui/repo/published/devsec/hardening/ - name: devsec.hardening version: 9.0.1 +roles: + - name: singleplatform-eng.users + version: v1.2.6 diff --git a/roles/cloudflare-ddns/tasks/main.yml b/roles/cloudflare-ddns/tasks/main.yml new file mode 100644 index 0000000..d655684 --- /dev/null +++ b/roles/cloudflare-ddns/tasks/main.yml @@ -0,0 +1,14 @@ +--- +- include_vars: defaults.yml +# TODO: Configure ZSH correctly by reasusing the zsh role by running the commands as the new user. +# see: https://serverfault.com/questions/662443/running-ansible-task-as-a-specific-user +- name: Create a new user + ansible.builtin.include_role: + name: singleplatform-eng.users + apply: + become: true + vars: + users: + - username: cloudflare_ddns + name: '-' + password: "{{ cloudflare_ddns_user_password_hash }}" diff --git a/roles/cloudflare-ddns/templates/ddns_config.ini.j2 b/roles/cloudflare-ddns/templates/ddns_config.ini.j2 new file mode 100644 index 0000000..b58caea --- /dev/null +++ b/roles/cloudflare-ddns/templates/ddns_config.ini.j2 @@ -0,0 +1,6 @@ +[credentials] +dns_cloudflare_token = {{ dns_cloudflare_token }} + +[log_changes] +# TODO: Update this... +log_path = /home/thomas/repositories/raspberry-pi-iac/ddns_update.log diff --git a/roles/cloudflare-ddns/vars/defaults.yml b/roles/cloudflare-ddns/vars/defaults.yml new file mode 100644 index 0000000..4a9ecb6 --- /dev/null +++ b/roles/cloudflare-ddns/vars/defaults.yml @@ -0,0 +1,13 @@ +$ANSIBLE_VAULT;1.1;AES256 +38343230616338653130383466333361323362326431303133616166373864333766366263613134 +6533376165613166646366396366646663383937303835650a343134336239613266643931393766 +62613963313431626564616239333531643361653739396363343362313035646561656239656366 +6462636435353931350a626132313565636666653839653839666465363262663365643264383331 +31316338313262636263346339653030363831643133643837333666383363616331653432326164 +36383561393561643439363931343532626335363937303432653938633439663435666234646533 +63653730633333626430656663636130663962643765303236343763383965643535653566633766 +39323166633933646162633032336335386265386237383133653865343435386530386139613061 +33343738643736306630326235313730303661333431376238363334313463363734383730343638 +65303365343433326630323066376132376465333965343930363066363561663530306261303961 +37626233623762353632653039353231623432316232323831343262343731353533343863326135 +36313836646130333431 diff --git a/vault.yml b/vault.yml index cdaa296..5a5f83a 100644 --- a/vault.yml +++ b/vault.yml @@ -1,8 +1,12 @@ $ANSIBLE_VAULT;1.1;AES256 -62623739323861346233393436396635393933303232646636383335663033623863646637383762 -6466613363613136626237383830373535336138643539660a313731313738636133646236386237 -64346565353630393639653766386137386132633362336432633664383165663665363562626131 -3337646464383465330a666638373130353234353532333830353265643063313365616361333834 -37656661343561303564383963656532633364303863616234633437346338653563623030393065 -36336630636133393831363361396239353761653039316533613239633234326161616663636335 -323335343265396264356563373664643264 +35363131353033623862663935613138653762333339653537663562383437303061613535313739 +6162393830346534363031363832333261343334643236370a626166613738336563383765363134 +64656532393433623434323861303531393231383939613036306231343965646262666330336165 +3863303932663731340a303138316666333733363161653061316235326361343465366231663665 +32646236653532333231666261616661366665303236356261316535333138336633306562356130 +64353064373061663537626439346631383838666233323932643562323533396364613063333431 +66323338646262396432366433373366613564656230333432373762306461363234636365646532 +65303161346464313964643036646539356664326261616362333336666265613435383630356164 +66326631373538333739376165393333393833636164626138643762623763396338623038623863 +30663431343438613062386235646265663262636533653034333434663162363031396135326361 +303937623733336261653636623061306632