Hulpartikel overzicht

Hulpartikel

Hoe maak je een cloud-config file?

Tijdens het bestellen van een VPS, krijg je de keuze uit een van vier verschillende installatiemogelijkheden. Een van de beschikbare opties is om een cloud-config-bestand te gebruiken.

Met een cloud-config-bestand kun je de configuratie van een Linux-server na het installatieproces automatisch aanpassen: Tijdens de eerste boot van je server leest een programma genaamd cloud-init de data in het cloud-config-bestand uit en past de configuratie aan de hand van dit bestand naar jouw wensen aan. Zo kun je bijvoorbeeld gebruikers aanmaken, wachtwoorden instellen, SSH-keys toevoegen, repositories toevoegen, packages installeren en nog veel meer.

In deze handleiding laten we zien hoe je een cloud-config-bestand aanmaakt en gebruikt bij het bestellen van een VPS. Meer algemene informatie over cloud-init en cloud-config vind je in dit artikel.


Een cloud-config-bestand maken

 

De inrichting van een cloud-config-bestand spreekt redelijk voor zich als je een voorbeeld hebt. In de onderstaande stappen leggen we daarom de nadruk op voorbeelden van verschillende use cases. Cloud-init ondersteunt meerdere formaten, maar voor deze handleiding maken wij gebruik van het YAML-formaat.

  • We raden aan minimaal één gebruiker en een SSH-key te configureren in je cloud-config-bestand en geen gevoelige informatie in je cloud-config-bestand te plaatsen.
     
  • Alle opties in dit onderdeel zijn optioneel en het is niet noodzakelijk ze allemaal te gebruiken. Stel je bijvoorbeeld geen groepen in in je cloud-config-bestand? Dan worden alleen de standaard systeemgroepen en usergroepen aangemaakt.

Stap 1

Start een teksteditor, zoals Notepad, Notepad ++, Texteditor, of Gedit.


 

Stap 2

De eerste regel van een cloud-config-bestand moet altijd als dusdanig aangekondigd worden, zodat cloud-init het kan herkennen als een cloud-config-bestand. Dit doe je door het bestand te openen met de regel:

