Compare commits
	
		
			10 Commits
		
	
	
		
			6ea6e14c82
			...
			c175fea059
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					c175fea059 | ||
| 
						 | 
					c06b688e87 | ||
| 
						 | 
					da121f6cff | ||
| 
						 | 
					d7b22019b5 | ||
| 
						 | 
					6091dfffa1 | ||
| 
						 | 
					dd29aa7384 | ||
| 
						 | 
					ef6415d8b2 | ||
| 
						 | 
					320583635c | ||
| 
						 | 
					12e04e235e | ||
| 
						 | 
					141c22b647 | 
@@ -2,14 +2,11 @@
 | 
				
			|||||||
---
 | 
					---
 | 
				
			||||||
# defaults file for lockdown
 | 
					# defaults file for lockdown
 | 
				
			||||||
files_mode: no
 | 
					files_mode: no
 | 
				
			||||||
# create_groups:
 | 
					 | 
				
			||||||
#   - group_name: "ftp"
 | 
					 | 
				
			||||||
create_users:
 | 
					create_users:
 | 
				
			||||||
  - username: "{{ hostvars['server'][0].username }}"
 | 
					  - username: "{{ hostvars[inventory_hostname]['passwords'][0].username }}"
 | 
				
			||||||
    password: "{{ hostvars['server'][0].password }}"
 | 
					    password: "{{ hostvars[inventory_hostname]['passwords'][0].password }}"
 | 
				
			||||||
    # ssh_authorize: yes
 | 
					 | 
				
			||||||
# web_users:
 | 
					 | 
				
			||||||
#   - caddy
 | 
					 | 
				
			||||||
#   - www-data
 | 
					 | 
				
			||||||
ssh_pubkey_filename_pattern: '.*\.pub'
 | 
					ssh_pubkey_filename_pattern: '.*\.pub'
 | 
				
			||||||
include_root_lock: yes
 | 
					include_root_lock: yes
 | 
				
			||||||
 | 
					gpg_private_keys_origin_host: localhost
 | 
				
			||||||
 | 
					gpg_origin_private_keyids: [] # @NOTE list of gpg key ids from origin or source server
 | 
				
			||||||
 | 
					gpg_origin_private_key_passwords: "{{ vaulted_gpg_origin_private_key_passwords }}" # @NOTE list of gpg key passwords from origin or source server
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										38
									
								
								.ansible/roles/lockdown/tasks/gpg.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								.ansible/roles/lockdown/tasks/gpg.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					- name: Acquire GPG private keys from other system
 | 
				
			||||||
 | 
					  delegate_to: "{{ gpg_private_keys_origin_host }}"
 | 
				
			||||||
 | 
					  ansible.builtin.command:
 | 
				
			||||||
 | 
					    argv:
 | 
				
			||||||
 | 
					      - gpg
 | 
				
			||||||
 | 
					      - -a
 | 
				
			||||||
 | 
					      - --export-secret-key
 | 
				
			||||||
 | 
					      - "{{ item }}"
 | 
				
			||||||
 | 
					  loop: "{{ gpg_origin_private_keyids }}"
 | 
				
			||||||
 | 
					  register: gpg_secrets
 | 
				
			||||||
 | 
					- name: Create GPG private keys
 | 
				
			||||||
 | 
					  ansible.builtin.copy:
 | 
				
			||||||
 | 
					    content: "{{ item }}"
 | 
				
			||||||
 | 
					    dest: "{{ ansible_facts['user_dir'] }}/.gnupg/{{ ansible_facts['user_dir'] }}-{{ idx }}.priv.asc"
 | 
				
			||||||
 | 
					    force: yes
 | 
				
			||||||
 | 
					    backup: yes
 | 
				
			||||||
 | 
					    mode: "0600"
 | 
				
			||||||
 | 
					    state: present
 | 
				
			||||||
 | 
					  loop: "{{ gpg_secrets.results }}"
 | 
				
			||||||
 | 
					  loop_control:
 | 
				
			||||||
 | 
					    index_var: idx
 | 
				
			||||||
 | 
					  register: created_gpg_private_keys
 | 
				
			||||||
 | 
					- name: Import GPG private keys
 | 
				
			||||||
 | 
					  when: (gpg_origin_private_key_passwords | length) == (gpg_origin_private_keyids | length)
 | 
				
			||||||
 | 
					  ansible.builtin.command:
 | 
				
			||||||
 | 
					    argv:
 | 
				
			||||||
 | 
					      - gpg
 | 
				
			||||||
 | 
					      - --batch
 | 
				
			||||||
 | 
					      - --import
 | 
				
			||||||
 | 
					      - --yes
 | 
				
			||||||
 | 
					      - --passphrase-fd
 | 
				
			||||||
 | 
					      - 0
 | 
				
			||||||
 | 
					      - "{{ item.dest }}"
 | 
				
			||||||
 | 
					    stdin: "{{ gpg_origin_private_key_passwords[idx] }}"
 | 
				
			||||||
 | 
					  loop: "{{ created_gpg_private_keys.results }}"
 | 
				
			||||||
 | 
					  loop_control:
 | 
				
			||||||
 | 
					    index_var: idx
 | 
				
			||||||
