Palvelinten hallinta Week 4

Tehtävänanto

  1. Home Work X – Read the chapters 4-6 from course book – Salt States
  2. Home Work XI – Implement Tero Karvinen’s home work in this link to your Ubuntu web-tier minion. (this configures ssh-server to port -8888 with salt.
  3. Complete the other tasks listed in the week46.zip included word-document.
  4. For your own sanity’s sake configure your editor of choise to support YAML and Jinja -syntax highlighting!

Vastaukset

Käyttäjät loin yhtä tilatiedostoa käyttäen sisältäen sekä end goal sliden käyttäjät että omanimi käyttäjän. Kaikkilla käyttäjillä on admin oikeudet heille relevantteihin koneisiin. users.sls tiedoston koodi:

olli:
  user.present:
    - password: salainen
    - hash_password: true
    - groups:
{% if grains['os_family'] == 'Debian' %}
      - sudo
{% elif grains['os_family'] == 'RedHat' %}
      - wheel
{% endif %}

{% if grains['role'] == 'Web_tier' %}
bob:
  user.present:
    - password: salainen
    - hash_password: true
    - groups:
      - sudo
{% endif %}

{% if grains['role'] == 'DB_tier' %}
mary:
  user.present:
    - password: salainen
    - hash_password: true
    - groups:
      - wheel
{% endif %}

kevin:
  user.present:
    - password: salainen
    - hash_password: true
    - groups:
{% if grains['os_family'] == 'Debian' %}
      - sudo
{% elif grains['os_family'] == 'RedHat' %}
      - wheel
{% endif %}

stuart:
  user.present:
    - password: salainen
    - hash_password: true
    - groups:
{% if grains['os_family'] == 'Debian' %}
      - sudo
{% elif grains['os_family'] == 'RedHat' %}
      - wheel
{% endif %}

En ole ihan varma minkä takia tehtävissä käsketään kasvattamaan CentOS asennuksen levykapasiteettia 20 gigaan, kun se selkeästi on jo 20 gigainen:

Useimpien palveluiden asentaminen onnistui yhdellä tilatiedostolla, lukuun ottamatta luonnollisesti WordPressiä. MariaDB:n konfiguroimisen menin kuitenkin hoitamaan manuaalisesti ssh:lla, koska saltin mysql moduulien toiminnan selvittäminen alkoi käydä hermoille.
endstate.sls:

{% if grains['role'] == 'Web_tier' %}
install_lamp:
  pkg.installed:
    - pkgs:
      - apache2
      - php
      - mariadb-client
      - php-mysql
      - unzip

apache_is_running:
  service.running:
    - name: apache2
    - enable: True
    - require:
      - pkg: install_lamp
{% endif %}


{% if grains['role'] == 'DB_tier' %}
install_mariaDB:
  pkg.installed:
    - pkgs:
      - mariadb
      - mariadb-server
{% endif %}

WordPressin asennus hoitui tilatiedostolla, jonka ensimmäinen osa on käytännössä bash-skripti ja toinen osa kopioi valmiit tietokanta konfiguroinnit palvelimelle. Konfigurointi-tiedosto on muokattu versio tämän valmiin Worpress asennuksen sample konfiguraatiosta. Asennuksen viimeistelyn tein perinteisesti selaimessa, vaikka kai saltin wordpress moduulia olisi pitänyt käyttää siihenkin.
wpinstall.sls:

install_WP:
  cmd.run:
    - name:  |
        cd /tmp
        wget https://wordpress.org/latest.zip
        unzip -d /var/www/html/ latest.zip
        chown www-data:www-data -R /var/www/html/wordpress/

sync wp-config.php:
  file.managed:
    - name: /var/www/html/wordpress/wp-config.php
    - source: salt://wp-config.php
    - user: www-data
    - group: www-data
    - mode: 755

Se toimii:

Ssh-autentikaation toteutus kopio pillar-tiedostoon tallennetut ssh-avaimet (sekä julkisen että yksityisen) id_rsa ja authorized_keys tiedostoihin kaikkien koneiden olli käyttäjälle mahdollistaen olli-käyttäjän avainpohjaisen tunnistautumisen jokaiselta koneelta jokaiselle toiselle koneelle. Pieni ongelma tässä on, että tämä ratkaisu ylikirjoittaa authorized_keys-tiedoston, joten muita kirjautumisavaimia ei voi olla rinnalla.
manage_ssh.sls:

{% if 'ssh_key' in pillar %}
manage_ssh_key:
  file.managed:
    - name: /home/olli/.ssh/{{ pillar['ssh_key_name'] }}
    - mode: 700
    - contents_pillar: ssh_key
    - show_diff: False
    - makedirs: True
    - user: olli
    - group: olli

manage_pub_ssh_key:
  file.managed:
    - name: /home/olli/.ssh/{{ pillar['pub_ssh_key_name'] }}
    - mode: 700
    - contents_pillar: pub_ssh_key
    - show_diff: False
    - makedirs: True
    - user: olli
    - group: olli
{% endif %}

SSH palvelinten porttien muuttaminen 8888:aan oli enimmäkseen copy/paste tehtävä, mutta CentOS onnistui taas heittämään mutkan matkaan, koska CentOS:n käyttämä SELinux-järjestelmä oletuksena estää ssh:n portin muuttamisen mihinkään muuhun porttiin. (Huomasin vasta tehtävän jo tehtyäni että tarkoitus oli implementoida tämä vain Web minionille, eikä CentOS:lle). Tämä korjaantuu onneksi yhdellä komennolla:

salt -G 'os_family:RedHat' cmd.run 'semanage port -a -t ssh_port_t -p tcp 8888'

Ja kirjautuminen CentOS:llekkin portista 8888 toimii:

olli@UbuntuSaltMaster:~/.ssh$ ssh -p 8888 10.208.0.244
Last login: Mon Dec 30 00:52:22 2019
[olli@CentOS7Db1 ~]$ 

Leave a comment

Your email address will not be published. Required fields are marked *