#cloud-config

    Vervolgens voeg je aan het bestand de opties toe die je tijdens de installatie van je VPS wil aanpassen. In deze stap laten we dit in de volgende onderdelen zien:

    Aan het eind van dit onderdeel laten we zien hoe deze opties samengevoegd er uit zien in je cloud-config-bestand.

    Groepen aanmaken

    #cloud-config
    groups:
      - Ubuntu: [root, sys]
      - cloud-users
    Toelichting groepen aanmaken

    De syntax voor groepen aanmaken is:

    groups:
      # groep met gebruikers
      - groepnaam1: [gebruiker1, gebruiker2, gebruiker3]
      # lege groep
      - groepnaam2
    

    Met de bovenstaande code worden twee groepen aangemaakt: groepnaam1 en groepnaam2.

    • Groepnaam1 bevat drie gebruikers.
    • Groepnaam2 is leeg.

    Tijdens het installatieproces van je besturingssysteem worden automatisch systeemgroepen en gebruikers aangemaakt. Je hoeft deze niet apart aan te maken en deze opties dienen dan ook vooral om aanvullende groepen aan te maken.

    Gebruikers aanmaken

    In het voorbeeld hieronder laten we enkele opties zien die je kunt gebruiken bij het aanmaken van een user. In de toelichting laten we alle beschikbare opties. Je bent vrij om te kiezen welke van de beschikbare opties je gebruikt.

    #cloud-config
    users:
      - name: transip
        groups: transip
        ssh_authorized_keys: 
          - ssh-rsa AAAAB3NzaC1yc2EAn64SJAF8cNUkV40EiUrsXJpu+MNtK2IXs9NDitR5V17cDZtqN+W3+8w== transip@voorbeeld.nl
          - ssh-rsa AAAAB3NzaC1ycMNtK2IXs9NDi64SJAF8cNUkV40EiUrsXJpu+MNtK2IXs17cDZtIXs17+8w== transip@voorbeeld.nl
        sudo: ['ALL=(ALL) NOPASSWD:ALL']
        shell: /bin/bash
    
    Toelichting gebruikers aanmaken

    Bij het aanmaken van gebruikers geef je altijd eerst de naam op en daarna de gewenste opties, volgens de volgende syntax:

    #cloud-config
    users:
    - name: gebruiker1
      optie1: ...
      optie2: ...
    - name: gebruiker2
      optie1: ...
      optie2: ...
    
    • name: de gebruikersnaam
       
    • gecos: aanvullende gebruikersinformatie, bijvoorbeeld de volledige naam A. Non
       
    • primary_group: de primaire groep van de gebruiker. Standaard wordt de primaire groep automatisch vernoemd naar de gebruiker.
       
    • groups: aanvullende groepen waar de gebruiker in wordt opgenomen. Standaard worden nieuwe gebruikers niet aan aanvullende groepen toegevoegd.
       
    • selinux_user: de SELinux gebruiker voor de user login. De standaard SELinux gebruiker wordt gebruikt als deze optie niet wordt opgegeven.
       
    • expiredate: de datum (YYYY-MM-DD) waarop het account verloopt.
       
    • ssh_import_id: de SSH ID die geïmporteerd wordt van LaunchPad.
       
    • ssh_authorized_keys: een lijst SSH-keys die aan het authorized_keys-bestand van de gebruiker worden toegevoegd.
       
    • ssh_redirect_user: met de waarde true blokkeer je toegang via SSH-keys (default: false).
       
    • lock_passwd: met de waarde false blokkeer je (SSH) login met een wachtwoord (default: true).
       
    • passwd: de hash van het wachtwoord van de gebruiker. Je kunt een wachtwoord hash genereren met het commando:
      mkpasswd --method=SHA-512 --rounds=4096
      Let wel dat cloud-init om veiligheidsredenen afraad om het wachtwoord van de gebruiker op te geven in de cloud-init file, zelfs als die gehashed is. Het is veiliger om enkel een SSH-key op te geven.
       
    • inactive: met de waarde true wordt het account als inactief account aangemaakt (default: false).
       
    • no_create_home: met de waarde true wordt de gebruiker aangemaakt zonder home directory in de /home/ folder (default: false).
       
    • no_user_group: met de waarde true wordt de gebruiker aangemaakt zonder groep vernoemd naar de gebruiker (default: false).
       
    • no_log_init: Met de waarde true worden de login databases (i.e. de log files) voor de gebruiker niet geïnitializeerd (default: false).
       
    • sudo: stel de sudo-rechten van de gebruiker in (default: none). Beschikbare opties zijn:
      • Volledige sudo toegang:
        sudo: ALL=(ALL) NOPASSWD:ALL
         
      • Diverse sudo opties:
        sudo:
          - ALL=(ALL) NOPASSWD:/bin/mysql
          - ALL=(ALL) ALL
         
      • Sudo toegang uitschakelen voor de gebruiker:
        sudo: false
         
    • system: maak de gebruiker aan als systeem user met de waarde true (default: false).
       
    • shell: de login shell voor de aangemaakte gebruiker (default: sh shell).

     

    Default user

    Geef je geen gebruikers op, dan wordt automatisch een gebruiker aangemaakt in de meeste besturingssystemen. Zo krijg je in Ubuntu een gebruiker genaamd 'ubuntu' met de legacy permissies (sudo zonder wachtwoord, locked user, etc).

    Wil je deze 'ubuntu' gebruiker naast andere gebruikersaccounts? Deze maak je aan door users: te laten beginnen met -default, oftewel:

    users:
      - default
      - name: gebruiker1
        optie1: ..
        optie2: ..
      - name: gebruiker2
        optie1: ..
        optie2: ..
    

    Root-wachtwoord aanpassen

    Het root-wachtwoord kun je aanpassen met de volgende syntax:

    #cloud-config
    chpasswd:
      list: |
        root:jewachtwoord

    Het is eveneens mogelijk om zo wachtwoorden van andere gebruikers, bijvoorbeeld:

    #cloud-config
    chpasswd:
      list: |
        root:jewachtwoord
        user1:nogeenwachtwoord
    

    Cloud-init raad om veiligheidsredenen af om wachtwoorden aan te passen via cloud-config-bestanden.

    Het kan afhankelijk van je use case wel handig zijn om met chgpasswd een initieel root-wachtwoord te configureren tijdens je installatie. We raden aan het root-wachtwoord dan na de installatie van je server wel weer aan te passen.

    Bestanden aanpassen

    Er zijn twee manieren om bestanden aan te passen met behulp van een cloud-config-bestand:

    • Je kunt een bestand geheel overschrijven via write_files en daarmee ook de eigenaar of rechten aanpassen.
    • Met runcmd voer je een of meerdere commando's uit, bijvoorbeeld 'sed'-commando's om specifieke regels aan te passen.

    Dit eerste is handig als je een niet al te groot bestand aanpast, en het tweede voor specifieke wijzigingen. Om je cloud-config-bestand overzichtelijk te houden is het doorgaans niet wenselijk om grote bestanden aan te passen met write_files.

    write_files

    Hieronder volgt een voorbeeld hoe je de configuratie van /etc/ssh/sshd_config aan kunt passen. Voor de leesbaarheid van dit artikel zijn de comments weggelaten uit het bestand.

    #cloud-config
    write_files:
    - path: /etc/ssh/sshd_config
      permissions: 0600
      owner: root:root
      content: |
           Port 12345
    
           HostKey /etc/ssh/ssh_host_rsa_key
           HostKey /etc/ssh/ssh_host_ecdsa_key
           HostKey /etc/ssh/ssh_host_ed25519_key
    
           SyslogFacility AUTHPRIV
    
           PermitRootLogin No
    
           AuthorizedKeysFile      .ssh/authorized_keys
    
           PasswordAuthentication no
    
           ChallengeResponseAuthentication no
    
           GSSAPIAuthentication yes
           GSSAPICleanupCredentials no
    
           UsePAM yes
    
           X11Forwarding yes
    
           AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
           AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
           AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
           AcceptEnv XMODIFIERS
    
           Subsystem       sftp    /usr/libexec/openssh/sftp-server
    
    Toelichting write_files

    Met write_files overschrijf je een bestand in zijn geheel, of maak je deze aan. De syntax zoals te zien in bovenstaand voorbeeld is:

    #cloud-config
    write_files:
      - path: /folder/subfolder/filename
        permissions: XXXX
        owner: user:group
        content: |
             line 1 ...
             line 2 ...
      - path: /folder1/subfolder1/filename1
        content: |
             line 1 ...
             line 2 ...
    • Achter path geef je aan om welk bestand in welke folder het gaat.
    • Permissions is optioneel en kun je gebruiken om chmod-rechten aan te passen.
    • Owner is optioneel en kun je gebruiken om de eigenaar van een bestand aan te passen.
    • Het pipe | karakter achter content: geeft aan dat er een lijst volgt. In dit geval is dit een lijst met alle regels die in het bestand moeten worden weggeschreven.

    First boot commando's uitvoeren met runcmd

    Runcmd is een krachtige tool om first boot commando's uit te uit te voeren (i.e. deze worden enkel de eerste keer ooit dat je VPS start uitgevoerd). In het voorbeeld hieronder laten we zien hoe je met een sed-commando de inhoud van een bestand aanpast (hier de SSH-poort in de ssh-configuratie), maar je kunt runcmd gebruiken voor ieder commando.

    #cloud-config
    runcmd: 
      - sed -i "s/#Port 22/Port 12345/" /etc/ssh/sshd_config
    Syntax runcmd
    • Runcmd gebruik je door eerst runcmd: aan te spreken en daarna met een streepje op een nieuwe regel het commando in te leiden.
       
    • Wil je meerdere commando's uitvoeren met runcmd, dan plaats je ieder commando op een nieuwe regel.

     

    #cloud-config
    runcmd:
      - commando 1
      - commando 2

    Packages installeren

    Met een cloud-config-bestand kun je zeer eenvoudig specifieke packages mee-installeren tijdens je installatie. Hiervoor gebruik je de syntax:

    #cloud-config
    packages:
     - packagenaam1
     - packagenaam2
     - etc
    

    Automatisch verwijderen na installatie

    We raden aan om geen gevoelige informatie in de config te zetten. Je cloud-config-data is namelijk altijd bereikbaar vanaf je VPS via http://pxe.frontend.transip.nl/cloudinit/user-data. Dit los je op door onderstaande code toe te voegen; hiermee wordt je cloud-config-data na de installatie verwijdert van het bovenstaande adres.

    phone_home:
      url: http://pxe.frontend.transip.nl/cloudinit/post-install 
      post: [] 
      tries: 5

    Alternatief kun je het IP-adres 37.97.254.100 blokkeren in je firewall.

    Alles samenvoegen

    Hierboven heb je een hoop opties gezien die je in een cloud-config-bestand kunt gebruiken. Als je ze allemaal samenvoegd, ziet je bestand er als volgt uit:

    #cloud-config
    groups:
      - Ubuntu: [root, sys]
      - cloud-users
    users:
      - name: transip
        groups: transip
        ssh_authorized_keys: 
          - ssh-rsa AAAAB3NzaC1yc2EAn64SJAF8cNUkV40EiUrsXJpu+MNtK2IXs9NDitR5V17cDZtqN+W3+8w== transip@voorbeeld.nl
          - ssh-rsa AAAAB3NzaC1ycMNtK2IXs9NDi64SJAF8cNUkV40EiUrsXJpu+MNtK2IXs17cDZtIXs17+8w== transip@voorbeeld.nl
        sudo: ['ALL=(ALL) NOPASSWD:ALL']
        shell: /bin/bash
    chpasswd:
      list: |
        root:jewachtwoord
    write_files:
    - path: /etc/ssh/sshd_config
      permissions: 0600
      owner: root:root
      content: |
        Port 12345
    
        HostKey /etc/ssh/ssh_host_rsa_key
        HostKey /etc/ssh/ssh_host_ecdsa_key
        HostKey /etc/ssh/ssh_host_ed25519_key
    
        SyslogFacility AUTHPRIV
    
        PermitRootLogin No
    
        AuthorizedKeysFile      .ssh/authorized_keys
    
        PasswordAuthentication no
    
        ChallengeResponseAuthentication no
    
        GSSAPIAuthentication yes
        GSSAPICleanupCredentials no
    
        UsePAM yes
    
        X11Forwarding yes
    
        AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
        AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
        AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
        AcceptEnv XMODIFIERS
    
        Subsystem       sftp    /usr/libexec/openssh/sftp-server
    runcmd: 
      - sed -i "s/#Port 22/Port 12345/" /etc/ssh/sshd_config
    packages:
     - packagenaam1
     - packagenaam2
    phone_home:
      url: http://pxe.frontend.transip.nl/cloudinit/post-install
      post: []
      tries: 5

     

    Stap 3

    Sla tot slot je cloud-config-bestand op, bijvoorbeeld met de naam cloud-config.yaml. Je kunt er nu gebruik van maken, bijvoorbeeld via onze API.


    Debian IPv6-resolvers

     

    Debian stelt in tegenstelling tot bijvoorbeeld Ubuntu geen IPv6-resolvers in. Onze SandboxVPS'en maken exclusief gebruik van IPv6 en het is dan ook belangrijk om in ieder geval daarbij de IPv6-resolvers toe te voegen aan je cloud-config bestand. Dit kun je als volgt doen:

    /bin/sh -c'echo "bmV0d29yazoge2NvbmZpZzogZGlzYWJsZWR9Cg==" | base64 -d > /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg'/bin/sh -c'sed -i "s/inet/inet6/g" /etc/network/interfaces.d/50-cloud-init'/bin/sh -c'sed -i "s/dhcp/auto/g" /etc/network/interfaces.d/50-cloud-init'/bin/sh -c'echo "  dns-nameserver 2a01:7c8:7000:195::8:195:8" >> /etc/network/interfaces.d/50-cloud-init'/bin/sh -c'echo "  dns-nameserver 2a01:7c8:7000:195::135:195:135" >> /etc/network/interfaces.d/50-cloud-init'/bin/sh -c'ifdown ens3; ifup ens3'

    Je cloud-config-bestand gebruiken bij het bestellen van een VPS

     

    Stap 1

    Tijdens de bestelling van een VPS krijg je na het kiezen van de specificaties en besturingssysteem als je in je TransIP-account bent ingelogd een van de volgende twee opties voor installatie via SSH-keys:

    • Je hebt nog niet eerder een SSH-key toegevoegd aan je account.
      fast installs nieuwe key
    • Je hebt al eerder een SSH-key toegevoegd aan je account.
      fast installs ssh andere methode

    Ben je niet ingelogd, dan krijg je de optie voor een eenmalig wachtwoord te zien:

    fast installs 1time password andere methode

    Klik in alle gevallen op 'Kies een andere installatiemethode'.


     

    Stap 2

    Je krijgt nu de keuze om een installatiemethode te kiezen, zoals in het screenshot hieronder. Kies hier voor 'Installeren via cloud-config user data'.

    fast installs kies methode cloud config


     

    Stap 3

    Je krijgt nu het scherm 'Installeren via cloud-config user data' te zien. Kopieer en plak de inhoud van je cloud-config-bestand, zoals in het screenshot hieronder.

    cloud config fast installs

    Je cloud-config-data wordt nu toegepast. Je krijgt een bevestiging van je bestelling per e-mail en in de uiteindelijke levermail zie je, indien je voor SSH of een tijdelijk wachtwoord koos, respectivelijk je gebruikersnaam en een tijdelijk wachtwoord terug.


     

    Daarmee zijn we aan het eind van dit artikel gekomen. Ben je op zoek naar nog meer opties zoals het toevoegen van repositories? Neem dan een kijkje in de documentatie van cloud-init.

    Mocht je aan de hand van dit artikel nog vragen hebben, aarzel dan niet om onze supportafdeling te benaderen. Je kunt hen bereiken via de knop 'Neem contact op' onderaan deze pagina.

    Wil je dit artikel met andere gebruikers bespreken? Laat dan vooral een bericht achter onder 'Reacties'.

    Heb je ook een goed idee?

    Stuur jouw idee in! Met genoeg stemmen komt jouw idee op onze wishlist!

    Heeft dit artikel je geholpen?

    Maak een account aan of log in om een beoordeling achter te laten.

    Reacties

    Maak een account aan of log in om een reactie te plaatsen.

    Kom je er niet uit?

    Ontvang persoonlijke hulp van onze supporters

    Neem contact op