@@ -61,12 +61,12 @@
 | 
				
			|||||||
    - name: Register SSH public keys as sys-admin user's authorized keys
 | 
					    - name: Register SSH public keys as sys-admin user's authorized keys
 | 
				
			||||||
      ansible.builtin.lineinfile:
 | 
					      ansible.builtin.lineinfile:
 | 
				
			||||||
        path: "{{ created_admin.home }}/.ssh/authorized_keys"
 | 
					        path: "{{ created_admin.home }}/.ssh/authorized_keys"
 | 
				
			||||||
        line: "{{ lookup('ansible.builtin.file', item) }}"
 | 
					        line: "{{ lookup('ansible.builtin.file', item.path) }}"
 | 
				
			||||||
        owner: "{{ created_admin.name }}"
 | 
					        owner: "{{ created_admin.name }}"
 | 
				
			||||||
        group: "{{ created_admin.name }}"
 | 
					        group: "{{ created_admin.name }}"
 | 
				
			||||||
        mode: "0600"
 | 
					        mode: "0600"
 | 
				
			||||||
        create: yes
 | 
					        create: yes
 | 
				
			||||||
        insertafter: ~
 | 
					        insertafter: EOF
 | 
				
			||||||
        state: present
 | 
					        state: present
 | 
				
			||||||
      tags:
 | 
					      tags:
 | 
				
			||||||
        - default
 | 
					        - default
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -13,8 +13,6 @@ senpai/
 | 
				
			|||||||
.ansible/collections/ansible_collections/
 | 
					.ansible/collections/ansible_collections/
 | 
				
			||||||
/playbooks/group_vars/**/main.yml
 | 
					/playbooks/group_vars/**/main.yml
 | 
				
			||||||
/playbooks/host_vars/**/main.yml
 | 
					/playbooks/host_vars/**/main.yml
 | 
				
			||||||
/playbooks/group_vars/**/vault.yml
 | 
					 | 
				
			||||||
/playbooks/host_vars/**/vault.yml
 | 
					 | 
				
			||||||
/playbooks/**/ssh_keys_vault.yml
 | 
					/playbooks/**/ssh_keys_vault.yml
 | 
				
			||||||
/playbooks/**/ssh_keys.yml
 | 
					/playbooks/**/ssh_keys.yml
 | 
				
			||||||
/playbooks/files/**/bash/bash_aliases
 | 
					/playbooks/files/**/bash/bash_aliases
 | 
				
			||||||
@@ -28,4 +26,5 @@ senpai/
 | 
				
			|||||||
hosts.ini
 | 
					hosts.ini
 | 
				
			||||||
hosts.yml
 | 
					hosts.yml
 | 
				
			||||||
hosts.yaml
 | 
					hosts.yaml
 | 
				
			||||||
hosts.json
 | 
					hosts.json
 | 
				
			||||||
 | 
					vault.yml
 | 
				
			||||||
@@ -28,6 +28,8 @@ locals:
 | 
				
			|||||||
    localhost_hosts:
 | 
					    localhost_hosts:
 | 
				
			||||||
  vars:
 | 
					  vars:
 | 
				
			||||||
    ansible_connection: local
 | 
					    ansible_connection: local
 | 
				
			||||||
 | 
					name_surname:
 | 
				
			||||||
 | 
					surname_household:
 | 
				
			||||||
