Benutzer-Werkzeuge

Webseiten-Werkzeuge


open:it:apache

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
open:it:apache [2024/08/15 15:19] – Externe Bearbeitung 127.0.0.1open:it:apache [2026/04/26 17:21] (aktuell) – [FTP-Zugang] k@i
Zeile 1: Zeile 1:
 ====== Apache Web-Server ====== ====== Apache Web-Server ======
-OS: Debian 11 
  
 ===== Vorbereitung ===== ===== Vorbereitung =====
Zeile 7: Zeile 6:
   - [[open:it:ssh|SSH-Zugang einrichten]]   - [[open:it:ssh|SSH-Zugang einrichten]]
   - [[open:it:mysql|MySQL-Datenbank]]   - [[open:it:mysql|MySQL-Datenbank]]
 +  - [[open:it:php|PHP einrichten]]
  
   * https://httpd.apache.org/docs/2.4/   * https://httpd.apache.org/docs/2.4/
Zeile 17: Zeile 17:
   sudo systemctl status apache2   sudo systemctl status apache2
  
 +Verzeichnis für Webseiten anlegen. 
 +  sudo mkdir /var/www/sites
 +  
 +Es sollten hier keine ACL-Rechte vergeben sein. ggf. löschen (kein + am Ende > ls -l):
 +  sudo setfacl -bR /var/www/sites
 +
 +Eine Gruppe für alle User der Webseiten erstellen
 +  sudo groupadd web
 +
 +Die der Apache-User muss in dieses Gruppe aufgenommen werden
 +  sudo usermod -aG web www-data
 +
 +Betroffene User in die Gruppe aufnehmen
 +  sudo usermod -aG web <USER>
 +
 +Rechte vergeben
 +  sudo chown -R www-data:web /var/www/sites
 +
 +  sudo find /var/www/sites -type d -exec chmod 2775 {} \;
 +
 +  sudo find /var/www/sites -type f -exec chmod 664 {} \;
 +
 +Testen, ob nur root Rechte auf alle Ebenen hat (Muss sein)
 +  namei -l /var/www/sites/
 +
 +==== Firewall ====
 [[open:it:net#firewall|Firewall einrichten]] \\ [[open:it:net#firewall|Firewall einrichten]] \\
-Firewall-Freigabe für Webseiten+Freigabe für Webseiten
   sudo ufw allow 80/tcp   sudo ufw allow 80/tcp
-Firewall-Freigabe für Webseiten verschlüsselt+Firewall-Freigabe für verschlüsselte Webseiten
   sudo ufw allow 443/tcp   sudo ufw allow 443/tcp
-Verzeichnis für Webseiten anlegen.  
-  sudo mkdir /var/www/sites 
  
-Default-Einstellungen für die Webseiten-Verzeichnisse mit ACL. www-data wird als User & Gruppe vom Apache-Webserver genutzt. Wenn ein <FTPUSER> Daten auf den Server hochlädt, behält die Gruppe www-data und somit der Apache-Webserver alle erforderlichen Zugriff-Rechte um in diesem Bereich handeln zu können. +
-  sudo setfacl -dm g:www-data:rwx /var/www/sites/ +
-Den Main-User in die Gruppe www-data aufnehmen, damit er Schreibrechte im Bereich der HTML-Seiten hat. +
-  sudo usermod -aG www-data <SUDO-USER>+
 ===== FTP-Zugang ===== ===== FTP-Zugang =====
-  sudo apt install vsftpd 
  
-  sudo nano /etc/vsftpd.conf+Der FTP-Zugang sollte nur als SFTP zugelassen werden und wird konfiguriert über [[ssh|SSH-Verbindungen]].
  
-  local_enable=YES +Soll ein Kunde/Anwender eingeschränkte Rechte für eine oder mehrere Webseiten erhalten, kann dies wie folgt eingerichtet werden. \\
-  anonymus_enable=NO +
-  write_enable=YES+
  
-  sudo systemctl reload vsftpd+Anwender Y => <ANY>
  
-FTP-User anlegen - Namen festlegen. Der Zugriff für den <FTPUSERwird auf den u.a. Bereich eingeschränkt, das gilt auch für den SSH-Zugriff über die Shell. Der o.a. <SUDO-USERsollte daher __nicht__ hier verwendet werden.+User anlegen 
 +  sudo useradd -M -s /usr/sbin/nologin <ANY> 
 +Passwort vergeben 
 +  sudo passwd <ANY>
  
-  sudo adduser <FTPUSER> --no-create-home +Chroot-Verzeichnis anlegen 
-FTP-User in die Apache-Gruppe aufnehmen +  sudo mkdir -p /sftp-chroot/<ANY>
-  sudo usermod -aG www-data <FTPUSER>+
  
-Zugang für FTP-User einschränken auf den Bereich der Webseiten im Verzeichnis /var/www +  sudo chown root:root /sftp-chroot
-  sudo nano /etc/ssh/sshd_config+
  
-  Match User <FTPUSER> +  sudo chmod 755 /sftp-chroot
-    X11Forwarding no +
-    AllowTcpForwarding no +
-    PermitTTY no +
-    ForceCommand internal-sftp +
-    ChrootDirectory /var/www/ +
-    PasswordAuthentication yes+
  
-  sudo systemctl reload ssh+  sudo chown root:root /sftp-chroot/<ANY>
  
-Für den FTP-Zugriff von <FTPUSERmit o.a. Einschränkung (Match User ...) ist eine Besonderheit zu beachten, da sonst kein Zugang per FTP möglich ist. \\ +  sudo chmod 755 /sftp-chroot/<ANY>
-Der Owner vom Verzeichnis /var/www, bzw. Pfad aus Parameter **ChrootDirectory**, muss root sein und Gruppe oder Sonstige dürfen keine Schreibrechte besitzen.  \\  +
-Diese Vorgaben gelten nur für das Hauptverzeichnis, nicht für darin enthaltene Unterverzeichnisse, daher im folgenden die Option -R nicht angewandt.\\ +
-Ggf. Einstellungen anpassen::+
  
-Setze Besitzer. +  sudo mkdir /sftp-chroot/<ANY>/webseite1 
-  sudo chown root:root /var/www/+Einbinden 
 +  sudo mount --bind /var/www/sites/<WEBSEITENDATEIEN> /sftp-chroot/<ANY>/webseite1
  
-Entferne Schreibrechte (w) für Gruppe (g) +Dauerhaft machen 
-  sudo chmod g-w /var/www/+  sudo nano /etc/fstab
  
-Entferne Schreibrechte für Sonstige (o) +  /var/www/sites/<WEBSEITENDATEIEN> /sftp-chroot/<ANY>/webseite1 none bind 0 0
-  sudo chmod o-w /var/www/+
  
-Anschließend hat der FTP-User Lese-Zugriff auf das Verzeichnis /var/www \\ +Rechte vergeben 
-Schreibrechte müssen dann in weiteren Unterverzeichnissen (var/www/html, /var/www/sites, etc.) für die Gruppe www-data erteilt werden bzw. müssten eigentlich bereits für den Apache-Webserver vorhanden sein siehe auch oben unter [[#Installation|Installation]].+  sudo usermod -aG web <ANY> 
 + 
 +  sudo usermod -/usr/sbin/nologin <ANY> 
 + 
 +SSH konfigurieren 
 +  sudo nano /etc/ssh/sshd_config 
 + 
 +  Match User <ANY> 
 +    PasswordAuthentication yes 
 +    PubkeyAuthentication no 
 +    ChrootDirectory /sftp-chroot/<ANY> 
 +    ForceCommand internal-sftp -d /web 
 +    AllowTcpForwarding no 
 +    X11Forwarding no 
 + 
 +  sudo sshd -
 + 
 +  sudo systemctl restart ssh
 ===== Webseiten & virtueller Host ===== ===== Webseiten & virtueller Host =====
-Verzeichnis für die HTML-Daten über die Shell anlegen+Verzeichnis für die HTML-Daten anlegen
   sudo mkdir /var/www/sites/BLUEGNU.DE   sudo mkdir /var/www/sites/BLUEGNU.DE
  
-  sudo chmod -R 775 /var/www/sites/BLUEGNU.DE 
-  
 Die Programm-Dateien können dann mit einem FTP-Programm übertragen werden. Die Programm-Dateien können dann mit einem FTP-Programm übertragen werden.
  
-Je nach Anwendungsfall ist es sinnvoll sensible Daten außerhalb des direkten Webseitenzugriffs und in andere Verzeichnisse zu platzieren. Der Apache-Webbrowser (User www-data) muss Zugriff darauf haben -> Z.B. im Verzeichnis /var/www/data/.... Das muss über die Konfiguration der jeweilige Webseite definiert werden. Z.B. bei Nextcloud über die ...config/config.php+Je nach Anwendungsfall ist es sinnvoll sensible Daten außerhalb des direkten Webseitenzugriffs und in andere Verzeichnisse zu platzieren. Der Apache-Webbrowser (User www-data) muss Zugriff darauf haben -> Z.B. im Verzeichnis /var/data/.... Das muss über die Konfiguration der jeweilige Webseite definiert werden. Z.B. bei Nextcloud über die ...config/config.php
  
-  sudo mkdir /var/www/data/+  sudo mkdir /var/data/
  
-Auch hier kann man wie bereits im Verzeichniss /var/www/sites/ den Bereich für die Gruppe __www-data__ per Default mit Rechten versehen. +Für dieses Verzeichnis sollten die gleichen Zugriffsrechte konfiguriert sein, wie für das Verzeichnis /var/www/sites 
-  sudo setfacl -dm g:www-data:rwx /var/www/data/ +
-   +
-Alternativ: +
-  sudo chown -R www-data:www-data /var/www/data/ +
-und +
-  sudo chmod -R 775 /var/www/data/+
  
 Apache-Konfiguration virtueller Host der Domain Apache-Konfiguration virtueller Host der Domain
Zeile 100: Zeile 119:
   <VirtualHost *:80>   <VirtualHost *:80>
     ServerName BLUEGNU.DE     ServerName BLUEGNU.DE
-    ServerAdmin mail@BLUEGNU.DE+    ServerAdmin email@BLUEGNU.DE
     DocumentRoot /var/www/sites/BLUEGNU.DE     DocumentRoot /var/www/sites/BLUEGNU.DE
     ErrorLog ${APACHE_LOG_DIR}/error.log     ErrorLog ${APACHE_LOG_DIR}/error.log
Zeile 111: Zeile 130:
     </Directory>     </Directory>
   </VirtualHost>   </VirtualHost>
- 
-Beim Erstellen der Let's-Encrypt-Zertifikate gab es Probleme mit dem ServerAlias "www....". Daher wurde hier auf die Einstellung des ServerAlias verzichtet. Es ist möglich, die www.<DOMAIN> als eigenständige Subdomain zu verarbeiten (s.u.) und dafür eine eigenes Zertifikat zu erstellen.  Für Documentroot wird das selbe Verzeichnis angegeben. 
  
 Virtuellen Host im Apache-Web-Server registrieren Virtuellen Host im Apache-Web-Server registrieren
   sudo a2ensite BLUEGNU.DE.conf   sudo a2ensite BLUEGNU.DE.conf
 +
 Defaultseite deaktivieren. Dadurch wird erste Domain (nach Alphabet) zur Defaultseite, sollte z.B. nur die Server-IP-Adresse über einen Webbrowser aufgerufen werden, oder die per DNS hierhin umgeleitete Domain nicht zu finden sein. Defaultseite deaktivieren. Dadurch wird erste Domain (nach Alphabet) zur Defaultseite, sollte z.B. nur die Server-IP-Adresse über einen Webbrowser aufgerufen werden, oder die per DNS hierhin umgeleitete Domain nicht zu finden sein.
   sudo a2dissite 000-default.conf   sudo a2dissite 000-default.conf
 +
 Alternativ kann eine permanente Umleitung in diese Datei geschrieben werden, um eine bestimmte Domain aufzurufen.  Alternativ kann eine permanente Umleitung in diese Datei geschrieben werden, um eine bestimmte Domain aufzurufen. 
   <VirtualHost *:80>   <VirtualHost *:80>
Zeile 125: Zeile 144:
 Hostname und Fully-Qualified Host Name (FQHN) festlegen Hostname und Fully-Qualified Host Name (FQHN) festlegen
   sudo hostnamectl set-hostname server.BLUEGNU.DE   sudo hostnamectl set-hostname server.BLUEGNU.DE
 +
 Einstellungen für den Apacheserver testen Einstellungen für den Apacheserver testen
   sudo apache2ctl configtest   sudo apache2ctl configtest
Zeile 160: Zeile 180:
   </html>   </html>
  
 +===== Proxy-Server =====
 +Erweiterungen installieren
 +  sudo a2enmod proxy proxy_ajp proxy_http rewrite deflate headers proxy_balancer proxy_connect proxy_html ssl
 +
 +Konfiguration mit SSL, hier für eine Subdomain, siehe auch [[open:it:apache|Apache Web-Server]]:
 +  sudo nano  /etc/apache2/sites-available/<SUBDOMAIN>.conf
 +
 +  <IfModule mod_ssl.c>
 +  <VirtualHost *:443>
 +    ServerName calibre.<DOMAIN>.de
 +    ...
 +    ...
 +    ProxyPass        / http://localhost:8080/
 +    ProxyPassReverse / http://localhost:8080/
 +    ...
 +    ...
 +  </VirtualHost>
 +  </IfModule>
 +
 +<DOMAIN> ersetzen \\
 +DocumentRoot kann entfernt oder deaktiviert (#) werden
 +
 +  sudo apachectl configtest
 +
 +  sudo systemctl restart apache2
 +
 +Anschließend kann die Firewall für den Port 8080 (sofern verwendet) wieder deaktiviert werden, da der Aufruf nun über den Domainnamen bzw. Subdomain erfolgt. Siehe auch [[open:it:net#firewall|Firewall]].
 ===== SSL-Zertifikate ===== ===== SSL-Zertifikate =====
-https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-20-04-de \\+[[https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-20-04-de|Einrichtung: Ubuntu -> Apache]] \\ 
 +[[https://www.ssllabs.com/ssltest/|SSL-Zertifikat testen]] \\
 ==== DNS-Einstellungen ==== ==== DNS-Einstellungen ====
-Die DNS-Zeiger der Domain(s) müssen vorher beim Domainprovider eingestellt sein:+Siehe auch [[dns|DNS-Einstellungen]] \\ 
 + 
 +Die Web-Adressen müssen zuvor beim Provider auf den Server umgeleitet werden. \\ 
 +Das erfolgt über die DNS-Zeiger der Domain(s):
   * A -> @ -> IPV4-Adresse des Servers    * A -> @ -> IPV4-Adresse des Servers 
   * A -> www -> IPV4-Adresse des Servers (sofern www gewünscht)   * A -> www -> IPV4-Adresse des Servers (sofern www gewünscht)
  
-Werden Subdomains eingerichtet zusätzlich:+Sollen zusätzlich Subdomains eingerichtet werden:
   * A -> * -> IPV4-Adresse des Servers    * A -> * -> IPV4-Adresse des Servers 
 +In diesem Beispiel werden durch das (zweite) * alle Subdomains umgeleitet.\\
 +Es ist natürlich auch möglich, einzelne Subdomains gezielt auf einen Server umzuleiten. So können dann verschiedene Subdomains auf unterschiedliche Servern geleitet werden. \\
 +Beispiel für die Subdomain "sub":
 +  * A -> sub -> IPV4-Adresse des Servers 
  
 ==== Let's-Encrypt ==== ==== Let's-Encrypt ====
Zeile 184: Zeile 239:
 Zertifikat löschen Zertifikat löschen
   sudo certbot delete   sudo certbot delete
- 
-===== Weitere Domains ===== 
-Hier als Beispiel die Subdomain für das wiki > https://wiki.BLUEGNU.DE \\ 
-Verzeichnis für die Daten anlegen 
-  sudo mkdir /var/www/sites/wiki.BLUEGNU.DE 
- 
-Die Programm-Dateien können dann mit einem FTP-Programm übertragen werden. 
- 
-Apache-Konfiguration virtueller Host der Domain 
-  sudo nano /etc/apache2/sites-available/wiki.BLUEGNU.DE.conf 
- 
-  <VirtualHost *:80> 
-    ServerName wiki.BLUEGNU.DE 
-    ServerAdmin mail@BLUEGNU.DE 
-    DocumentRoot /var/www/sites/wiki.BLUEGNU.DE 
-    ErrorLog ${APACHE_LOG_DIR}/error.log 
-    CustomLog ${APACHE_LOG_DIR}/access.log combined 
-    <Directory /var/www/sites/wiki.BLUEGNU.DE> 
-      Options Indexes FollowSymLinks MultiViews 
-      AllowOverride All 
-      Order allow,deny 
-      allow from all 
-    </Directory> 
-  </VirtualHost> 
- 
-Virtuellen Host im Apache-Web-Server registrieren 
-  sudo a2ensite wiki.BLUEGNU.DE.conf 
-Einstellungen für den Apacheserver testen 
-  sudo apache2ctl configtest 
-Wenn Test ok, dann alles aktivieren 
-  sudo systemctl reload apache2 
-SSL-Zertifikat registrieren 
-  sudo certbot --apache 
- 
-===== PHP ===== 
- 
-==== Ubuntu ==== 
- 
-https://php.watch/articles/install-php82-ubuntu-debian 
- 
-==== Debian ==== 
- 
-Der Apache-Server kann parallel mit unterschiedlichen PHP-Versionen betrieben und eine Version davon einer Domain explizit zugewiesen werden. \\ 
-Quelle: https://www.codinghood.de/blog/2021/05/php-7-4-und-php-8-0-zeitgleich-auf-einem-debian-10-mit-apache-und-php-fpm-installieren/ 
- 
-Benötigte Pakete wie curl installieren 
-  sudo apt-get -y install apt-transport-https lsb-release ca-certificates curl 
-Mit dem sury PHP Repository kommunizieren > Schlüssel herunterladen und installieren 
-  sudo curl -sSL -o /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg 
-sury PHP Repository zur Source-List hinzufügen 
-  sudo sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' 
- 
-Paketlisten neu einlesen und aktualisieren. 
-  sudo apt-get update 
- 
-PHP-Versionen installieren (je nach Bedarf) 
-  sudo apt install php7.4 php7.4-bcmath php7.4-cli php7.4-common php7.4-curl php7.4-dev php7.4-fpm php7.4-gd php7.4-imap php7.4-intl php7.4-json php7.4-mbstring php7.4-mysql php7.4-opcache php7.4-readline php7.4-soap php7.4-sqlite3 php7.4-tidy php7.4-xsl php7.4-zip 
- 
-  sudo apt install php8.0 php8.0-bcmath php8.0-cli php8.0-common php8.0-curl php8.0-dev php8.0-fpm php8.0-gd php8.0-imap php8.0-intl php8.0-mbstring php8.0-mysql php8.0-opcache php8.0-readline php8.0-soap php8.0-sqlite3 php8.0-tidy php8.0-xml php8.0-xsl php8.0-zip 
- 
-  sudo apt install php8.2 php8.2-bcmath php8.2-cli php8.2-common php8.2-curl php8.2-dev php8.2-fpm php8.2-gd php8.2-imap php8.2-intl php8.2-mbstring php8.2-mysql php8.2-opcache php8.2-readline php8.2-soap php8.2-sqlite3 php8.2-tidy php8.2-xml php8.2-xsl php8.2-zip 
- 
-Check Installiert - sollte bei allen Versionen klappen 
-  sudo systemctl status php7.4-fpm.service 
- 
-Apache-Module zum Umgang mit den PHP-FPM Installationen 
-  sudo apt-get install libapache2-mod-fcgid php-fpm 
- 
-  sudo a2enmod actions alias fcgid proxy_fcgi  
- 
-Version auswählen (Server intern) 
-  sudo update-alternatives --config php 
- 
-Auswahl Basisversion (Server intern) 
-  sudo update-alternatives --config php-fpm.sock 
- 
-Standartversion Apache festlegen -> hier nur eine Version, die anderen, sofern aktiviert, mit a2disconf abschalten 
-  sudo a2enconf php8.2-fpm.conf 
- 
-  sudo systemctl reload apache2 
-   
-Nur wenn eine Domain/Subdomain eine andere, als die PHP-Standard-Version, benötigt, die entsprechende Apache-Conf-Datei konfigurieren und Zeile einfügen. \\ 
-  sudo nano /etc/apache2/sites-available/xxx.conf 
-Zum Beispiel: 
-  Include /etc/apache2/conf-available/php8.0-fpm.conf 
- 
-  sudo systemctl reload apache2 
- 
-Check PHP-Version auf Webseite 
-  sudo nano /var/www/sites/.../phpinfo.php 
- 
-    <?php  
-      phpinfo(); 
-    ?> 
-   
  
open/it/apache.1723727971.txt.gz · Zuletzt geändert: von 127.0.0.1