Apache mit Makros – Kurzanleitung

Veröffentlichung 10. September 2018 @ 20:58
Letzte Änderung 20. September 2018 @ 17:58

Übersicht

  • Anlage typischer Virtual-Host-Konfigurationen mit Makros
  • Anwendungsbeispiel mit Umleitungen auf kanonische URL mit Authentifizierung und PHP-FPM-Anbindung

Voraussetzungen

Ubuntu-Server

  • Admin-E-Mail webmaster@example.com
  • Betriebsystem Ubuntu Server 16.04.05 LTS #lsb_release -a
  • htpasswd-Datei /etc/apache2/.htpasswd
  • Installation /srv/www/example
  • Konfiguration /etc/apache2/conf-available/macro.conf, /etc/apache2/mods-available/macro.load, /etc/apache2/sites-available/example.conf
  • Log /var/log/apache2/example-access.log, /var/log/apache2/example-error.log
  • PHP-FPM-Socket /run/php/php7.0-fpm-example.sock
  • Ports HTTP 80, HTTPS 443
  • Software Apache 2.4.18 #apache2 -v
  • Software PHP 7.0.30 #php –version
  • URLs http://example.com, http://www.example.com, https://example.com, https://www.example.com
  • Zertifikate und Schlüssel /etc/letsencrypt/live/example.com/*.pem, /etc/letsencrypt/live/www.example.com/*.pem

Apache-Modul mod_macro aktivieren

a2enmod macro

Apache-Makro-Konfiguration anlegen und aktivieren

Konfigurationsdatei anlegen

#Macros for single directives / sets of directives:
<Macro MacroDocument $DocumentRoot>
  DocumentRoot $DocumentRoot
</Macro>
<Macro MacroLog $Log>
  CustomLog ${APACHE_LOG_DIR}/$Log-access.log vhost_combined
  ErrorLog ${APACHE_LOG_DIR}/$Log-error.log
</Macro>
<Macro MacroRedirect $Redirect>
  Redirect permanent / $Redirect
</Macro>
<Macro MacroServer $ServerAdmin $ServerName>
  ServerAdmin $ServerAdmin
  ServerName $ServerName
</Macro>
<Macro MacroServerAlias $ServerAlias>
  ServerAlias $ServerAlias
</Macro>
<Macro MacroSSL $SSLCertificateFile $SSLCertificateKeyFile>
  SSLCertificateFile $SSLCertificateFile
  SSLCertificateKeyFile $SSLCertificateKeyFile
  SSLEngine on
</Macro>
#Macros for directories:
<Macro MacroDirectoryAuth $Directory $AuthName $AuthUserFile>
  <Directory $Directory>
    AuthBasicProvider file
    AuthName $AuthName
    AuthType Basic
    AuthUserFile $AuthUserFile
    Require valid-user
  </Directory>
</Macro>
#Special purpose macros: 
<Macro MacroPHPFPMProxy $Socket>
  <FilesMatch "\.php$">
    <If "-f %{REQUEST_FILENAME}">
      SetHandler "proxy:unix:/run/php/php7.0-fpm-$Socket.sock|fcgi://localhost/"
    </If>
  </FilesMatch>
  <Proxy "fcgi://localhost/">
  </Proxy>
</Macro>
#Macros for virtual hosts:
<Macro MacroVirtualHostHTTPForRedirectWithAlias $Port $Log $Redirect $ServerAdmin $ServerName $ServerAlias>
  <VirtualHost *:$Port>
    Use MacroLog $Log
    Use MacroRedirect $Redirect
    Use MacroServer $ServerAdmin $ServerName
    Use MacroServerAlias $ServerAlias
  </VirtualHost>
</Macro>
<Macro MacroVirtualHostHTTPSForRedirect $Port $Log $Redirect $ServerAdmin $ServerName $SSLCertificateFile $SSLCertificateKeyFile>
  <VirtualHost *:$Port>
    Use MacroLog $Log
    Use MacroRedirect $Redirect
    Use MacroServer $ServerAdmin $ServerName
    Use MacroSSL $SSLCertificateFile $SSLCertificateKeyFile
  </VirtualHost>
</Macro>
<Macro MacroVirtualHostHTTPSWithAuthAndFPM $Port $DocumentRoot $Log $ServerAdmin $ServerName $SSLCertificateFile $SSLCertificateKeyFile $AuthUserFile $Socket>
  <VirtualHost *:$Port>
    Use MacroDocument $DocumentRoot
    Use MacroLog $Log
    Use MacroServer $ServerAdmin $ServerName
    Use MacroSSL $SSLCertificateFile $SSLCertificateKeyFile
    Use MacroDirectoryAuth $DocumentRoot $ServerName $AuthUserFile
    Use MacroPHPFPMProxy $Socket
  </VirtualHost>
</Macro>

Konfiguration aktivieren

a2enconf macro

Konfiguration testen und Apache neuladen

apache2ctl configtest
systemctl reload apache2
#systemctl status apache2

[Beispiel] Virtuellen Host mit Umleitung von http://example.com, http://www.example.com und https://example.com auf https://www.example.com, Authentifizierung und PHP-FPM-Anbindung einrichten

Apache-Konfigurationsdatei anlegen

Use MacroVirtualHostHTTPForRedirectWithAlias "80" "example" "https://example.com/" "webmaster@example.com" "example.com" "www.example.com"
Use MacroVirtualHostHTTPSForRedirect "443" "example" "https://www.example.com/" "webmaster@example.com" "example.com" "/etc/letsencrypt/live/example.com/fullchain.pem" "/etc/letsencrypt/live/example.com/privkey.pem"
Use MacroVirtualHostHTTPSWithAuthAndFPM "443" "/srv/www/example" "example" "webmaster@example.com" "www.example.com" "/etc/letsencrypt/live/www.example.com/fullchain.pem" "/etc/letsencrypt/live/www.example.com/privkey.pem" "/etc/apache2/.htpasswd" "example"
UndefMacro MacroVirtualHostHTTPForRedirectWithAlias
UndefMacro MacroVirtualHostHTTPSForRedirect
UndefMacro MacroVirtualHostHTTPSWithAuthAndFPM

Virtuellen Host aktivieren

a2ensite example

Konfiguration testen und Apache neuladen

apache2ctl configtest
systemctl reload apache2
#systemctl status apache2

Quellen

https://httpd.apache.org/
https://httpd.apache.org/docs/2.4/mod/mod_macro.html
https://serverfault.com/questions/717481/how-can-i-fix-recurring-php-503-errors-on-my-apache-mod-proxy-fcgi-php-fpm-serve
https://wiki.apache.org/httpd/PHP-FPM

Gobale Verzeichnisse mit bindfs – Kurzanleitung

Veröffentlichung 7. September 2018 @ 15:31
Letzte Änderung 10. September 2018 @ 21:01

Übersicht

  • Gemeinsame Verzeichnisse für (lokale) Backups und Websites
  • Verzeichniszugriff für weiteren Benutzer über bindfs-Einhängepunkte
  • Unabhängig voneinander einstellbare Benutzer und Gruppen in Originalverzeichnis und Einhängepunkt

Voraussetzungen

Ubuntu-Server

  • Betriebsystem Ubuntu Server 16.04.05 LTS #lsb_release -a
  • Einhängepunkte /home/ubuntuuser/mnt/srv/backup und /home/ubuntuuser/mnt/srv/www mit Benutzer ubuntuuser
  • Globale Verzeichnisse /srv/backup mit Benutzer root und /srv/www mit Benutzer www-data
  • Konfiguration /etc/fstab
  • Software bindfs 1.12.6 #bindfs –version
  • Software fusermount 2.9.4 #fusermount -V

Globale Verzeichnisse anlegen und Zugriffsrechte setzen

mkdir /srv/{backup,www}
chown root:root /srv/backup
chown www-data:www-data /srv/www
chmod 0700 /srv/www

Backup-Verzeichnis von Sicherung mit tar ausschließen

echo 'Signature: 8a477f597d28d172789f06886806bc55' > /srv/backup/CACHEDIR.TAG
chmod 0400 /srv/backup/CACHEDIR.TAG

bindfs installieren

apt install bindfs

Globale Verzeichnisse dauerhaft in Benutzerverzeichnis ubuntuuser einbinden

Einhängepunkte für Benutzer ubuntuuser erstellen und Zugriffsrechte setzen

mkdir --mode=0700 --parents /home/ubuntuuser/mnt/srv/{backup,www}
chown --recursive ubuntuuser:ubuntuuser /home/ubuntuuser/mnt

Konfigurationsdatei für einzubindende Verzeichnisse ergänzen

...
#Globale Verzeichnisse in Benutzerverzeichnis ubuntuuser einbinden: 
/srv/backup /home/ubuntuuser/mnt/srv/backup fuse.bindfs chgrp-ignore,chown-ignore,create-for-group=root,create-for-user=root,force-group=ubuntuuser,force-user=ubuntuuser 0 0
/srv/www /home/ubuntuuser/mnt/srv/www fuse.bindfs chgrp-ignore,chown-ignore,create-for-group=www-data,create-for-user=www-data,force-group=ubuntuuser,force-user=ubuntuuser 0 0

[Optional] Globale Verzeichnisse temporär in Benutzerverzeichnis ubuntuuser einbinden

Einhängepunkte für Benutzer ubuntuuser erstellen und Zugriffsrechte setzen

mkdir --mode=0700 --parents /home/ubuntuuser/mnt/srv/{backup,www}
chown --recursive ubuntuuser:ubuntuuser /home/ubuntuuser/mnt

Verzeichnisse mit bindfs einbinden

bindfs --chgrp-ignore --chown-ignore --create-for-group=root --create-for-user=root --force-group=ubuntuuser --force-user=ubuntuuser /srv/backup /home/ubuntuuser/mnt/srv/backup
bindfs --chgrp-ignore --chown-ignore --create-for-group=www-data --create-for-user=www-data --force-group=ubuntuuser --force-user=ubuntuuser /srv/www /home/ubuntuuser/mnt/srv/www

[Optional] Globale Verzeichnisse aus Benutzerverzeichnis ubuntuuser aushängen und Einhängepunkte löschen

Verzeichnisse mit fusermount aushängen

fusermount -u /home/ubuntuuser/mnt/srv/backup
fusermount -u /home/ubuntuuser/mnt/srv/www

Einhängepunkte löschen

rmdir /home/ubuntuuser/mnt/srv/{backup,www}

Quellen

http://manpages.ubuntu.com/manpages/xenial/man1/bindfs.1.html
http://manpages.ubuntu.com/manpages/xenial/man1/fusermount.1.html
http://manpages.ubuntu.com/manpages/xenial/man5/fstab.5.html
http://www.bford.info/cachedir/
http://www.pathname.com/fhs/pub/fhs-2.3.html

Samba Master-Browser – Kurzanleitung

Veröffentlichung 4. September 2018 @ 8:25
Letzte Änderung 4. September 2018 @ 22:53

Übersicht

  • Samba-Server als lokaler Master-Browser für (Windows-)Arbeitsgruppe

Voraussetzungen

Samba-Server

  • Arbeitsgruppe EXAMPLE
  • Betriebsystem Ubuntu Server 16.04.05 LTS #lsb_release -a
  • IP-Adresse x.x.x.x
  • Konfiguration /etc/samba/smb.conf
  • Log /var/log/samba/log.*
  • NetBIOS-Name SAMBASERVER
  • Port NetBIOS Datagram Service 138 #netstat –listening –numeric –program –udp | grep nmbd
  • Port NetBIOS Name Service 137 #netstat –listening –numeric –program –udp | grep nmbd
  • Port NetBIOS Session Service 139 #netstat –listening –numeric –program –tcp | grep smbd
  • Port SMB over TCP 445 #netstat –listening –numeric –program –tcp | grep smbd
  • Software Samba 4.3.11 #samba –version
  • SysVinit-Skripte /etc/init.d/nmbd, /etc/init.d/smbd

Samba-Server installieren

apt install samba

SAMBASERVER als lokalen Master-Browser für Arbeitsgruppe EXAMPLE konfigurieren

Konfigurationsdatei ändern / ergänzen

...
[global]
...
###Server
#Arbeitsgruppe ändern:
#workgroup = WORKGROUP
workgroup = EXAMPLE
...
###Server
#NetBIOS-Name:
netbios name = SAMBASERVER
#Samba-Server als Master-Browser für Arbeitsgruppe EXAMPLE anbieten, Defaultwert yes:
local master = yes
#Priorität für Master-Browser-Wahl auf Höchstwert 255 festlegen:   
os level = 255
#Master-Browser-Wahl beim Start von nmbd durchführen:
preferred master = yes
...
#testparm 'WARNING: The "syslog" option is deprecated':
#syslog = 0
...

Konfigurationsdatei überprüfen

testparm

Samba NetBIOS Nameserver nmbd neustarten und Status abfragen

systemctl restart nmbd
systemctl status nmbd

Samba SMB/CIFS Daemon smbd neuladen und Status abfragen

systemctl reload smbd
systemctl status smbd

Kontrollieren, ob SAMBASERVER Master-Browser ist

grep 'local master browser' /var/log/samba/log.nmbd
  Samba name server SAMBASERVER is now a local master browser for workgroup EXAMPLE on subnet x.x.x.x

[Optional] Unter Windows kontrollieren, ob SAMBASERVER Master-Browser ist

nbtstat -a SAMBASERVER
  ...
  ...__MSBROWSE__...
  ...

Quellen

http://manpages.ubuntu.com/manpages/xenial/man1/testparm.1.html
http://manpages.ubuntu.com/manpages/xenial/man5/smb.conf.5.html
http://manpages.ubuntu.com/manpages/xenial/man8/nmbd.8.html
http://manpages.ubuntu.com/manpages/xenial/man8/smbd.8.html
https://wiki.samba.org/

Samba Client – Kurzanleitung

Veröffentlichung 3. September 2018 @ 21:33
Letzte Änderung 24. September 2018 @ 12:32

Übersicht

  • Netzwerkprotokoll Server Message Block SMB für Zugriff von Unix-Systemen auf Windows-Systeme
  • Einbindung von Windows-Freigaben mit Common Internet File System CIFS
  • Einsatz von SMB / CIFS nur in lokalen Netzwerken sinnvoll

Voraussetzungen

Samba-Client

  • Benutzerkonto sambauser
  • Betriebsystem Ubuntu Server 16.04.05 LTS #lsb_release -a
  • Einhängepunkt /media/windows/share
  • Konfiguration /etc/fstab, /etc/samba/smb.conf, /home/sambauser/.samba-credentials-windows-share
  • Software Samba-Client 4.3.11 #smbclient –version

Windows-Server

  • Benutzerkonto windowsuser
  • Betriebsystem Windows 10
  • FQDN windows.example.local
  • Freigabe //windows.example.local/share
  • IP-Adresse x.x.x.x
  • NetBIOS-Name WINDOWS

Samba-Client und Hilfprogramme installieren

Samba-Client smbclient

apt install smbclient

Gemeinsame Dateien für Samba-Server und -Client für testparm

apt install samba-common-bin

cifs-utils zur Einbindung des virtuellen Dateisystems cifs-vfs mit mount-Option cifs

apt install cifs-utils

Samba konfigurieren und Konfigurationsdatei überprüfen

...
[global]
...
###Client
#Protokoll SMB3 für Windows ab Windows 8 / Windows Server 2012:
client max protocol = SMB3
client min protocol = SMB3
...
#testparm 'WARNING: The "syslog" option is deprecated':
#syslog = 0
...
testparm

Authentifikationsdatei für Server-Freigabe anlegen und Zugriffsrechte anpassen

username=windowsuser
password=***
chmod 0600 /home/sambauser/.samba-credentials-windows-share

Freigaben und weitere Informationen über Server WINDOWS ausgeben

smbclient --authentication-file=/home/sambauser/.samba-credentials-windows-share --list //WINDOWS

Mit Samba-Client auf Server-Freigabe zugreifen

smbclient --authentication-file=/home/sambauser/.samba-credentials-windows-share //windows.example.local/share

Server-Freigabe temporär einbinden

Einhängepunkt anlegen

mkdir --parents /media/windows/share

Freigabe mit Protokoll SMB3 einbinden

mount -o credentials=/home/sambauser/.samba-credentials-windows-share,vers=3.0 -t cifs //x.x.x.x/share /media/windows/share

[Optional] Freigabe aushängen und Einhängepunkt löschen

umount /media/windows/share
rm /media/windows/share

Server-Freigabe dauerhaft einbinden

Einhängepunkt anlegen

mkdir --parents /media/windows/share

Konfigurationsdatei für einzubindendes Verzeichnis ergänzen

...
#Server-Freigabe von windows.example.local einbinden:
//x.x.x.x/share /media/windows/share cifs /home/sambauser/.samba-credentials-windows-share,vers=3.0 0 0

Quellen

http://manpages.ubuntu.com/manpages/xenial/man1/smbclient.1.html
http://manpages.ubuntu.com/manpages/xenial/man1/testparm.1.html
http://manpages.ubuntu.com/manpages/xenial/man5/fstab.5.html
http://manpages.ubuntu.com/manpages/xenial/man5/smb.conf.5.html
http://manpages.ubuntu.com/manpages/xenial/man8/mount.cifs.8.html
http://manpages.ubuntu.com/manpages/xenial/man8/umount.8.html
https://wiki.samba.org/