open:it:apache
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| open:it:apache [2024/07/12 15:23] – [PHP] k@i | open: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 6: | Zeile 5: | ||
| - [[open: | - [[open: | ||
| - [[open: | - [[open: | ||
| + | - [[open: | ||
| + | - [[open: | ||
| * https:// | * https:// | ||
| * https:// | * https:// | ||
| * https:// | * https:// | ||
| + | |||
| ===== Installation ===== | ===== Installation ===== | ||
| sudo apt install apache2 | sudo apt install apache2 | ||
| Zeile 15: | Zeile 17: | ||
| sudo systemctl status apache2 | sudo systemctl status apache2 | ||
| + | Verzeichnis für Webseiten anlegen. | ||
| + | sudo mkdir / | ||
| + | | ||
| + | Es sollten hier keine ACL-Rechte vergeben sein. ggf. löschen (kein + am Ende > ls -l): | ||
| + | sudo setfacl -bR / | ||
| + | |||
| + | 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 < | ||
| + | |||
| + | Rechte vergeben | ||
| + | sudo chown -R www-data: | ||
| + | |||
| + | sudo find / | ||
| + | |||
| + | sudo find / | ||
| + | |||
| + | Testen, ob nur root Rechte auf alle Ebenen hat (Muss sein) | ||
| + | namei -l / | ||
| + | |||
| + | ==== Firewall ==== | ||
| [[open: | [[open: | ||
| - | Firewall-Freigabe für Webseiten | + | Freigabe für Webseiten |
| sudo ufw allow 80/tcp | sudo ufw allow 80/tcp | ||
| - | Firewall-Freigabe für Webseiten | + | Firewall-Freigabe für verschlüsselte |
| sudo ufw allow 443/tcp | sudo ufw allow 443/tcp | ||
| - | Verzeichnis für Webseiten anlegen. | ||
| - | sudo mkdir / | ||
| - | Default-Einstellungen für die Webseiten-Verzeichnisse mit ACL. www-data wird als User & Gruppe vom Apache-Webbrowser genutzt. Wenn ein < | + | |
| - | sudo setfacl -dm g: | + | |
| - | Den Main-User in die Gruppe www-data aufnehmen, damit er Schreibrechte im Bereich der HTML-Seiten hat. | + | |
| - | sudo usermod -aG www-data < | + | |
| ===== FTP-Zugang ===== | ===== FTP-Zugang ===== | ||
| - | sudo apt install vsftpd | ||
| - | | + | Der FTP-Zugang sollte nur als SFTP zugelassen werden und wird konfiguriert über [[ssh|SSH-Verbindungen]]. |
| + | |||
| + | Soll ein Kunde/ | ||
| + | |||
| + | Anwender Y => < | ||
| + | |||
| + | User anlegen | ||
| + | | ||
| + | Passwort vergeben | ||
| + | sudo passwd < | ||
| + | |||
| + | Chroot-Verzeichnis anlegen | ||
| + | sudo mkdir -p / | ||
| + | |||
| + | sudo chown root:root / | ||
| + | |||
| + | sudo chmod 755 / | ||
| - | | + | |
| - | anonymus_enable=NO | + | |
| - | write_enable=YES | + | |
| - | sudo systemctl reload vsftpd | + | sudo chmod 755 / |
| - | FTP-User anlegen - Namen festlegen. Der Zugriff für den <FTPUSER> wird auf den u.a. Bereich eingeschränkt, | + | sudo mkdir /sftp-chroot/<ANY>/ |
| + | Einbinden | ||
| + | sudo mount --bind / | ||
| - | sudo adduser < | + | Dauerhaft machen |
| - | FTP-User in die Apache-Gruppe aufnehmen | + | sudo nano /etc/fstab |
| - | sudo usermod -aG www-data < | + | |
| + | / | ||
| + | |||
| + | Rechte vergeben | ||
| + | sudo usermod -aG web <ANY> | ||
| + | |||
| + | sudo usermod -s / | ||
| + | |||
| + | SSH konfigurieren | ||
| sudo nano / | sudo nano / | ||
| - | Match User <FTPUSER> | + | Match User <ANY> |
| - | X11Forwarding no | + | |
| - | AllowTcpForwarding no | + | |
| - | PermitTTY no | + | |
| - | ForceCommand internal-sftp | + | |
| - | ChrootDirectory /var/www/ | + | |
| PasswordAuthentication yes | PasswordAuthentication yes | ||
| + | PubkeyAuthentication no | ||
| + | ChrootDirectory / | ||
| + | ForceCommand internal-sftp -d /web | ||
| + | AllowTcpForwarding no | ||
| + | X11Forwarding no | ||
| - | sudo systemctl reload ssh | + | sudo sshd -t |
| + | sudo systemctl restart ssh | ||
| ===== Webseiten & virtueller Host ===== | ===== Webseiten & virtueller Host ===== | ||
| - | Verzeichnis für die HTML-Daten | + | Verzeichnis für die HTML-Daten anlegen |
| - | sudo mkdir / | + | sudo mkdir / |
| - | sudo chmod -R 775 / | ||
| - | |||
| 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/ | + | 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 / |
| - | sudo mkdir /var/www/data/ | + | sudo mkdir /var/data/ |
| - | Auch hier kann man wie bereits im Verzeichniss | + | Für dieses Verzeichnis sollten die gleichen Zugriffsrechte konfiguriert sein, wie für das Verzeichnis |
| - | sudo setfacl -dm g: | + | |
| - | + | ||
| - | Alternativ: | + | |
| - | sudo chown -R www-data: | + | |
| - | und | + | |
| - | sudo chmod -R 775 / | + | |
| Apache-Konfiguration virtueller Host der Domain | Apache-Konfiguration virtueller Host der Domain | ||
| - | sudo nano / | + | sudo nano / |
| < | < | ||
| - | ServerName | + | ServerName |
| - | ServerAdmin | + | ServerAdmin |
| - | DocumentRoot / | + | DocumentRoot / |
| ErrorLog ${APACHE_LOG_DIR}/ | ErrorLog ${APACHE_LOG_DIR}/ | ||
| CustomLog ${APACHE_LOG_DIR}/ | CustomLog ${APACHE_LOG_DIR}/ | ||
| - | < | + | < |
| Options Indexes FollowSymLinks MultiViews | Options Indexes FollowSymLinks MultiViews | ||
| AllowOverride All | AllowOverride All | ||
| Zeile 93: | Zeile 130: | ||
| </ | </ | ||
| </ | </ | ||
| - | |||
| - | Beim Erstellen der Let' | ||
| Virtuellen Host im Apache-Web-Server registrieren | Virtuellen Host im Apache-Web-Server registrieren | ||
| - | sudo a2ensite | + | sudo a2ensite |
| Defaultseite deaktivieren. Dadurch wird erste Domain (nach Alphabet) zur Defaultseite, | Defaultseite deaktivieren. Dadurch wird erste Domain (nach Alphabet) zur Defaultseite, | ||
| 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. Der **ServerName** der umgeleiteten Domain muss dem Domainnamen, | + | |
| + | Alternativ kann eine permanente Umleitung in diese Datei geschrieben werden, um eine bestimmte Domain aufzurufen. | ||
| < | < | ||
| - | | + | RedirectPermanent / https://duckduckgo.de/ |
| - | | + | |
| </ | </ | ||
| Hostname und Fully-Qualified Host Name (FQHN) festlegen | Hostname und Fully-Qualified Host Name (FQHN) festlegen | ||
| - | sudo hostnamectl set-hostname server.KSPI.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 114: | Zeile 151: | ||
| sudo nano /etc/hosts | sudo nano /etc/hosts | ||
| - | 127.0.1.1 server.KSPI.DE server | + | 127.0.1.1 server.BLUEGNU.DE server |
| 127.0.0.1 localhost | 127.0.0.1 localhost | ||
| Zeile 128: | Zeile 165: | ||
| Simple HTML-Datei | Simple HTML-Datei | ||
| - | sudo nano / | + | sudo nano / |
| < | < | ||
| Zeile 143: | Zeile 180: | ||
| </ | </ | ||
| + | ===== 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: | ||
| + | sudo nano / | ||
| + | |||
| + | < | ||
| + | < | ||
| + | ServerName calibre.< | ||
| + | ... | ||
| + | ... | ||
| + | ProxyPass | ||
| + | ProxyPassReverse / http:// | ||
| + | ... | ||
| + | ... | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | 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: | ||
| ===== SSL-Zertifikate ===== | ===== SSL-Zertifikate ===== | ||
| - | https:// | + | [[https:// |
| + | [[https:// | ||
| ==== DNS-Einstellungen ==== | ==== DNS-Einstellungen ==== | ||
| - | Die DNS-Zeiger der Domain(s) | + | 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 | + | Sollen zusätzlich |
| * 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 " | ||
| + | * A -> sub -> IPV4-Adresse des Servers | ||
| ==== Let' | ==== Let' | ||
| Zeile 157: | Zeile 229: | ||
| Zertifikat(e) erstellen | Zertifikat(e) erstellen | ||
| sudo certbot --apache | sudo certbot --apache | ||
| - | Durch das Erstellen eines Zertifikats wird automatisch zusätzlich eine Datei für den virtuellen Host der SSL-Verbindung angelegt. Z.B. für die Hostdatei "KSPI.DE.conf", | + | Durch das Erstellen eines Zertifikats wird automatisch zusätzlich eine Datei für den virtuellen Host der SSL-Verbindung angelegt. Z.B. für die Hostdatei "BLUEGNU.DE.conf", |
| \\ | \\ | ||
| Timer-Einstellungen für Autorenew | Timer-Einstellungen für Autorenew | ||
| Zeile 167: | 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:// | ||
| - | Verzeichnis für die Daten anlegen | ||
| - | sudo mkdir / | ||
| - | |||
| - | Die Programm-Dateien können dann mit einem FTP-Programm übertragen werden. | ||
| - | |||
| - | Apache-Konfiguration virtueller Host der Domain | ||
| - | sudo nano / | ||
| - | |||
| - | < | ||
| - | ServerName wiki.KSPI.DE | ||
| - | ServerAdmin mail@KSPI.DE | ||
| - | DocumentRoot / | ||
| - | ErrorLog ${APACHE_LOG_DIR}/ | ||
| - | CustomLog ${APACHE_LOG_DIR}/ | ||
| - | < | ||
| - | Options Indexes FollowSymLinks MultiViews | ||
| - | AllowOverride All | ||
| - | Order allow,deny | ||
| - | allow from all | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | Virtuellen Host im Apache-Web-Server registrieren | ||
| - | sudo a2ensite wiki.KSPI.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:// | ||
| - | |||
| - | ==== Debian ==== | ||
| - | |||
| - | Der Apache-Server kann parallel mit unterschiedlichen PHP-Versionen betrieben und eine Version davon einer Domain explizit zugewiesen werden. \\ | ||
| - | Quelle: https:// | ||
| - | |||
| - | 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 / | ||
| - | sury PHP Repository zur Source-List hinzufügen | ||
| - | sudo sh -c 'echo "deb https:// | ||
| - | |||
| - | 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/ | ||
| - | sudo nano / | ||
| - | Zum Beispiel: | ||
| - | Include / | ||
| - | |||
| - | sudo systemctl reload apache2 | ||
| - | |||
| - | Check PHP-Version auf Webseite | ||
| - | sudo nano / | ||
| - | |||
| - | <? | ||
| - | phpinfo(); | ||
| - | ?> | ||
| - | |||
| - | ===== MySQL-Datenbank ===== | ||
| - | |||
| - | sudo apt-get install mariadb-server | ||
| - | |||
| - | sudo mysql_secure_installation | ||
| - | |||
| - | " | ||
| - | |||
| - | Standardverzeichnis für Datenbanken | ||
| - | |||
| - | / | ||
| - | ==== PHPMyAdmin ==== | ||
| - | Es ist möglich, die PHPMyAdmin von Debian zu verwenden > apt install phpmyadmin. \\ | ||
| - | Alternativ (hier angewandt) die aktuelle Variante von der Internetseite von phpmyadmin.net verwenden. | ||
| - | Aktuelle Installationsdateien downloaden in Unterverzeichnis des Apacheservers, | ||
| - | |||
| - | cd / | ||
| - | In diesem Beispiel wird eine bestehende Domain genutzt und darin das Unterverzeichnis phpmyadmin erstellt. Aufruf über den Browser mit < | ||
| - | Alternative: | ||
| - | |||
| - | Download der Installations-Dateien | ||
| - | sudo wget https:// | ||
| - | |||
| - | Sollte unzip nicht installiert sein: | ||
| - | sudo apt-get install unzip | ||
| - | |||
| - | sudo unzip phpMyAdmin-5.2.1-all-languages.zip | ||
| - | |||
| - | sudo mv phpMyAdmin-5.2.1-all-languages/ | ||
| - | |||
| - | sudo chown -R www-data: | ||
| - | |||
| - | sudo chmod -R 775 / | ||
| - | |||
| - | cd phpmyadmin/ | ||
| - | |||
| - | sudo cp config.sample.inc.php config.inc.php | ||
| - | |||
| - | sudo nano config.inc.php | ||
| - | ÄNDERN IN: | ||
| - | $cfg[' | ||
| - | |||
| - | Sicherheit: direkten root-Zugang über phpmyadmin sperren. \\ | ||
| - | |||
| - | Möglich über phpmyadmin oder wie folgt: | ||
| - | |||
| - | sudo nano / | ||
| - | Entscheidung über letzte Zeile (AllowRoot = false == gesperrt) ggf. Zeile einfügen: \\ | ||
| - | /* Configure according to dbconfig-common if enabled */ | ||
| - | if (!empty($dbname)) { | ||
| - | /* Authentication type */ | ||
| - | $cfg[' | ||
| - | $cfg[' | ||
| - | ... | ||
| - | |||
| - | Neuen User anlegen: | ||
| - | sudo mysql | ||
| - | |||
| - | CREATE USER '< | ||
| - | |||
| - | User mit Rechten versehen (hier alle): | ||
| - | GRANT ALL PRIVILEGES ON * . * TO '< | ||
| - | Berechtigungen neu laden: | ||
| - | FLUSH PRIVILEGES; | ||
| - | | ||
| - | ~~DISCUSSION~~ | ||
open/it/apache.1720790609.txt.gz · Zuletzt geändert: von k@i
