{"id":3700,"date":"2023-12-04T07:00:00","date_gmt":"2023-12-04T06:00:00","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=3700"},"modified":"2023-12-01T21:30:27","modified_gmt":"2023-12-01T20:30:27","slug":"rhel-system-roles-nbde_client","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/rhel-system-roles-nbde_client\/","title":{"rendered":"RHEL System Roles: nbde_client"},"content":{"rendered":"\n<p>In diesem Artikel stelle ich euch die <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/vorstellung-der-red-hat-enterprise-linux-rhel-system-roles\/\">RHEL System Role<\/a> <code>nbde_client<\/code> vor, mit welcher sich Hosts f\u00fcr <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/network-bound-disk-encryption-im-ueberblick\/\">Network Bound Disk Encryption<\/a> (NBDE) installieren lassen. Er ist Bestandteil einer losen Serie, in der ich eine Reihe von System Roles vorstelle, mit denen h\u00e4ufig anfallende Aufgaben in der Systemadministration erledigt werden k\u00f6nnen.<\/p>\n\n\n\n<p>Wer sich zuerst \u00fcber die genannten Begriffe informieren m\u00f6chte, lese:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/network-bound-disk-encryption-im-ueberblick\/\">Network Bound Disk Encryption im \u00dcberblick<\/a> und<\/li>\n\n\n\n<li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/vorstellung-der-red-hat-enterprise-linux-rhel-system-roles\/\">Vorstellung der Red Hat Enterprise Linux (RHEL) System Roles<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Umgebung<\/h2>\n\n\n\n<p>F\u00fcr das folgende Beispiel verwende ich eine Umgebung, bestehend aus:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Einem Ansible-Controller (RHEL 9) mit den Paketen\n<ul class=\"wp-block-list\">\n<li><code>ansible-core<\/code><\/li>\n\n\n\n<li><code>rhel-system-roles<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Jeweils einem RHEL 8 und RHEL 9 Server mit Minimalinstallation und einem <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/network-bound-disk-encryption-im-ueberblick\/\" data-type=\"post\" data-id=\"2974\">LUKS<\/a>-Ger\u00e4t (<code>\/dev\/sdc<\/code> in den Beispielen in diesem Text)<\/li>\n<\/ul>\n\n\n\n<p>Die Installation von RHEL sowie der genannten Pakete sind nicht Bestandteil dieses Artikels. Wer hierzu einen Einstieg sucht, findet entsprechende Dokumentation unter:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/access.redhat.com\/documentation\/en-us\/red_hat_enterprise_linux\/8\/html\/performing_a_standard_rhel_8_installation\">Performing a standard RHEL 8 installation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/access.redhat.com\/documentation\/en-us\/red_hat_enterprise_linux\/9\/html\/performing_a_standard_rhel_9_installation\">Performing a standard RHEL 9 installation<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/access.redhat.com\/documentation\/en-us\/red_hat_enterprise_linux\/9\/html\/managing_software_with_the_dnf_tool\/assembly_installing-rhel-9-content_managing-software-with-the-dnf-tool#proc_installing-packages_assembly_installing-rhel-9-content\">Installing packages using DNF<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/datentraeger-unter-linux-mit-cryptsetup-luks-verschluesseln\/\" data-type=\"post\" data-id=\"2632\">Datentr\u00e4ger unter Linux mit cryptsetup (LUKS) verschl\u00fcsseln<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Die Rolle<\/h2>\n\n\n\n<p>Durch die Installation des Pakets <code>rhel-system-roles<\/code> existiert diese Rolle bereits auf meinem System und muss nur noch konfiguriert werden. Die Rolle selbst findet man im Pfad <code>\/usr\/share\/ansible\/roles\/rhel-system-roles.nbde_client\/<\/code> und die Dokumentation in <code>\/usr\/share\/doc\/rhel-system-roles\/nbde_client\/README.md<\/code>. Letztere enth\u00e4lt verschiedene Beispiele f\u00fcr h\u00e4ufige Anwendungsf\u00e4lle.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Anwendungsfall<\/h2>\n\n\n\n<p>In meinem Labor betreibe ich zwei NBDE-Server (TANG-Server) <code>rhel-hetz-tang1<\/code> und <code>rhel-hetz-tang2<\/code> sowie zwei NBDE-Clients (Clevis-Clients) <code>rhel-hetz-clevis1<\/code> und <code>rhel-hetz-clevis2<\/code>. Die beiden NBDE-Clients besitzen jeweils ein LUKS-Device <code>\/dev\/sdc<\/code>, welches aktuell durch eine LUKS-Passphrase gesichert ist.<\/p>\n\n\n\n<p>Zuk\u00fcnftig sollen diese LUKS-Devices durch die Kommunikation mit einem NBDE-Server entschl\u00fcsselt werden. Die LUKS-Passphrase soll entfernt werden.<\/p>\n\n\n\n<p>Damit wird zuk\u00fcnftig ein Neustart der Clients aus der Ferne erm\u00f6glicht. Gleichzeitig bleibt das verschl\u00fcsselte Ger\u00e4t bei Diebstahl vor unbefugtem Zugriff gesch\u00fctzt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Das Playbook<\/h2>\n\n\n\n<p><em>Hinweis:<\/em> Das folgende Playbook ist nicht idempotent. Um dies zu \u00e4ndern, ist dem ersten Task eine <a href=\"https:\/\/docs.ansible.com\/ansible\/latest\/playbook_guide\/playbooks_conditionals.html\" data-type=\"link\" data-id=\"https:\/\/docs.ansible.com\/ansible\/latest\/playbook_guide\/playbooks_conditionals.html\">Bedingung<\/a> hinzuzuf\u00fcgen, damit dieser nur dann ausgef\u00fchrt werden, wenn die Bedingung erf\u00fcllt ist.<\/p>\n\n\n\n<p>F\u00fcr dieses Beispiel ist die fehlende Idempotenz des Playbooks jedoch kein Problem, da <code>grubby<\/code> das Argument nur dann hinzuf\u00fcgt, wenn es nicht bereits vorhanden ist.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>---\n- hosts: clevis\n  tasks:\n  - name: Configure ip address for interface during early boot\n    ansible.builtin.command:\n      cmd: grubby --update-kernel=ALL --args='GRUB_CMDLINE_LINUX_DEFAULT=\"net.ifnames=0 biosdevname=0 ip={{ ansible_default_ipv4.address }}::{{ ansible_default_ipv4.gateway }}:{{ ansible_default_ipv4.netmask }}::{{ ansible_default_ipv4.alias }}:none\"'\n\n  - name: Enroll Clevis clients\n    include_role:\n      name: rhel-system-roles.nbde_client\n    vars:\n      nbde_client_bindings:\n        - device: \/dev\/sdc\n          encryption_password: \"{{ luks_password }}\"\n          password_temporary: true\n          slot: 2\n          servers:\n            - http:\/\/rhel-hetz-tang1.example.com\n            - http:\/\/rhel-hetz-tang2.example.com<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Der erste Task stellt sicher, dass das Netzwerkinterface aktiviert und mit einer IP-Adresse konfiguriert wird; dies ist notwendig, um den Tang-Server kontaktieren zu k\u00f6nnen, da in dem genutzten Netzwerk-Segment kein DHCP verf\u00fcgbar ist; Solltet ihr ein Netzwerk-Segment nutzen, in dem DHCP zur Verf\u00fcgung steht, kann der erste Task entfallen<\/li>\n\n\n\n<li>Um das LUKS-Device f\u00fcr NBDE zu konfigurieren wird die LUKS-Passphrase ben\u00f6tigt, welche in der Variablen <code>luks_password<\/code> steckt<\/li>\n\n\n\n<li>Ich empfehle die Variable <code>luks_password<\/code> mit <a href=\"https:\/\/docs.ansible.com\/ansible\/latest\/cli\/ansible-vault.html\" data-type=\"link\" data-id=\"https:\/\/docs.ansible.com\/ansible\/latest\/cli\/ansible-vault.html\">ansible-vault<\/a> vor neugierigen Blicken zu sch\u00fctzen<\/li>\n\n\n\n<li>Durch <code>password_temporary: true<\/code> wird die LUKS-Passphrase aus dem jeweiligen Key-Slot gel\u00f6scht, nachdem das LUKS-Device f\u00fcr NBDE konfiguriert wurde<\/li>\n<\/ul>\n\n\n\n<p><strong>Achtung<\/strong> (I know, the warning comes after the spell): Wenn zur Laufzeit ein Fehler auftritt und der Key-Slot mit der LUKS-Passphrase bereits gel\u00f6scht wurde, die NBDE-Konfiguration jedoch nicht erfolgreich war, verliert man Zugriff auf das LUKS-Device. In meiner Labor-Umgebung bin ich das Risiko eingegangen. In der echten Welt, m\u00fcsst ihr selbst entscheiden, ob ihr mehr Vorsicht walten lasst.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Zur Erstellung des Playbooks habe ich die Informationen aus <code>\/usr\/share\/doc\/rhel-system-roles\/nbde_client\/README.md<\/code> und dem Kapitel <a href=\"https:\/\/access.redhat.com\/documentation\/en-us\/red_hat_enterprise_linux\/8\/html\/security_hardening\/configuring-automated-unlocking-of-encrypted-volumes-using-policy-based-decryption_security-hardening#using-the-nbde_client-system-role-for-setting-up-multiple-clevis-clients_configuring-automated-unlocking-of-encrypted-volumes-using-policy-based-decryption\" data-type=\"link\" data-id=\"https:\/\/access.redhat.com\/documentation\/en-us\/red_hat_enterprise_linux\/8\/html\/security_hardening\/configuring-automated-unlocking-of-encrypted-volumes-using-policy-based-decryption_security-hardening#using-the-nbde_client-system-role-for-setting-up-multiple-clevis-clients_configuring-automated-unlocking-of-encrypted-volumes-using-policy-based-decryption\">12.18.\u00a0Using the\u00a0<code>nbde_client<\/code>\u00a0System Role for setting up multiple Clevis clients<\/a> genutzt. Bis ich festgestellt habe, dass ich auch noch den Task \u201eConfigure ip address for interface during early boot\u201c ben\u00f6tige, hat es ein wenig gedauert. Nun habe ich allerdings ein Playbook, dass ich zuk\u00fcnftig wiederverwenden kann.<\/p>\n\n\n\n<p>In der erstellten Konfiguration, k\u00f6nnen die LUKS-Devices nur entschl\u00fcsselt werden, wenn mindestens einer der beiden Tang-Server im Netzwerk erreichbar ist. Wird ein so gesicherter Server gestohlen und sind die Tang-Server nicht aus dem Internet erreichbar, bleiben die Daten in der verschl\u00fcsselten Partition wie gewohnt gesch\u00fctzt. Es ist jedoch m\u00f6glich den Server neuzustarten, ohne manuell die LUKS-Passphrase an der Konsole eingeben zu m\u00fcssen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quellen und weiterf\u00fchrende Links<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/access.redhat.com\/articles\/3050101\">Red Hat Enterprise Linux (RHEL) System Roles {en}<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/playbooks_reuse_roles.html#role-directory-structure\">Ansible Documentation: Role Directory Structure {en}<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/access.redhat.com\/downloads\/\">Red Hat Software and Download Center {en}<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.redhat.com\/de\/about\/value-of-subscription\">Die Vorteile einer Red Hat Subskription<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/rhel-system-roles-selinux\/\">RHEL System Roles: selinux<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/rhel-system-roles-timesync\/\">RHEL System Roles: timesync<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/rhel-system-roles-sshd\/\">RHEL System Roles: sshd<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/rhel-system-roles-firewall\/\">RHEL System Roles: firewall<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/rhel-system-roles-rhc\/\">RHEL System Roles: rhc<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.my-it-brain.de\/wordpress\/rhel-system-roles-nbde_server\/\" data-type=\"post\" data-id=\"3698\">RHEL System Roles: nbde_server<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Artikel stelle ich euch die RHEL System Role nbde_client vor, mit welcher sich Hosts f\u00fcr Network Bound Disk Encryption (NBDE) installieren lassen. Er ist Bestandteil einer losen Serie, in der ich eine Reihe von System Roles vorstelle, mit denen h\u00e4ufig anfallende Aufgaben in der Systemadministration erledigt werden k\u00f6nnen. Wer sich zuerst \u00fcber die<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/rhel-system-roles-nbde_client\/\">[Weiterlesen&#8230;]<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[532],"tags":[410,814,430,305,754],"class_list":["post-3700","post","type-post","status-publish","format-standard","hentry","category-ansible","tag-ansible","tag-nbde_client","tag-osbn","tag-planet","tag-rhel-system-roles"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3700","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=3700"}],"version-history":[{"count":9,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3700\/revisions"}],"predecessor-version":[{"id":3733,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3700\/revisions\/3733"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=3700"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=3700"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=3700"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}