class: center, middle ## Wie kommt ein Debian-Nutzer zu ## AlmaLinux?🤷 ### Hauke Goos-Habermann #### https://goos-habermann.de ##### TuxTage 2021 14.11.2021 --- ### Zum Ablauf - Ein paar Folien u.a. - Unterschiede zu Debian - Paketverwaltung mit yum/dnf - LAMP - Sicherheit - Demonstration auf einem AlmaLinux 8.5 - Viel Automatisierung - Erklärung z.B. an dahinterliegenden BASH-Skripten - **Fragen** im YouTube-Chat oder auf der TuxTage-Webseite oder hinterher im Jitsi-Raum PS Die Folien sind deshalb so ausführlich, damit Ihr sie auch **zum Nachschlagen** nutzen könnt. --- ### Über mich - Entwickler des
Softwareverteilungssystems m23
- Organisator der
Kieler Open Source und Linux Tage
- *"OpenSource-YouTuber/PeerTuber"* mit dem Kanal
"Nicht der Weisheit letzter Schluß"
- Wöchentlicher Livestream *"Jean und Hauke Show"* auf https://www.youtube.com/c/LinuxGuides -
Dienstleister zu m23, Linux und Freier Software
- Softwareentwicklung (PHP, BASH, C/C++, JS, Python und was sonst so gebraucht wird...) - Administration - Schulungen - Support - Beratung - quasi **alles**, *was mit Linux zu tun hat* - Ist unter Debian, Ubuntu und LinuxMint zuhause. - Aber hat auch Kundenprojekte mit **anderen Distributionen**. Aktuell z.B. mit AlmaLinux, da die darauf laufende Software eine RHEL- bzw. CentOS-Basis benötigt. --- ### Warum AlmaLinux OS? - Ersatz für den eingestellten RHEL-Fork CentOS (Alternative:
Rocky Linux
) - Entwicklung vorangetrieben durch CloudLinux (10 Jahre Erfahrung mit der Erstellung von RHEL-Forks) - Versprechen - Immer frei und immer OpenSource - Keine Lizenzeinschränkungen oder Einschränkung des Einsatzzwecks (siehe:
Die 4 Freiheiten von freier Software
) - Zu jedem RHEL wird es einen AlmaLinux OS Fork geben - Community wird bei allen wichtigen Entscheidungen mit einbezogen *("community-driven Linux operating system")* - Sicherheits- und Wartungsaktualisierungen bis 2029 - CloudLinux wird jährlich 1Mio US$ in die Entwicklung investieren .cls[ .copyright[Quelle
https://almalinux.org
] ] --- ### Installieren oder migrieren? AlmaLinux kann in einer virtuellen Maschine oder direkt auf Hardware mittels eines ISOs installiert werden. Alternativ kann ein vorhandenes CentOS 8 oder RockyLinux 8 auf AlmaLinux umgestellt werden. #### Neu installieren * ISO herunterladen von https://mirrors.almalinux.org/isos/x86_64/8.5.html * Wichtig für **VirtualBox**: Grafikcontroller: VMSVGA mit 32 MB nehmen. * Vom ISO booten und Paketquelle hinzufügen: https://repo.almalinux.org/almalinux/8/BaseOS/x86_64/os/ * Video:
AlmaLinux: Minimalen Server mit statischer IP aufsetzen
#### Vorhandenes RockyLinux 8 oder CentOS 8 auf AlmaLinux umstellen ```bash curl -O https://raw.githubusercontent.com/AlmaLinux/almalinux-deploy/master/almalinux-deploy.sh sudo bash almalinux-deploy.sh ``` --- ### Unterschiede zu Debian * Es gibt **kein Konfigurationssystem** wie *debconf* unter Debian. Konfigurationsdateien müssen per **Hand angepaßt** werden. * **Serverdienste** (wie z.B. nginx oder MariaDB) werden nicht automatisch nach der Installation der Pakete gestartet, sondern müssen **explizit gestartet** und/oder für das Mitstarten beim Booten **aktiviert werden**. * Anders als bei Debian, Ubuntu und Co. sind unter AlmaLinux **nicht automatisch alle Pakete installierbar**. Einige gehören zu **Modulen**, die explizit aktiviert werden müssen. Ein Modul umfaßt einen Satz von zusammengehörigen Paketen. * Ports (bis auf 22) werden standardmäßig durch die **interne Firewall** geblockt und müssen explizit geöffnet werden. * **SELinux** ist aktiv, sodaß ggf. der Zugriff auf Dateien, Ports etc. explizit gestattet werden muß. Konfigurationswerkzeuge: *restorecon, setsebool,* ... * Kein APT, sondern dnf/yum als **Paketmanager**: yum und dnf sind bei AlmaLinux 8.x identisch. yum ist tatsächlich sogar ein Symlink auf dnf. **Videotip:** Den ähnlichen Vortrag *"
Linux Web/Mail/Datenbank-Server: Installation, Konfiguration, Absicherung
"* – allerdings für Debian – gab es bei den TuxTagen 2020. --- ### Paketverwaltung mit yum/dnf * Pakete **suchen** apt-cache search mc ⇒ yum search mc * Welches *verfügbare* Paket enthält Datei/Verzeichnis? apt-file search /usr/bin/mc ⇒ dnf repoquery --file /usr/bin/mc * Paket **installieren** apt-get -y install mc ⇒ yum -y install mc * Paket**datei installieren** dpkg -i mc.deb ⇒ rpm -i mc.rpm * Installiertes Paket **erneut installieren** apt-get -y --reinstall install mc ⇒ yum -y reinstall mc * Installiertes Paket **entfernen** apt-get -y remove mc ⇒ yum -y remove mc --- ### Paketverwaltung mit yum/dnf * Nicht mehr benötigte Paket(e) **automatisch entfernen**, die ursprünglich als Abhängigkeit von jetzt deinstallierten Paketen mininstalliert wurden: apt-get -y autoremove ⇒ yum -y autoremove * **Aktualisieren** apt-get update && apt-get -y upgrade ⇒ yum -y update * **Paketinstallationsdateien** aus dem Zwischenspeicher **löschen** apt-get clean ⇒ yum clean packages * **Informationen** über installiertes Paket **abrufen** dpkg -s mc ⇒ rpm -qi mc ODER yum info mc * Alle **Dateien und Verzeichnisse** eines Paketes **auflisten** dpkg -L mc ⇒ yum repoquery -l mc --- ### Paketverwaltung mit yum/dnf * **Suche** nach Paketen, die eine **Datei enthalten** dpkg -S /usr/bin/mc ⇒ yum (what)provides /usr/bin/mc * **Installierte Pakete auflisten** dpkg --get-selections ⇒ yum list installed * **yum-Module auflisten** yum module list * **yum-Modul aktivieren**, um zusätzliche Pakete freizuschalten yum -y module enable idm:DL1 * **Paketquelle hinzufügen** (benötigt Paket yum-utils) yum-config-manager --add-repo=http://... --- ### Paketverwaltung mit yum/dnf * **Paketgruppen anzeigen** tasksel --list-tasks ⇒ yum group list * **Paketgruppe installieren** tasksel install xfce-desktop ⇒ yum groupinstall "Server mit GUI" --- ### Ein Projekt? Ein kleines Projekt! ![img20r](gfx/lamp.png) - Installation und Konfiguration - **L**inux - **A**pache - **M**ariaDB - **P**HP - **M**ailserver: Dovecot (imap/pop3) und Postfix (SMTP) - Mit Skripten - Sicherheit - Intrusion-Prevention-System: SSHGuard - SSL-Zertifikate: Let's Encrypt - Automatisierte Systemaktualisierungen - Zugriffsrechte: Mailkonten und WWW - Beispielseite bzw. Anwendung - Informationen über PHP und Module: phpinfo.php - phpMyAdmin --- ### Anmelden ![img20r](gfx/internet_cloud.png) Auf VM per SSH einloggen: ```bash ssh -o ServerAliveInterval=15 root@ttdemo.pc-kiel.de ``` Mit *"-o ServerAliveInterval=15"* wird der Server alle 15 Sekunden *"angepingt"*, damit die SSH-Verbindung nicht automatisch (wegen Nichtbenutzung) unterbrochen wird. --- ### Los geht's Skriptbibliothek herunterladen und laden: ```bash curl -O https://goos-habermann.de/commonInstallAL.inc . commonInstallAL.inc # Webadresse (FQDN), unter der die VM erreichbar ist export DT_INST_hostname='ttdemo.pc-kiel.de' # Liste mit Domains, für die der Mailserver zuständig ist (mehrere mit Komma und Leerzeichen trennen): export DT_INST_domain='ttdemo.pc-kiel.de' # Admin-eMail-Adresse setzen: export DT_INST_adminMail='ttdemo@pc-kiel.de' #Hostnamen und Domain setzen CI_setHostName # Grundlegende Serverprogramme installieren (mc, nano, wget, firewalld und screen) CI_installBasicTools ``` --- ### Server absichern und Ports öffnen ![img20r](gfx/holzschild.png) ```bash # SSHGuard (blockt IPs nach verdächtigen Zugriffen bzw. Angriffen) installieren: CI_instSSHGuard #Kontrolle mit: ps -A | grep sshgu # Tägliches Aktualisieren aktivieren: CI_enableAutoUpdate # Hinweis: Benötigt keine Aktivierung, da per cron gestartet. # Ports für HTTP + HTTPS + Mail in der Firewall öffnen CI_allowHTTPsMail #Kontrolle mit: firewall-cmd --list-services ``` --- ### Mail- und Webserver installieren ![img20r](gfx/uroesch-Air-Mail-Postage-Stamp.png) ```bash # Dovecot (imap/pop3) und Postfix (SMTP) installieren: CI_mailServerInstall # Testmail versenden yum -y install mailx echo 'Das geht :-)' | mailx -s 'Nur ein Test' -v hauke@goos-habermann.de # Apache und PHP installieren: CI_installApachePHP ``` **Hinweis:** Einige V-Server-Anbieter **blocken** ggf. die für **das Senden von Mails** benötigten Ports (25, 465 und/oder 587). Die Freischaltung der Ports kann z.B. auf Anfrage oder tief in den Konfigurationsmenüs verborgen sein. --- ### Webseite testen Im Browser aufrufen (wichtig noch kein HTTP**S**): http://ttdemo.pc-kiel.de/ ![img100](gfx/Apache2_AlmaLinux_Default_Page_It_works.png) --- ### MariaDB installieren MariaDB-Server installieren und starten: ```bash CI_installMariaDB ``` * Enter current password for root (enter for none): *Leerlassen + Enter* * Set root password? [Y/n]: *Y* * New password: *ganzGeheimesPassw0rt* * Re-enter new password: *ganzGeheimesPassw0rt* * Remove anonymous users? [Y/n]: *Y* * Disallow root login remotely? [Y/n]: *Y* * Remove test database and access to it? [Y/n]: *Y* * Reload privilege tables now? [Y/n]: *Y* Kontrolle mit: ```bash mysqladmin -u root -pganzGeheimesPassw0rt version ``` --- ### PHP-Infoseite Datei für die PHP-Infoseite anlegen: ```bash echo '' > /var/www/html/info.php ``` Im Browser abrufen: http://ttdemo.pc-kiel.de/info.php ![img80](gfx/phpinfo.png) --- ### PHP-Infoseite löschen ![img20r](gfx/achtung.png) Aus Sicherheitsgründen sollte die Seite wieder entfernt werden: ```bash rm -f /var/www/html/info.php ``` --- ### phpMyAdmin ```bash cd /var/www # phpMyAdmin herunterladen wget https://files.phpmyadmin.net/phpMyAdmin/5.1.1/phpMyAdmin-5.1.1-all-languages.zip # und entpacken unzip phpMyAdmin-5.1.1-all-languages.zip # Softwarearchiv löschen rm -f phpMyAdmin-5.1.1-all-languages.zip # phpMyAdmin-Verzeichnis umbenennen mv phpMyAdmin-5.1.1-all-languages phpMyAdmin # Zugriffsrechte für phpMyAdmin auf Apache-Benutzer und -Gruppe setzen: chown apache:apache -R phpMyAdmin/ ``` --- ### phpMyAdmin: Apache-Seitenkonfiguration Konfigurationsdatei schreiben: ```bash echo "
DocumentRoot "/var/www/phpMyAdmin" ServerName $DT_INST_hostname ServerSignature Off
AllowOverride All
" > /etc/httpd/conf.d/phpmyadmin.conf ``` Apache neustarten ```bash systemctl reload httpd ``` --- ### phpMyAdmin: Seite aufrufen Im Browser abrufen: http://ttdemo.pc-kiel.de/ ![img33l](gfx/phpMyAdmin.png) --- ### Let's Encrypt Einrichten und SSL-Zertifikat holen: ```bash CI_installLetsEncrypt # Ausgabe: #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #Would you be willing, once your first certificate is successfully issued, to #share your email address with the Electronic Frontier Foundation, a founding #partner of the Let's Encrypt project and the non-profit organization that #develops Certbot? We'd like to send you email about our work encrypting the web, #EFF news, campaigns, and ways to support digital freedom. #- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # (Y)es/(N)o: ``` *y* oder *n* wählen Im Browser abrufen: http://ttdemo.pc-kiel.de/ Leitet nun automatisch weiter auf ⇒ https://ttdemo.pc-kiel.de/ --- ### Zugriffsschutz für WWW-Verzeichnisse Neuen Benutzer *db* in **neuer** Nutzerdatenbank anlegen: ```bash htpasswd -c /etc/phpmyadmin.htpasswd db #ganzGeheimesPassw0rt ``` Zusätzlichen Benutzer *db2* in **vorhandener** Nutzerdatenbank hinzufügen: ![img20r](gfx/info.png) ```bash htpasswd /etc/phpmyadmin.htpasswd db2 ``` Benutzer *db* aus Nutzerdatenbank entfernen: ```bash htpasswd -D /etc/phpmyadmin.htpasswd db ``` Zugriff auf */var/www/phpMyAdmin* schützen: ```bash echo 'AuthUserFile /etc/phpmyadmin.htpasswd AuthName GeschlosseneGesellschaft AuthType Basic
require valid-user
' > /var/www/phpMyAdmin/.htaccess ``` --- ### Zugriffsschutz testen Im Browser abrufen: http://ttdemo.pc-kiel.de/ ![img50](gfx/htaccess.png) --- ### MariaDB-Administrator anlegen MariaDB-Client starten: ```bash mysql -u root -pganzGeheimesPassw0rt ``` Neuen Benutzer *admin* mit allen Rechten und Paßwort *ganzGeheimesPassw0rt* anlegen: ```sql CREATE USER 'admin'@'localhost' IDENTIFIED BY 'ganzGeheimesPassw0rt'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES; QUIT; ``` Kontrolle mit: ```bash mysqladmin -u admin -pganzGeheimesPassw0rt version ``` --- ### phpMyAdmin: Konfiguration MariaDB-Server-Zugriffsinformationen in Konfigurationsdatei hinterlegen: ```bash echo ' /var/www/phpMyAdmin/config.inc.php ``` --- ### phpMyAdmin: Konfiguration testen Im Browser abrufen: http://ttdemo.pc-kiel.de/ ![img80](gfx/phpMyAdmin2.png) --- ### Mailserver einrichten und Konten anlegen Zwei Mailkonten für die Nutzer *tux* und *tux2* einrichten: ```bash adduser --shell /bin/false tux; passwd tux adduser --shell /bin/false tux2; passwd tux2 ``` ![img20r](gfx/achtung.png) **Nach jedem Anlegen** eines neuen Mailkontos muß die Datenbank für postfix aktualisiert werden, da ansonsten die Mails **nicht zugestellt** werden: ```bash newaliases systemctl restart postfix ``` Mailkonto *tux* löschen: ```bash deluser --remove-home tux ``` --- ### Mailprogramm einrichten Die Mailkonten (eMail: tux@ttdemo.pc-kiel.de / Serveradresse: ttdemo.pc-kiel.de) werden im Mailprogramm (hier beispielhaft in *Claws Mail*) eingerichtet: ![img33](gfx/claws-mail2.png) ![img33](gfx/claws-mail3.png) --- ### Den eigenen Mailserver beliebt bei anderen machen / MX-Eintrag Mailserver versuchen auf verschiedene Arten, **Spam-Versender** zu **erkennen**. Einige strenger, andere weniger streng. Mit der Konfiguration des eigenen Mailservers und der DNS-Einstellungen könnt Ihr schon viel erreichen, damit **Eure Mails** von fremden Mailservern **angenommen werden**. #### MX-Eintrag Der MX-Eintrag sorgt dafür, daß **andere Mailserver wissen**, welcher Server bei Eurer Domain für die Annahme und das Senden vom Mails zuständig ist. Auch wenn der Webserver für Eure Domain gleichzeitig Mailserver ist, muß der MX-Eintrag – aus **Spam-Vermeidungsgründen** – gesetzt sein. Vorgehen: 1. Bei dem Anbieter, bei dem Ihr die Domain gemietet habt, sollte es in der *Verwaltungsoberfläche* soetwas wie "Namensauflösung", "DNS", ... geben. 2. Dort einen Eintrag vom *Typ* "MX", mit *Priorität* "100" und dem *Ziel* "meine-eigene-domain.xyz" erstellen. 3. Nach einiger Zeit (zwischen 5 Minuten und ca. 24 Stunden) sollte sich die Änderung herumgesprochen haben. Kontrolle mit ```bash dig ttdemo.pc-kiel.de MX ``` --- ### Den eigenen Mailserver beliebt bei anderen machen / rDNS Beim Angeben der Server-IP sollte ```bash dig -x 1.2.3.4 ``` die Domain ausgeben, für die der Server zuständig ist. Z.B. ```bash 4.3.2.1.in-addr.arpa. 1495 IN PTR meine-eigene-domain.xyz ``` Sollte das nicht stimmen, so sucht Ihr in der Oberfläche des **V-Server-Anbieters** nach *Reverse DNS*, *R-DNS*, *rDNS*, *DNS-Reverse*, ... und legt einen entsprechenden Eintrag an. --- ### Den eigenen Mailserver beliebt bei anderen machen / ... Sollte das nicht ausreichen, nach folgenden Begriffen suchen (und Lösungen umsetzen) * **DKIM** * **SPF** (*Typ* "TXT" und *Eintrag* "v=spf1 a ip4:1.2.3.4 -all") * **DMARC** und * **Betreiber von Mailservern** (z.B. t-online), die Mails vom eigenen Mailserver ablehnen, **anschreiben** und um das Freischalten des eigenen Mailservers bitten. * Den Mitschnitt *"Jean und Hauke Show: Mailcow - Micha zeigt uns den umfassenden Mailserver"* (https://www.youtube.com/watch?v=puP6fg9Qt5E) anschauen, bei dem Micha vieles mehr zum Thema erklärt. --- class: center, middle ### Informationen zu mir und meinen Dienstleistungen, m23, ... ### https://goos-habermann.de