servers:
 | 
					servers:
 | 
				
			||||||
  children:
 | 
					  children:
 | 
				
			||||||
    sukaato_hosts:
 | 
					    sukaato_hosts:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,6 +15,13 @@
 | 
				
			|||||||
    # ansible_password: "{{ passwords[0].password }}"
 | 
					    # ansible_password: "{{ passwords[0].password }}"
 | 
				
			||||||
    # ansible_ssh_pass: "{{ passwords[0].username }}"
 | 
					    # ansible_ssh_pass: "{{ passwords[0].username }}"
 | 
				
			||||||
    # ansible_ssh_password: "{{ passwords[0].username }}"
 | 
					    # ansible_ssh_password: "{{ passwords[0].username }}"
 | 
				
			||||||
 | 
					    ansible_python_interpreter: “{{ ansible_playbook_python }}”
 | 
				
			||||||
 | 
					    personal_computers: locals # @NOTE can change to *_households group or {{ name }}_{{ surname }} group name
 | 
				
			||||||
 | 
					  vars_prompt:
 | 
				
			||||||
 | 
					    - name: gpg_import_passwords
 | 
				
			||||||
 | 
					      prompt: Enter space-wrapped colon -separated list of GPG private key passwords
 | 
				
			||||||
 | 
					      unsafe: yes
 | 
				
			||||||
 | 
					      private: yes
 | 
				
			||||||
  tasks:
 | 
					  tasks:
 | 
				
			||||||
    - name: Disable shell access for root
 | 
					    - name: Disable shell access for root
 | 
				
			||||||
      ansible.builtin.include_role:
 | 
					      ansible.builtin.include_role:
 | 
				
			||||||
@@ -25,11 +32,13 @@
 | 
				
			|||||||
        tasks_from: deshell
 | 
					        tasks_from: deshell
 | 
				
			||||||
        apply:
 | 
					        apply:
 | 
				
			||||||
          become: yes
 | 
					          become: yes
 | 
				
			||||||
 | 
					      tags:
 | 
				
			||||||
 | 
					        - default
 | 
				
			||||||
    - name: Create global bash aliases
 | 
					    - name: Create global bash aliases
 | 
				
			||||||
      become: yes
 | 
					      become: yes
 | 
				
			||||||
      ansible.builtin.copy:
 | 
					      ansible.builtin.copy:
 | 
				
			||||||
        src: files/all/bash/bash_aliases
 | 
					        src: files/all/bash/bash_aliases
 | 
				
			||||||
        dest: "/etc/bash_aliases"
 | 
					        dest: /etc/bash_aliases
 | 
				
			||||||
        owner: root
 | 
					        owner: root
 | 
				
			||||||
        group: root
 | 
					        group: root
 | 
				
			||||||
        follow: yes
 | 
					        follow: yes
 | 
				
			||||||
@@ -37,11 +46,14 @@
 | 
				
			|||||||
        backup: yes
 | 
					        backup: yes
 | 
				
			||||||
        mode: "0644"
 | 
					        mode: "0644"
 | 
				
			||||||
        state: present
 | 
					        state: present
 | 
				
			||||||
 | 
					      tags:
 | 
				
			||||||
 | 
					        - default
 | 
				
			||||||
 | 
					        - source_sys_bashrc
 | 
				
			||||||
    - name: Create global bash functions
 | 
					    - name: Create global bash functions
 | 
				
			||||||
      become: yes
 | 
					      become: yes
 | 
				
			||||||
      ansible.builtin.copy:
 | 
					      ansible.builtin.copy:
 | 
				
			||||||
        src: files/all/bash/bash_functions
 | 
					        src: files/all/bash/bash_functions
 | 
				
			||||||
        dest: "/etc/bash_functions"
 | 
					        dest: /etc/bash_functions
 | 
				
			||||||
        owner: root
 | 
					        owner: root
 | 
				
			||||||
        group: root
 | 
					        group: root
 | 
				
			||||||
        follow: yes
 | 
					        follow: yes
 | 
				
			||||||
