Skip to content

Ansible og Terraform Þjónn


Uppsetning á sérstökum framteflingarþjóni (e. deployment server). Þjónninn mun hafa notendur sem hafa leyfi til að keyra Ansible skipanir á ákveðinn hóp af þjónum (í þessu tilviki allir). Gert er ráð fyrir að fleiri en einn notandi komi geti notað þjóninn og því er fyrirkomulagið þannig að sett er upp git lind á sérstökum stað á þjóninum sem er svo klónuð í heimamöppur allra notanda. Vegna þess að þjónninn hefur rótaraðgang að öllum öðrum þjónum eru ákveðnar öryggisráðstafanir teknar.

Uppsetning

Gert er ráð fyrir að þjónn sé til staðar. Í þessu tilfelli er notaður Ubuntu 20.04 þjónn keyrður á ESXi. Mælt er með því að virkja sjálfvirkar öryggisuppfærslur.

Kerfisnotandinn

Gerum hóp og kerfisnotanda:

# groupadd byggir
# useradd --system -g byggir bubbi

Þannig getur bubbi notað sudo til kerfisstjórnunar. Skynsamlegt finnst mér að treysta almennum forritandi kerfisstjóum til að uppfæra kerfið. Breytið /etc/sudoers þannig að skráin innihaldi eftirfarandi línur:

/etc/sudoers
byggir     ALL=NOPASSWD:/usr/bin/apt update
byggir     ALL=NOPASSWD:/usr/bin/apt upgrade
Nú ættu notendur í hópnum byggir að geta uppfært kerfið án lykilorðs. Að því stilltu skulum við gera fleiri notendur:

# useradd -m -G byggir doddi

Öryggisráðstafanir

SSH aðgangur er einungis aðgengilegur frá vinnustöðvanetinu, í þessu tilfelli 192.168.52.0/24, og innskráningar eru einungis leyfðar í gegnum SSH lykla. Þetta er stillt í skránni /etc/ssh/sshd_conf ásamt þessum atriðum:

PermitRootLogin no                                              # (1)!
PasswordAuthentication no                                       # (2)!
AddressFamily inet                                              # (3)!
ListenAddress <IP-fang þjóns>                                   # (4)!
X11Forwarding no                                                # (5)!
AuthorizedKeysFile /etc/ssh/authorized-keys/%u/authorized_keys  # (6)!
  1. Bönnum beina innskráningu sem root
  2. Bönnum innskráningu með lykilorðum
  3. Hlustum bara á IPv4 traffík
  4. Tilgreinum IP töluna sem SSH þjónninn svarar
  5. Bönnum sendinu X skjákerfisins í gegnum SSH
  6. Sýnum notendum vantraust og setjum lykla í möppu sem þeir geta ekki skrifað í, %u breytist í notendanafn virks notanda. Þessi mappa þarf að vera læs fyrir sérhvern notanda.

Warning

Verið viss um að koma ykkar SSH lykli örugglega fyrir í /etc/ssh/authorized-keys/%u/authorized_keys áður en þið virkið breytingarnar og skráið ykkur út. Gangið einnig úr skugga um að þinn notandi geti lesið þá möppu, en hann ætti ekki að geta skrifað í hana.

Bönnum líka alls kyns áframsendingar

AllowAgentForwarding no         # (1)!
AllowTcpForwarding no           # (2)! 
PermitTunnel no                 
AllowUsers *@192.168.52.0/24    # (3)!
  1. Bönnum tengingu við ssh-agent ferlið á tölvunni sem tengist þjóninum.
  2. Bönnum notkun þjóns sem göng.
  3. Leyfum bara tengingar frá tilgreindu neti

Breytum svo umask gildinu þannig að allar nýjar möppur hafi 0770 réttindi og skrár 0660. Göngum úr skugga um að línan

session     optional    pam_umask.so

sé til staðar áður en við opnum skrána /etc/login.defs og bætum við línunni

UMASK 007

eftir þetta gæti þurft að eiga við réttindi á kerfisskrám sé þeim breytt.

Gerum möppur fyrir Ansible og Terraform skrárnar okkar

# mkdir -p /build/{ansible,terraform}
# chown -R bubbi:byggir /build
Þetta verða git lindir sem notendur geta klónað. Frumstillum git lindirnar:

$ cd /build/ansible
$ git init --bare
$ cd /build/terraform
$ git init --bare

Note

Hér gerum við --bare þar sem við munum ekki vinna skrár í þessari möppu, þetta er bara til að hafa einn miðlægan punkt fyrir alla notendur.

Að nota lindirnar

Við getum verið að vinna á þjóninum, þá getum við klónað lindirnar á sjálfum þjóninum undir okkar heimamöppu

$ git clone /build/ansible

Líklegra er að við vinnum þetta í gegnum fjartengingu, þá gerum við einfaldlega

$ git clone <notandi>@<ip_þjóns>:/build/ansible

Stillingar þjóna

Allir þjónar sem stjórnað er af ansible þurfa annað hvort að hafa notanda fyrir hvern notanda sem keyrir ansible, eða allir ansible notendur keyra með einum kerfisnotanda sem er til staðar á öllum þjónum. Við munum nota þá aðferð.

Ef umhverfi þitt er með þjóna sem hafa ekki þennan kerfisnotanda getum við notað núverandi notanda til að keyra playbook sem bætir við kerfisnotandanum

Byrjum á því að skilgreina þjónana okkar

prod
[linux]
linux01.heima
linux02.heima
linux03.heima
linux04.heima
linux05.heima
linux06.heima
linux07.heima
linux08.heima
linux09.heima
linux10.heima
linux11.heima
Bætum við kerfisnotanda á alla þjóna undir [linux]

bubbi.yml
---

- name: Gerum notanda Bubba
  hosts: linux
  become: true
  gather_facts: false
  vars_files:
    - group_vars/leyndo

  tasks:
    - name: Bætum við hópi byggir
      group:
        name: byggir
        system: yes
        state: present

    - name: Bætum við Bubba
      user:
        name: bubbi
        group: byggir
        groups: ''
        home: /home/bubbi
        system: yes
        state: present
        password: '!' 

    - name: Gerum SSH möppu bubba
      file:
        path: /home/bob/.ssh
        state: directory
        owner: bubbi
        group: byggir
        mode: 0700

    - name: Flytjum inn SSH lykil bubba
      copy:
        dest: /home/bob/.ssh/authorized_keys
        src: id_bubbi.pub
        owner: bubbi
        group: byggir
        mode: 0600

    - name: Leyfum bubba að sudo-a
      lineinfile:
        create: yes
        line: "bubbi ALL=(ALL) NOPASSWD: ALL
        path: /etc/sudoers.d/bubbi
        state: present
        validate: /usr/sbin/visudo -cf %s

    - name: Bönnum lykilorðainnskráningar bubba
      blockinfile:
        path: /etc/ssh/sshd_config
        block: |
          Match User bob
          PasswordAuthentication no
Note

Skráin group_vars/leyndo inniheldur dulkóðað gildi lykilorðs notandans sem keyrir ansible, það er gert með ansible vault. Rótaraðgang þarf til að keyra flestar skipanirnar og til þess þarf stæðuna become: true, það virkar ekki nema lykilorð notandans sé til staðar eða notandinn hafa lykilorðalaust sudo.