{"id":3359,"date":"2023-03-13T07:00:00","date_gmt":"2023-03-13T06:00:00","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=3359"},"modified":"2023-04-10T22:01:42","modified_gmt":"2023-04-10T20:01:42","slug":"rhel-system-roles-sshd","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/rhel-system-roles-sshd\/","title":{"rendered":"RHEL System Roles: sshd"},"content":{"rendered":"\n<p>In Teil 4 meiner losen Reihe \u00fcber die <a href=\"https:\/\/access.redhat.com\/articles\/3050101\">RHEL System Roles<\/a> stelle ich die Ansible-Rolle <em>sshd<\/em> vor. Diese dient der Konfiguration des OpenSSH-Servers, einem der wichtigsten Dienste in Linux- und UNIX-Systemen.<\/p>\n\n\n\n<p>Wer die ersten Teile dieser Reihe gelesen hat, ist inzwischen mit der grunds\u00e4tzlichen Anwendung dieser Ansible-Rollen vertraut. Die Rolle <em>sshd<\/em> bildet hier keine Ausnahme. Wendet man die Rolle ohne weitere Konfiguration auf Ziel-Systeme an, konfiguriert sie den OpenSSH-Server entsprechend der Standard-Konfiguration des jeweiligen Betriebssystems. Es werden alle Optionen der sshd_config(5) unterst\u00fctzt.<\/p>\n\n\n\n<p><strong>Ein Wort der Warnung:<\/strong> Mit dieser Rolle konfiguriert ihr den SSH-Dienst der Zielsysteme. Wenn dabei ein Fehler passiert, k\u00f6nnt ihr euch und euren Ansible-Controller aussperren und verliert ggf. den Zugriff auf die Systeme. Behaltet dies bitte im Hinterkopf und sorgt ggf. f\u00fcr alternative Zug\u00e4nge, wie z.B. \u00fcber eine lokale Konsole.<\/p>\n\n\n\n<p>Bei der Konfiguration meiner Server ist mir pers\u00f6nlich wichtig, dass<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>der Benutzer root sich nur mittels SSH-Public-Key-Verfahren anmelden kann,<\/li>\n\n\n\n<li>die Public-Key-Authentifizierung aktiviert ist,<\/li>\n\n\n\n<li>die Passwort-Authentifizierung deaktiviert ist und<\/li>\n\n\n\n<li>in der Datei <code>.ssh\/authorized_keys<\/code> des jeweiligen Benutzers nach dem SSH-Public-Key  gesucht wird.<\/li>\n<\/ul>\n\n\n\n<p>Dar\u00fcber hinaus m\u00f6chte ich alle Git-bezogenen Umgebungsvariablen (<code>GIT_*<\/code>) nutzen. Die \u00fcbrigen Einstellungen m\u00f6chte ich auf den Standard-Werten des jeweiligen Betriebssystems belassen.<\/p>\n\n\n\n<p>Im Folgenden beschreibe ich, wie sich diese mit der RHEL System Role <em>sshd<\/em> umsetzen l\u00e4sst.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Voraussetzungen<\/h2>\n\n\n\n<p>Wie bei allen RHEL System Roles m\u00fcssen auch hier die Pakete <code>ansible-core<\/code> und <code>rhel-system-roles<\/code> inkl. ihrer Abh\u00e4ngigkeiten auf dem Ansible-Controller installiert sein. Der Ansible-Controller muss die Ziel-Hosts \u00fcber SSH erreichen k\u00f6nnen und \u00fcber einen Benutzer mit sudo-Berechtigungen verf\u00fcgen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Das Playbook<\/h2>\n\n\n\n<p>Es werden bereits zwei Beispiel-Playbooks mitgeliefert, die sich im Pfad <code>\/usr\/share\/doc\/rhel-system-roles\/sshd\/<\/code> befinden. Diese hei\u00dfen:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>example-accept-env-playbook.yml<\/code> und<\/li>\n\n\n\n<li><code>example-root-login-playbook.yml<\/code>.<\/li>\n<\/ul>\n\n\n\n<p>Aus diesen beiden Beispieldateien habe ich das folgende Playbook f\u00fcr meine Labor-Umgebung erstellt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>---\n- hosts: all\n  tasks:\n  - name: Configure sshd to accept some useful environment variables\n    include_role:\n      name: rhel-system-roles.sshd\n    vars:\n      sshd:\n        PermitRootLogin: without-password\n        PasswordAuthentication: no\n        PubkeyAuthentication: yes\n        AuthorizedKeysFile: .ssh\/authorized_keys\n        # there are some handy environment variables to accept\n        AcceptEnv:\n          LANG\n          LS_COLORS\n          EDITOR\n          GIT_*<\/code><\/pre>\n\n\n\n<p>Wie zu sehen ist, habe ich mich entschieden, noch ein paar weitere Umgebungsvariablen zu konfigurieren. Diese habe ich aus dem Beispiel <code>example-accept-env-playbook.yml<\/code> \u00fcbernommen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Testlauf in Labor-Umgebung<\/h2>\n\n\n\n<p>Auch dieses Playbook habe ich in meiner Labor-Umgebung, bestehend aus einem RHEL8-Ansible-Controller und jeweils einem rhel{7..9}-Client laufen lassen. Mit den Optionen <code>-C -D<\/code> ist die Ausgabe 707 Zeilen lang, weswegen der folgende Code-Block nur den Aufruf und das Ergebnis zeigt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;root@ansible-ctrl ansible]# ansible-playbook sshd_config.yml -C -D\n\nPLAY &#91;all] ************************************************************************************************************\n&#91;...]\nPLAY RECAP *******************************************************************************************************************************\nansible-pctrl              : ok=20   changed=2    unreachable=0    failed=0    skipped=13   rescued=0    ignored=0   \nrhel7                      : ok=20   changed=2    unreachable=0    failed=0    skipped=13   rescued=0    ignored=0   \nrhel8                      : ok=20   changed=2    unreachable=0    failed=0    skipped=13   rescued=0    ignored=0   \nrhel9                      : ok=21   changed=2    unreachable=0    failed=0    skipped=12   rescued=0    ignored=0<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Zusammenfassung<\/h2>\n\n\n\n<p>Die RHEL System Role <em>sshd<\/em> wurde kurz vorgestellt und genutzt, um meine bevorzugten Einstellungen f\u00fcr den OpenSSH-Dienst in meiner Labor-Umgebung zu konfigurieren. Alle Optionen in der sshd_config(5), welche ich nicht explizit \u00fcber die Ansible-Rolle konfiguriert habe, werden auf die Standardwerte des Betriebssystems eingestellt. Es ist also ggf. Vorsicht geboten, wenn Systeme mit bestehender Konfiguration bearbeitet werden.<\/p>\n\n\n\n<p>Selbstverst\u00e4ndlich sch\u00fctzt ein einmaliger Playbook-Lauf nicht davor, dass ein Benutzer mit root-Berechtigungen lokale \u00c4nderungen an der Datei <code>\/etc\/ssh\/sshd_config<\/code> vornimmt. Dies mag vor\u00fcbergehend f\u00fcr Tests auch so gewollt sein. Damit die Konfiguration nicht dauerhaft vom SOLL-Zustand abweicht, kann man das Playbook regelm\u00e4\u00dfig durch cron(8) ausf\u00fchren lassen, um evtl. Abweichungen zu korrigieren.<\/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-firewall\/\">RHEL System Roles: firewall<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>In Teil 4 meiner losen Reihe \u00fcber die RHEL System Roles stelle ich die Ansible-Rolle sshd vor. Diese dient der Konfiguration des OpenSSH-Servers, einem der wichtigsten Dienste in Linux- und UNIX-Systemen. Wer die ersten Teile dieser Reihe gelesen hat, ist inzwischen mit der grunds\u00e4tzlichen Anwendung dieser Ansible-Rollen vertraut. Die Rolle sshd bildet hier keine Ausnahme.<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/rhel-system-roles-sshd\/\">[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,430,305,754,631],"class_list":["post-3359","post","type-post","status-publish","format-standard","hentry","category-ansible","tag-ansible","tag-osbn","tag-planet","tag-rhel-system-roles","tag-sshd_config"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3359","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=3359"}],"version-history":[{"count":4,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3359\/revisions"}],"predecessor-version":[{"id":3462,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3359\/revisions\/3462"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=3359"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=3359"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=3359"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}