@@ -49,6 +61,9 @@
 | 
				
			|||||||
        backup: yes
 | 
					        backup: yes
 | 
				
			||||||
        mode: "0644"
 | 
					        mode: "0644"
 | 
				
			||||||
        state: present
 | 
					        state: present
 | 
				
			||||||
 | 
					      tags:
 | 
				
			||||||
 | 
					        - default
 | 
				
			||||||
 | 
					        - source_sys_bashrc
 | 
				
			||||||
    - name: Register bash aliases and functions to global bashrc
 | 
					    - name: Register bash aliases and functions to global bashrc
 | 
				
			||||||
      become: yes
 | 
					      become: yes
 | 
				
			||||||
      ansible.builtin.blockinfile:
 | 
					      ansible.builtin.blockinfile:
 | 
				
			||||||
@@ -60,7 +75,7 @@
 | 
				
			|||||||
          if [ -f /etc/bash_functions ]; then
 | 
					          if [ -f /etc/bash_functions ]; then
 | 
				
			||||||
              . /etc/bash_functions
 | 
					              . /etc/bash_functions
 | 
				
			||||||
          fi
 | 
					          fi
 | 
				
			||||||
        path: "/etc/bash.bashrc"
 | 
					        path: /etc/bash.bashrc
 | 
				
			||||||
        prepend_newline: yes
 | 
					        prepend_newline: yes
 | 
				
			||||||
        marker: "# {mark} ANSIBLE MANAGED SYSTEM-WIDE BASH ALIASES AND FUNCTIONS BLOCK"
 | 
					        marker: "# {mark} ANSIBLE MANAGED SYSTEM-WIDE BASH ALIASES AND FUNCTIONS BLOCK"
 | 
				
			||||||
        insertafter: EOF
 | 
					        insertafter: EOF
 | 
				
			||||||
@@ -69,4 +84,100 @@
 | 
				
			|||||||
        group: root
 | 
					        group: root
 | 
				
			||||||
        backup: yes
 | 
					        backup: yes
 | 
				
			||||||
        state: present
 | 
					        state: present
 | 
				
			||||||
        
 | 
					      tags:
 | 
				
			||||||
 | 
					        - default
 | 
				
			||||||
 | 
					        - source_sys_bashrc
 | 
				
			||||||
 | 
					    - name: Start XDG configuration tasks if in servers group 
 | 
				
			||||||
 | 
					      when: "'servers' in group_names and ansible_connection != 'local'"
 | 
				
			||||||
 | 
					      become: yes
 | 
				
			||||||
 | 
					      block:
 | 
				
			||||||
 | 
					        - name: Create XDG user home directory environment variables
 | 
				
			||||||
 | 
					          ansible.builtin.copy:
 | 
				
			||||||
 | 
					            src: files/servers/xdg/user-dirs.defaults
 | 
				
			||||||
 | 
					            dest: /etc/xdg/user-dirs.defaults
 | 
				
			||||||
 | 
					            owner: root
 | 
				
			||||||
 | 
					            group: root
 | 
				
			||||||
 | 
					            follow: yes
 | 
				
			||||||
 | 
					            force: yes
 | 
				
			||||||
 | 
					            backup: yes
 | 
				
			||||||
 | 
					            mode: "0644"
 | 
				
			||||||
 | 
					            state: present
 | 
				
			||||||
 | 
					        - name: Create XDG user home directory environment variables
 | 
				
			||||||
 | 
					          ansible.builtin.copy:
 | 
				
			||||||
 | 
					            src: "files/servers/{{ ansible_facts['user_id'] }}/xdg/user-dirs.dirs"
 | 
				
			||||||
 | 
					            dest: "{{ ansible_facts['user_dir'] }}/.config/user-dirs.dirs"
 | 
				
			||||||
 | 
					            owner: root
 | 
				
			||||||
 | 
					            group: root
 | 
				
			||||||
 | 
					            follow: yes
 | 
				
			||||||
 | 
					            force: yes
 | 
				
			||||||
 | 
					            backup: yes
 | 
				
			||||||
 | 
					            mode: "0644"
 | 
				
			||||||
 | 
					            state: present
 | 
				
			||||||
 | 
					      tags:
 | 
				
			||||||
 | 
					        - default
 | 
				
			||||||
 | 
					        - create_xdg_config
 | 
				
			||||||
 | 
					        - servers_exclusive
 | 
				
			||||||
 | 
					    - name: Start XDG configuration tasks if current host in specified group
 | 
				
			||||||
 | 
					      when: "personal_computers in group_names or ansible_connection == 'local'"
 | 
				
			||||||
 | 
					      become: yes
 | 
				
			||||||
 | 
					      block:
 | 
				
			||||||
 | 
					        - name: Create XDG user home directory environment variables
 | 
				
			||||||
 | 
					          ansible.builtin.copy:
 | 
				
			||||||
 | 
					            src: files/locals/xdg/user-dirs.defaults
 | 
				
			||||||
 | 
					            dest: /etc/xdg/user-dirs.defaults
 | 
				
			||||||
 | 
					            owner: root
 | 
				
			||||||
 | 
					            group: root
 | 
				
			||||||
 | 
					            follow: yes
 | 
				
			||||||
 | 
					            force: yes
 | 
				
			||||||
 | 
					            backup: yes
 | 
				
			||||||
 | 
					            mode: "0644"
 | 
				
			||||||
 | 
					            state: present
 | 
				
			||||||
 | 
					        - name: Create XDG user home directory environment variables
 | 
				
			||||||
 | 
					          ansible.builtin.copy:
 | 
				
			||||||
 | 
					            src: "files/locals/{{ ansible_facts['user_id'] }}/xdg/user-dirs.dirs"
 | 
				
			||||||
 | 
					            dest: "{{ ansible_facts['user_dir'] }}/.config/user-dirs.dirs"
 | 
				
			||||||
 | 
					            owner: root
 | 
				
			||||||
 | 
					            group: root
 | 
				
			||||||
 | 
					            follow: yes
 | 
				
			||||||
 | 
					            force: yes
 | 
				
			||||||
 | 
					            backup: yes
 | 
				
			||||||
 | 
					            mode: "0644"
 | 
				
			||||||
 | 
					            state: present
 | 
				
			||||||
 | 
					      tags:
 | 
				
			||||||
 | 
					        - default
 | 
				
			||||||
 | 
					        - create_xdg_config
 | 
				
			||||||
 | 
					        - locals_exclusive
 | 
				
			||||||
 | 
					    - name: Start SSH configuration tasks if current host in specified group
 | 
				
			||||||
 | 
					      when: "personal_computers in group_names or ansible_connection == 'local'"
 | 
				
			||||||
 | 
					      become: yes
 | 
				
			||||||
 | 
					      block:
 | 
				
			||||||
 | 
					        - name: Create user SSH configuration
 | 
				
			||||||
 | 
					          ansible.builtin.copy:
 | 
				
			||||||
 | 
					            src: "files/locals/ssh/{{ ansible_facts['user_id'] }}/config"
 | 
				
			||||||
 | 
					            dest: "{{ ansible_facts['user_dir'] }}/.ssh/config"
 | 
				
			||||||
 | 
					            follow: yes
 | 
				
			||||||
 | 
					            force: yes
 | 
				
			||||||
 | 
					            backup: yes
 | 
				
			||||||
 | 
					            owner: "{{ ansible_facts['user_id'] }}"
 | 
				
			||||||
 | 
					            group: "{{ ansible_facts['user_id'] }}"
 | 
				
			||||||
 | 
					            mode: "0600"
 | 
				
			||||||
 | 
					            state: present
 | 
				
			||||||
 | 
					      tags:
 | 
				
			||||||
 | 
					        - default
 | 
				
			||||||
 | 
					        - create_ssh_config
 | 
				
			||||||
 | 
					        - locals_exclusive
 | 
				
			||||||
 | 
					    - name: Import GPG private keys
 | 
				
			||||||
 | 
					      ansible.builtin.include_role:
 | 
				
			||||||
 | 
					        name: lockdown
 | 
				
			||||||
 | 
					        defaults_from: main
 | 
				
			||||||
 | 
					        vars_from: main
 | 
				
			||||||
 | 
					        handlers_from: main
 | 
				
			||||||
 | 
					        tasks_from: gpg
 | 
				
			||||||
 | 
					      vars:
 | 
				
			||||||
 | 
					        gpg_keys_origin_host: localhost
 | 
				
			||||||
 | 
					        gpg_origin_private_key_passwords: "{{ gpg_import_passwords | split(' : ') }}"
 | 
				
			||||||
 | 
					      tags:
 | 
				
			||||||
 | 
					        - default
 | 
				
			||||||
 | 
					        - import_gpg_privkeys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
		Reference in New Issue
	
	Block a user