Server::Configureren
Tools en Hulpprogramma's
Voor het configureren en beheren van de Ubuntu Server staan ons diverse tools en hulpmiddelen ter beschikking zoals, puTTY, Webmin en APT
puTTY
Ubuntu Server heeft geen grafische console voor het beheer van de server.
Voor veel applicaties is verdere configuratie alleen mogelijk aan de shell prompt met Bash.
puTTY is een vrije telnet- en SSH-client en hiervoor uitstekend geschikt. Het is software waarmee een verbinding gemaakt wordt met een andere computer, meestal zijn dit servers met een op UNIX gebaseerd besturingssysteem. puTTY is een vervanging voor een terminal (ook wel Teletype, TTY genoemd), een domme machine die voor de introductie van de Personal Computer, gebruikt werd om te verbinden met een server.
puTTY heeft geen installatieprogramma, het bestaat uit één .exe bestand en kan overal op de harde schijf neergezet worden. Als puTTY op de desktop geopend is kan door rechts-klikken op de bovenbalk een contextmenu geopend worden met speciale opties en voor aanpassen van de configuratie. Note: Let er bij het instellen van de server firewall op dat voor puTTY de benodigde poort (22) open gesteld wordt voor SSH. Beperk dit wel tot alleen het lokale netwerk, dwz bron IP-range 192.168.178.0/24. Zie de de regel voor SSH in de sectie Server::Firewall > Trusted IP's en IP Notatie. |
SSH Server
SSH is een 'Secure SHell' netwerkprotocol waarmee het door cryptografische versleuteling mogelijk wordt om op een veilige manier gegevens uit te wisselen en communicatie te maken tussen twee computers of servers.
OpenSSH werd gedurende de installatie van Ubuntu Server al geïnstalleerd.
Op de Ubuntu Server heb ik een restrictie ingebouwd in de firewall waarmee alleen hosts op hetzelfde lokale netwerk SSH toegang hebben tot de server.
Zie Server::Firewall > Trusted IP's en IP Notatie.
Voor externe toegang tot de Ubuntu Server is het beter gebruik te maken van VPN: Exploring Linux::Projecten > Fritz!VPN
SSHPASS
Sshpass is een utility ontworpen om ssh te runnen waarbij een wachtwoord gevraagd wordt. Met SSHPASS verstrekken we dit wachtwoord 'prefetched' uit een bestand met dit wachtwoord.
Installeer: # apt install sshpass
Om met bijvoorbeeld RSYNC data te synchroniseren tussen de Testserver en de Thuisserver zou je de volgende code op de Testserver gebruiken:
# rsync -avzh root@thuisserver:/vault/backup /store
Nu wordt het thuisserver wachtwoord gevraagd.
Als deze synchronisatie vanuit een script
plaats vindt moet dit wachtwoord op één of andere manier samen met bovenstaand commando gestuurd worden.
Hiervoor gebruiken we sshpass
- Voor het verstrekken van het wachtwoord maken we een nieuw bestand aan:
root@testserver:/usr/local/bin# vi .rsync_access_to_thuisserver - Zet de permissies:
root@testserver:/usr/local/bin# chmod 644 ~/.rsync_access_to_thuisserver - Edit bestand en plaats wachtwoord van thuisserver root: RSYNC_PWD="<thuisserver-root-passwd>"
- Commando voor rsync /home/files/afbeeldingen/ van thuisserver naar testserver /home/files/afbeeldingen:
sshpass -p$RSYNC_PWD rsync -avzh --delete root@192.168.1.4:/home/files/afbeeldingen/ /home/files/afbeeldingen
WEBMIN
Met dit programma kan vanuit een webbrowser een Unix-achtig systeem onderhouden en geadministreerd worden. Zo is het bijvoorbeeld mogelijk om gebruikersaccounts te beheren, om instellingen te wijzigen voor Apache, Mysql en dns, en om fileshares aan te maken. Webmin bestaat uit een eenvoudige webserver, aangevuld met diverse in Perl 5 geschreven cgi-programma's.
WEBMIN is voor LINUX in het algemeen en heeft veel opties, maar kan daarom ook riskant zijn. Het is mij bijvoorbeeld niet gelukt Clamav (Filescanner) toe te voegen aan Webmin omdat er enkele dependencies (nog) niet beschikbaar zijn.
WEBMIN komt niet voor in de Ubuntu repositorie en moet dus zelf gehaald en geïnstalleerd worden.
Installatie
Zie ook: Webmin downloading and installing
Setup
De eenvoudigste manier is het gebruik van het automatische webmin-setup-repos.sh script voor het configureren van repositories op RHEL of Debian systemen.
Het kan uitgevoerd worden in twee eenvoudige stappen:
root@testserver:~# curl -o webmin-setup-repos.sh https://raw.githubusercontent.com/webmin/webmin/master/webmin-setup-repos.sh root@testserver:~# sh webmin-setup-repos.sh
Met dit script wordt de Webmin repository automatisch opgezet en worden de GPG keys geïnstalleerd. Het Webmin package is nu beschikbaar voor installatie en toekomstige upgrades.
De ondersteunde en geteste systemen zijn:
Red Hat Enterprise Linux, Alma, Rocky, Oracle, CentOS Stream, Fedora of Debian, Ubuntu en Kali.
This script will automatically setup our repository and install our GPG keys on your system, and provide webmin package for installation and easy upgrades in the future. The supported and tested systems are
-Update Ubuntu repository en Upgrade OS
ububen@testserver:~$ sudo apt update && sudo apt upgrade -y ... 1 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
-Installeer WEBMIN
root@testserver:~# apt install webmin Reading package lists... Done Building dependency tree... Done Reading state information... Done The following additional packages will be installed: bzip2 ... perl-openssl-defaults qrencode unzip webmin 0 upgraded, 61 newly installed, 0 to remove and 2 not upgraded. Need to get 40.2 MB of archives. After this operation, 228 MB of additional disk space will be used.
-Check status
root@testserver:~# systemctl status webmin.service
webmin.service - Webmin server daemon
Loaded: loaded (/usr/lib/systemd/system/webmin.service; enabled; preset: enabled)
Active: active (running) since Sat 2025-02-01 17:39:41 CET; 17h ago
Process: 13133 ExecStart=/usr/share/webmin/miniserv.pl /etc/webmin/miniserv.conf (code=exited, status=0/SUCCESS)
Main PID: 13134 (miniserv.pl)
Tasks: 1 (limit: 19036)
Memory: 38.2M (peak: 355.7M)
CPU: 1min 9.305s
CGroup: /system.slice/webmin.service
└─13134 /usr/bin/perl /usr/share/webmin/miniserv.pl /etc/webmin/miniserv.conf
-Allow Webmin op poort 10000 (indien firewall aktief)
root@testserver:~# sudo ufw allow 10000
-Open WEBMIN in browser:
https://192.168.178.5:10000
- Set password voor de Webmin root:
Gebruiker: ububen
Wachtwoord: Als Ubuntu Server (zie LastPass)
APT
Door Linuxgebruikers en systeembeheerders worden rpm-bestanden gebruikt om op een eenvoudige manier software te kunnen updaten, upgraden of installeren.
RPM Package Manager (Oorspronkelijk Red Hat Package Manager genaamd) is een package manager die primair is bedoeld voor het besturingssysteem Linux.
DEB is de Package Manager voor Linux systemen gebaseerd op Debian.
DEB installeert, updatet, verwijdert, verifieert en bevraagt softwarepakketten en is het standaardsoftwarepakketformaat van de Linux systemen gebaseerd op Debian.
Daar overheen wordt meestal een gebruiksvriendelijke frontend, zoals APT (Advanced Package Tool), gebruikt waarmee een gebruiker via een simpele opdracht een toepassing kan installeren of updaten.
APT is een Linux update-gereedschap dat de afhankelijkheden verwerkt bij het gebruik van DEB.
APT is een commando in 'bash', zie voor details # man apt en voor voorbeelden van gebruik de hierna volgende sectie.
Upgrade met APT
Commando: # apt update
Synchroniseer en update repositories
Commando: # apt upgrade
Als dit uitgevoerd wordt zonder vermelding van packages zal 'upgrade' alle geïnstalleerde packages upgraden. Tijdens het upgraden zal APT zeker stellen dat aan alle afhankelijkheden (dependencies) voldaan wordt.
Andere APT commando's: | |
![]() |
|
# apt list | Resulteert in lijst van alle geïnstalleerde packages en alle overige in de repositories beschikbare packages. Opties: --installed --upgradable --all-versions |
# apt list *samba* | Als hierboven maar nu alleen de packages waarbij in de naam 'samba' voor komt. |
# apt list --installed *apache* | Resulteert in lijst met alle geïnstalleerde apache packages |
# apt install [package] | Installeert gespecificeerde package en zorgt dat dependencies in orde zijn. |
# apt remove [package] | Verwijdert gespecificeerde package en dependencies. |
# apt show [package] | Toont de package informatie van het gegeven package(s) |
Voor een listing van geïnstalleerde packages:
# apt list --installed | grep ^clamav > clamav.txt
VIM Kleurenschema
VIM, afkorting voor Vi IMproved is een uitzonderlijk veelzijdige, krachtige en efficiente tekstbewerker. Het eerst uitgegeven in 1991 door de nederlandse software engineer Bram Molenaar.
VIM is gefocust op efficientie door modale bewerking en uitgebreide aanpassingsopties. VIM is de keuze van veel Linux gebruikers en administrators.
Installatie
# apt install vim
Gebruik:
# vim example.txt
Kleurenschema VIM
Ubuntu Server heeft een nieuwe versie van de editor VIM, o.a. met Color Syntax Highlighting.
Met een donkere achtergrond is sommige tekst moeilijk te lezen.
Edit bestand /etc/vim/vimrc en verwijder de uitmarkering voor de regel:
" If using a dark background within the editing area and syntax highlighting
" turn on this option as well
set background=dark
Software uit Repositories van Derden
De repositories van Ubuntu bevat software packages die door Ubuntu beschikbaar worden gesteld en die compatibel zijn met de geïnstalleerde Ubuntu versie en door Ubuntu getest en geadopteerd zijn.
Er zijn echter legio aanvullende repositairies van derden. Deze zijn over het algemeen goed te vertrouwen maar Ubuntu staat hier niet voor in.
Maar er zijn situaties dat gebruikers geen andere optie hebben.
Webmin
Met dit programma kan vanuit een webbrowser een Unix-achtig systeem onderhouden en geadministreerd worden.
Om dit package te installeren moet deze eerst aan de repository lijst toegevoegd worden.
Zie
vorig hoofdstuk WEBMIN
Installatie van aanvullende Packages
Grafische Pakketten
Piwigo heeft de grafische pakketten PHP-GD en/of PHP-ImageMagick nodig.
PHP-GD wordt al automatisch geïnstalleerd met de Ubuntu Server
Imagick is de PHP-ImageMagick extension.
Piwigo en Wordpress maken middels Imagick gebruik van de ImageMagick App en elke PHP versie heeft zijn eigen Imagick extension.
Installeer php-imagick voor de PHP versie die in gebruik is.
root@htestserver:~# apt list available php-imagick*
Listing... Done
php-image-text/noble 0.7.0-3 all
php-imagick-all-dev/noble 3.7.0-4ubuntu3 all
php-imagick/noble,now 3.7.0-4ubuntu3 amd64 [installed]
php-imap/noble 2:8.3+93ubuntu2 all
Packages voor Cleware USB Powerswitch
Voor het aan- en uitschakelen van electrische apparaten kan een powerswitch gebruikt worden die aangestuurd wordt via een USB poort op de server.
Op de server op zolder heb ik een Cleware USB
powerswitch geplaatst waarmee ik de ernaast geplaatste testserver op afstand aan- en uit kan schakelen.
Zie voor de installatie en controle van de switch op een linux machine ook: USB Netschakelaar in de projectmap
Minimum vereisten voor installatie op de Ubuntu Server:
- Clewarecontrol vereist op zijn minst Linux kernel version 2.6.8
Ubuntu Server 24.04.1 LTS heeft versie Linux version 6.8.0-48-generic x86_64-linux-gnu-gcc-13 (Ubuntu 13.2.0-23ubuntu4)
Tevens is al voorzien in de benodigde USB Human Interface Device (HID) kernel module. - g++ : # apt install g++
De GNU C++ Compiler - libhidapi-dev : # apt install libhidapi-dev
HIDAPI is een multi-platform library voor communicatie van een applicatie met USB HID-Class devices. - gettext : # apt install gettext
GNU 'gettext' biedt een set van tools om andere GNU-pakketten te produceren met multi-lingual berichten.
Installatie
- Download https://vanheusden.com/drivers/cleware/clewarecontrol-5.0.tgz
- Plaats bestand clewarecontrol-5.0.tgz in /usr/lib/
- # sudo -i
- # cd /usr/lib
- # wget https://vanheusden.com/drivers/cleware/clewarecontrol-5.0.tgz
- # tar -xzvf clewarecontrol-5.0.tgz
- # cd /usr/lib/clewarecontrol-5.0
Voordat 'make install' uitgevoerd wordt, eerst zorgen dat de volgende packages geïnstalleerd zijn:
- make
- g++
- libhidapi-dev
- gettext - # make install
Verifieer nu dat executable 'clewarecontrol' in /bin/ voorkomt en zie ook # man clewarecontrol
Volg instructies in readme.txt
Updatedb & Locate
Presenteer lijst van bestanden in databases die overeenkomen met een patroon
ububen@testserver:~$ sudo apt install locate
Zie ook # man locate
Postfix voor notificaties
![]() |
|
![]() |
Minimum Vereisten:
Note: De Hostname van de server en je 'Droplet's name moeten overeenkomen met je domein. Aanvullend moet in de firewall poort 25 open staan. |
Installeer Postfix
Zie voor de gedetailleerde beschrijving: DigitalOcean: How To Install and Configure Postfix as a Send-Only SMTP Server
ububen@testserver:~$ sudo apt update ububen@testserver:~$ sudo apt install mailutils
Aan het einde van het installatie proces verschijnt het Postfix configuratiescherm:
De default optie is Internet Site. Dat is de aanbevolen optie voor deze configuratie.
De System mail name moet hetzelfde zijn als de naam die aan de server gegeven is bij de creatie.
Postfix is nu geïnstalleeerd, nu volgt de configuratie.
Configureer Postfix
In deze stap wordt Postfix geconfigureerd dat het alleen berichten zend en ontvangt van de lokale server of te wel localhost
Hiervoor moet Postfix geconfigureerd worden dat het alleen luistert naar de loopback interface die de server gebruikt voor de interne communicatie.
Edit hiervoor het main Postfix configuratiebestand /etc/postfix/main.cf en zet de waarde van 'inet_interfaces' naar 'loopback-only':
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
inet_protocols = ipv4
Wijzig ook inet_protocols van all naar ipv4. Op de serverkaart is er (nog) geen ipv6 protocol geactiveerd.
Als je domein homeserver.makkink.eu feitelijk een subdomein is en als je wilt dat het lijkt dat de e-mailberichten van het hoofddomein komen voeg dan de volgende regel toe in main.cf:
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
inet_protocols = ipv4
masquerade_domains = makkink.eu
Als laatste is nu een herstart van Postfix nodig
ububen@testserver:~$ sudo systemctl restart postfix
Test Postfix
Zend testbericht:
echo "This is the body of the email" | mail -s "This is the subject line" ben@makkink.eu
Systeemmail doorsturen
In deze stap wordt e-mail forwarding opgezet voor de rooty gebruiker zodat berichten gegenereerd door het systeem die naar root gestuurd worden doorgesturrd worden naar een external e-mailadres
Het bestand /etc/aliases bevat een lijst met alternatieve namen voor e-mail ontvangers.
Edit /etc/aliases:
Voeg toe: root: ben@makkink.eu
# See man 5 aliases for format
postmaster: root
clamav: root
root: ben@makkink.eu
Enabling SMTP Encryption
Om SMTP encryptie te bieden wordt een gratis TLS certificaat aangevraagd bij Let's Encrypt.
Deze certificaten worden vervolgens aangeboden in de map /etc/letsencrypt/live/www.makkink.eu/
Edit nu /etc/postfix/main.cf en voeg onder TLS parameters toe:
smtpd_tls_cert_file=/etc/letsencrypt/live/www.makkink.eu/fullchain.pem smtpd_tls_key_file=/etc/letsencrypt/live/www.makkink.eu/privkey.pem
Pas de wijzigingen toe door een herstart van Postfix:
root@testserver:~# systemctl restart postfix
LetsEncrypt
![]() |
Het doel van Let's Encrypt en het ACME protocol is het faciliteren van een HTTPS server en het automatisch verkrijgen van een browser-trusted certificaat. Let's Encrypt is een gratis, geautomatiseerde en open Certificate Authority beschikbaar gemaakt door de nonprofit Internet Security Research Group (ISRG). |
![]() |
Certbot is een makkelijk te gebruiken commandlijn-client voor het verkrijgen van een certificaat van Let's Encrypt. Deze client verzorgt:
Zie ook https://eff-certbot.readthedocs.io/en/stable/man/certbot.html |
Lees ook de Certbot gebruikersinstrucies
Certificaat halen voor Postfix
Zie ook How To Install and Configure Postfix as a Send-Only SMTP Server on Ubuntu
- Zet op de router portforwarding voor TCP poort 80 naar de 'homeserver' (192.168.178.5).
- Zet firewall: # sudo ufw allow postfix
- Zorg dat er geen andere service actief is op poort 80, bijv. HTTP
# sudo systemctl stop apache2
- Haal key certificaat:
# sudo certbot -v certonly --standalone --rsa-key-size 4096 --agree-tos --preferred-challenges http -d www.makkink.eu
Resultaat:
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/www.makkink.eu/fullchain.pem
Key is saved at: /etc/letsencrypt/live/www.makkink.eu/privkey.pem
This certificate expires on 2025-02-08.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Edit Postfix main.cf voor verwijzing naar het certificaat
Automatic renewal Failure
Met commando # sudo certbot renew --dry-run wordt een renewal gesimuleerd.
Dit loopt uit op een failure:
ububen@testserver:~$ sudo certbot renew --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Processing /etc/letsencrypt/renewal/www.makkink.eu.conf
Account registered.
Simulating renewal of an existing certificate for www.makkink.eu
Failed to renew certificate www.makkink.eu with error: Could not bind TCP port 80 because it is already in use by another process on this system (such as a web server).
Please stop the program in question and then try again.
Dit probleem zal verholpen worden als de Apache2 webserver geconfigureerd is voor HTTPS.
De hierbij gecreëerde certificaten zullen dan ook voor Postfix gebruikt worden.
Aanvullende Configuraties
Na de installatie van de Ubuntu serverdistributie met de bootdisk en het uitvoeren van de upgrades in de repositories mbv 'APT' wordt de server verder geconfigureerd.
Dit doen we zo mogelijk met Webmin, een Gebruikers Interface voor het beheren van een Linux Server.
Veel zal echter via de commandline uitgevoerd worden
Hieronder verdere configuraties zoals die op de server aangebracht zijn.
Wijzigen Computernaam
Als bij de installatie van Ubuntu Server een computernaam gegeven is die achteraf niet bevalt, kan de computernaam eenvoudig gewijzigd worden.
Op Systemd gebaseerde distributies zoals Ubuntu Server 16.04 LTS en hoger kan het commando hostnamectl gebruikt worden om de hostname (computernaam) te wijzigen.
Zie ook
https://www.cyberciti.biz/faq/ubuntu-change-hostname-command/
Om de huidige instellingen te zien, geef het commando # hostnamectl
ububen@testserver:~$ sudo hostnamectl Static hostname: testserver.makkink.eu Pretty hostname: testserver Icon name: computer-desktop Chassis: desktop Machine ID: 025135a9e95f4c298c029c799864162f Boot ID: 590ea8b0e58f438a8c02b2aedb24338a Operating System: Ubuntu 24.04.1 LTS Kernel: Linux 6.8.0-48-generic Architecture: x86-64 Hardware Vendor: MSI Hardware Model: MS-7817 Firmware Version: V25.5 Firmware Date: Tue 2014-12-23 Firmware Age: 9y 10month 2w 6d
Als de computernaam bijvoorbeeld gewijzigd moet worden naar thuisserver.makkink.eu:
ububen@testserver:~$ hostnamectl set-hostname thuisserver.makkink.eu
Als we vervolgens ook de 'Pretty hostname' zouden willen wijzigen naar thuisserver:
ububen@testserver:~$ hostnamectl set-hostname thuisserver -–pretty
Verifieer:
ububen@testserver:~$ sudo hostnamectl Static hostname: thuisserver.makkink.eu Pretty hostname: thuisserver Icon name: computer-desktop Chassis: desktop Machine ID: 025135a9e95f4c298c029c799864162f Boot ID: 590ea8b0e58f438a8c02b2aedb24338a Operating System: Ubuntu 24.04.1 LTS Kernel: Linux 6.8.0-48-generic Architecture: x86-64 Hardware Vendor: MSI Hardware Model: MS-7817 Firmware Version: V25.5 Firmware Date: Tue 2014-12-23 Firmware Age: 9y 10month 2w 6d
CHECK
- Check /etc/hosts en maak zeker dat elke verwijzing naar testserver gewijzigd wordt naar thuisserver
- Alle browser url's wijzigen van testserver naar thuisserver
- In /etc/samba/smb.conf wijzig Serverstring van testserver naar thuisserver
- In scripts 'scanfiles' en 'upgrades': wijzig EMAIL_FROM="testserver@makkink.eu"naar EMAIL_FROM="thuisserver@makkink.eu";
- In script 'utils-extra' wijzig alle voorkomens 'testserver' naar 'thuisserver';
- wijzig namen van 'rsync_thisserver_with_testserver' en bijbehorende '.rsync_access_to_testserver' en wijzig waar nodig de inhoud.
Wijzigen default gebruikersnaam (en home-dir)
Zie https://pimylifeup.com/ubuntu-change-username/
Tijdens de installatie van Ubuntu Server geven we de default gebruiker (non-root admin) een naam.
Mogelijk hebben we hiervan later spijt.
Het wijzigen van de gebruikersnaam op de Ubuntu Server is redelijk eenvoudig, maar waar het vaak wat ingewikkeld wordt zijn de bijwerkingen.
je hoeft je geen zorgen te maken over permissies, elk bestand waarvan de huidige gebruiker eigenaar is zal de nieuwe gebruiker volgen, omdat permissies gebonden zijn aan de User ID (UID) en niet aan de gebruikersnaam.
Het is mogelijk dat er problemen ontstaan na het wijzigen van de naam als er specifieke verwijzigingen zijn naar de gebruikersnaam. Dit kan bijvoorbeeld gebeuren in service bestanden, speciaal die je zelf schrijft. Het kan ook gebeuren bij diensten die direct verwijzen naar de gebruikers home-directory. Dit kan echter opgelost worden door in de home map een symbolic link te plaatsen mety de oude gbruikersnaa en verwijzend naar de nieuwe gebruikers map.
Het wijzigen van je gebruikersnaam is ongelooflijk eenvoudig met het usermod commando. Met gereedschap is het mogelijk bijna alle eigenschappen van een gebruiker aan te passen.
Hierna volgend de procedure van het wijzigen van de gebruikersnaam en het creëren van een symbolic link.
Maak nieuwe gebruiker aan:
Het is niet mogelijk de gebruikersnaam te wijzigen van de ingelogde account.
Hiervoor maken we eerst een tijdelijke nieuwe nieuwe gebruiker aan:
root@testserver:~# adduser bentemp info: Adding user `bentemp' ... info: Selecting UID/GID from range 1000 to 59999 ... info: Adding new group `bentemp' (1001) ... info: Adding new user `bentemp' (1001) with group `bentemp (1001)' ... info: Creating home directory `/home/bentemp' ... info: Copying files from `/etc/skel' ... New password: # vul een wachtwoord in Retype new password: passwd: password updated successfully Changing the user information for bentemp Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y info: Adding new user `bentemp' to supplemental / extra groups `users' ... info: Adding user `bentemp' to group `users' ...
Vervolgens voegen we de nieuwe gebruiker toe aan de SUDO groep:
root@homeserver:~# usermod -aG sudo bentemp
Log uit en Log in als 'bentemp'
Using username "bentemp".
bentemp@192.168.178.5's password:
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-48-generic x86_64)
…
To run a command as administrator (user "root"), use "sudo " .
See "man sudo_root" for details.
bentemp@testserver:~$ sudo su
[sudo] password for bentemp:
Wijzig gebruikersnaam en groep:
root@testserver:~# usermod -l ububen -d /home/ububen -m ubuntu-ben root@testserver:~# groupmod -n ububen ubuntu-ben
Log uit en login als 'ububen'
Using username "ububen". ububen@192.168.178.5's password: "zelfde als van oude gebruikersnaam" Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-48-generic x86_64) ... Last login: Sun Nov 3 14:22:43 2024 from 192.168.178.2 ububen@homeserver:~$
Cleanup, verwijder tijdelijke user ‘bentemp’
ububen@testserver:~$ sudo userdel bentemp -f -r
[sudo] password for ububen: "zelfde als hierboven"
Symbolic Link
Na het wijzigen van de gebruikersnaam zal je ook je home-map verhuisd hebben.
Dit kan een probleem opleveren als je scripts of programma's hebt die nog je oude home-map verwachten.
Dit kun je oplossen door het plaatsen van een Symbolic link in /home
ububen@testserver:~$ sudo ln -s /home/ububen /home/ubuntu-ben
Zet owner van symbolic link naar 'ububen'
ububen@testserver:~$ sudo chown -h ububen: /home/ubuntu-ben
Chown -h, wijzig owner van de link en niet het gerefereerde bestand of map
Sudo zonder wachtwoord
Per default vereist het gebruik van SUDO elke keer het gebruikerswachtwoord.
Beetje over de top.
Edit het bestand /etc/sudoers en de include aan het einde: @includedir /etc/sudoers.d
Maak vervolgens in de map /etc/sudoers.d een nieuw bestand aan bijv. ububen
Edit bestand /etc/sudoers.d/ububen en voeg toe de regels:
# Members of the admin group may gain root privileges without password ububen ALL=(ALL) NOPASSWD:ALL
Sudo -i
Als er veel commando's uitgevoerd moeten worden waarbij root privileges vereist zijn dan kunnen we 'inloggen als root'
ububen@testserver:~$ sudo -i
root@testserver:~#
Om vervolgens de supermode weer te verlaten:
root@testserver:~# exit ububen@testserver:~$
Automatische Upgrades
Zie https://thenewstack.io/enable-automatic-updates-for-ubuntu-server/
Wanneer was het de laatste keer dat de Ubuntu Server een upgrade heeft gehad?
Als een server jaren achtereen draait zonder een reboot kan inhouden dat al die tijd er geen upgrade gedaan wordt.
Unpatched software wordt kwetsbaar voor aanvallen
Tenzij je alle tijd hebt om dagelijks upgrades uit te voeren is het raadzaam upgrades automatisch te laten plaatsvinden.
Canonical (de firma achter Ubuntu) is zo zeker over de onbeheerde upgrades voor de server, dat zij het OS verzenden met de noodzakelijke package al voorgeïnstalleerd.
Verifieer dat de Software geïnstalleerd is
Geef het commando:
root@testserver:~# which unattended-upgrades
De output moet zijn:
root@testserver:~# /usr/bin/unattended-upgrades
Configureer Unatted-Upgrades
root@testserver:~# dpkg-reconfigure -plow unattended-upgrades
Na bovenstaand commando opent er een window met de vraag of je automatische download en installatie van stabiele upgrades wenst.
Kies: <TAB> naar <YES> en klik <ENTER> en hiermee is de onbeheerde utomatische upgrade geactiveerd
Check van de configuratie
Om te zien wat de unattended-upgrade configuratie doet, open het configuratiebestand /etc/apt/apt.conf.d/20auto-upgrades, deze bevat 2 regels:
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1";
Configuratie opties
Voor bovenstaand bestand zijn geen configuraties nodig.
Er is echter een tweede bestand op de zelfde locatie, /etc/apt/apt.conf.d/50unattended-upgrades. Deze kan/moet door editing nader geconfigureerd worden.
Het meeste van dit bestand is uitgemarkeerd, maar als je door het bestand gaat zul je zekere regels en/of secties vinden die aktief zijn.
Bijvoorbeeld de volgende sectie:
6 Unattended-Upgrade::Allowed-Origins { 7 "${distro_id}:${distro_codename}"; 8 "${distro_id}:${distro_codename}-security"; 9 // Extended Security Maintenance; doesn't necessarily exist for 10 // every release and this system may not have it installed, but if 11 // available, the policy for updates is such that unattended-upgrades 12 // should also install from here by default. 13 "${distro_id}ESMApps:${distro_codename}-apps-security"; 14 "${distro_id}ESM:${distro_codename}-infra-security"; 15 // "${distro_id}:${distro_codename}-updates"; 16 // "${distro_id}:${distro_codename}-proposed"; 17 // "${distro_id}:${distro_codename}-backports"; 18 };
In bovenstaande regels staan de toegestane bronnen.
De regel met -updates, -proposed en -backports zijn uitgemarkeerd omdat deze updates kunnen bevatten die problemen veroorzaken met al geïnstalleerde packages.
Verder in het bestand is een sectie met de opties "true" of "false" bijvoorbeeld:
88 // Do automatic removal of unused packages after the upgrade 89 // (equivalent to apt-get autoremove) 90 //Unattended-Upgrade::Remove-Unused-Dependencies "false";
Als je geen ongebruikte dependencies wilt behouden, verwijder de uitmarkereing '//' en wijzig "false" naar "true".
Een andere configuratie optie is:
92 // Automatically reboot *WITHOUT CONFIRMATION* if
93 // the file /var/run/reboot-required is found after the upgrade
94 Unattended-Upgrade::Automatic-Reboot "true";
Deze optie activeren is niet aan te raden omdat het niet bekend is wanneer een onbeheerde upgrade zal starten en eindigen en tot onverwachtte downtimes kan leiden.
Als we toch een automatic reboot instellen dan specificeren we ook het tijdstip:
100 // If automatic reboot is enabled and needed, reboot at the specific
101 // time instead of immediately
102 // Default: "now"
103 Unattended-Upgrade::Automatic-Reboot-Time "03:00";
Herstart na configuratie-wijziging
Als er wijzigingen aangebracht zijn in /etc/apt/apt.conf.d/50unattended-upgrades dan moet unattend-upgrades opnieuw geladen worden.
root@testserver:~# systemctl restart unattended-upgrades
Expanded Security Maintenance for Apps
Activeer ESM Apps om extra toekomstige veiligheidsupdates te ontvangen.
Zie https://ubuntu.com/esm
ESM is onderdeel van Ubunto Pro, het meest uitgebreide abonnement voor open-source softwarebeveiliging.
Ubunto Pro is gratis voor persoonlijk gebruik en geeft beveiliging en naleving bovenop Ubuntu LTS met 10 jaar dekking voor meer dan 25.000 pakketten
ESM biedt 10 jaar kwetsbaarheidsbeheer voor kritieke, hoge en geselecteerde gemiddelde CVE's voor alle softwarepakketten die door Ubuntu worden geleverd.
(Common Vulnerabilities and Exposures, meestal afgekort als CVE, is een databank met informatie over kwetsbaarheden in computersystemen en netwerken).
Met Livepatch kunt u CVE's patchen zonder machines buiten geplande onderhoudsvensters opnieuw op te starten.
Gratis Abonneren
Ga naar
https://ubuntu.com/pro/subscribe
Klik Register en vul gegevens voor registratie in en geef wachtwoord.
Ontvang FREE PERSONAL TOKEN geldig voor max. 5 machines en verloopt nooit.
Activeer Ubuntu Pro met gegeven token
root@testserver:~# pro attach C12JFSwRvsCbmv8ajVQk1KnxvvgWxq
Enabling Ubuntu Pro: ESM Apps
Ubuntu Pro: ESM Apps enabled
Enabling Ubuntu Pro: ESM Infra
Ubuntu Pro: ESM Infra enabled
Enabling Livepatch
Livepatch enabled
This machine is now attached to 'Ubuntu Pro - free personal subscription'
Check Status Pro
root@testserver:~# pro status SERVICE ENTITLED STATUS DESCRIPTION anbox-cloud yes disabled Scalable Android in the cloud esm-apps yes enabled Expanded Security Maintenance for Applications esm-infra yes enabled Expanded Security Maintenance for Infrastructure landscape yes disabled Management and administration tool for Ubuntu livepatch yes enabled Canonical Livepatch service realtime-kernel* yes disabled Ubuntu kernel with PREEMPT_RT patches integrated * Service has variants For a list of all Ubuntu Pro services and variants, run 'pro status --all' Enable services with: pro enableAccount: ben@makkink.eu Subscription: Ubuntu Pro - free personal subscription
Als het gewenst is dat bijvoorbeeld de service 'landscape' enabled moet worden gebruik dan het commando: # pro enable landscape
Check Security Status
root@testserver:~# pro security-status 889 packages installed: 809 packages from Ubuntu Main/Restricted repository 76 packages from Ubuntu Universe/Multiverse repository 1 package from a third party 3 packages no longer available for download To get more information about the packages, run pro security-status --help for a list of available options. This machine is attached to an Ubuntu Pro subscription. Main/Restricted packages are receiving security updates from Ubuntu Pro with 'esm-infra' enabled until 2034. Universe/Multiverse packages are receiving security updates from Ubuntu Pro with 'esm-apps' enabled until 2034.
Handmatige upgrades voor packages en dependencies
In de vorige secties zijn de unattended security upgrades ingesteld.
Voor de reguliere upgrades van geïnstalleerde packages en dependencies geven we de voorkeur aan het op de hand upgraden.
Voordat we deze upgrades uitvoeren maken we eerst een OS systeembackup, zodat als er zich problemen voordoen het systeem van vóór de upgrades teruggezet kan worden.
Om vast te stellen of er upgrades beschikbaar zijn gebruiken we het script 'UPGRADES'
#!/bin/bash # *************************************************************************** # * UPGRADES CRONScript Ben Makkink 26/01/2025 * # * De Ubuntu server voert security upgrades automatisch uit * # * De reguliere updates wordt bij voorkeur op de hand gedaan, om * # * te voorkomen dat mogelijke bugs de werking verstoren. Voordat de upgrade* # * uitgevoerd wordt kan er eerst een systeem backup gemaakt worden zodat * # * zonodig de upgrade ongedaan gemaakt kan worden * # *************************************************************************** EMAIL_MSG="Upgrades beschikbaar"; EMAIL_FROM="testserver@makkink.eu"; EMAIL_TO="ben@makkink.eu"; # Haal de lijst met upgrades op. apt-check resulteerd in 2 getallen. Het # eerste getal zijn de reguliere upgrades en het getal na de ';' geeft het # aantal security upgrades. De laatste is normaal dus altijd 0 read upd < <(/usr/lib/update-notifier/apt-check 2>&1 | cut -d ';' -f 1) # echo $upd; # Als er meer dan 25 upgrades klaarstaan wordt er een notificatie mail # naar Admin verstuurd. if [ $upd -gt 25 ]; then #compose content e-mail message body=$'\n'${EMAIL_MSG}$'\n'"===================="$'\n'; body+=$'\n'"Er staan "$upd" upgrades klaar."; body+=$'\n'"Dit zijn de op de hand uit te voeren upgrades van geïnstalleerde packages en dependencies."; body+=$'\n'"(Security upgrades worden automatisch uitgevoerd door Expanded Security Maintenance)."; body+=$'\n'$'\n'"Procedure"; body+=$'\n'"========="; body+=$'\n'"- Maak eerst een OS systeembackup:" body+=$'\n'" # Utils > Backup-, Restore- en Onderhoudsprogramma's > OS-systeem backup"; body+=$'\n'$'\n'"- Ververs de repositories met commando #: apt update"; body+=$'\n'$'\n'"- Haal lijst met beschikbare upgrades met commando #: apt list --upgradable"; body+=$'\n'$'\n'"- Voer alle upgrades uit met commando #: apt upgrade"; body+=$'\n'" Voor alleen package#: apt upgrade "; body+=$'\n'$'\n'"- Reboot server"; body+=$'\n'$'\n'"Admin Testserver"; #Send e-mail message echo "$body"|mail -s "Testserver Upgrades beschikbaar" -r "${EMAIL_FROM}" "${EMAIL_TO}"; fi
Het commando /usr/lib/update-notifier/apt-check resulteert in 2 getallen gescheiden door ';' xx;yy
Onder xx staat het aantal beschikbare upgrades voor de packages en onder yy de beschikbare security upgrades.
Met cut -d ';' -f 1 selecteren we veld 1 met de delimiter ; en we lezen deze output naar de variabele upd.
Als er meer dan 25 upgrades beschikbaar zijn wordt er een notificatie mail naar Admin gestuurd. Zie Postfix voor notificaties voor het mail commando
CRON.weekly voor UPGRADES
Om script 'upgrades' wekelijks uit te voeren voegen we deze toe aan cron.weekly dmv een harde link:
root@testserver:~# ln /usr/local/bin/upgrades /etc/cron.weekly/upgrades
Upgrade History
Expanded Security Maintenance for Applications is enabled. 0 updates can be applied immediately. Last login: Mon Dec 16 16:08:10 2024 from 192.168.178.2 root@homeserver:~# less /var/log/apt/history.log Start-Date: 2024-12-08 11:28:20 Commandline: apt upgrade Requested-By: ububen (1000) Upgrade: open-iscsi:amd64 (2.1.9-3ubuntu5.1, 2.1.9-3ubuntu5.2), zip:amd64 (3.0-13build1, 3.0-13ubuntu0.1), libopeniscsiusr:amd64 (2.1.9-3ubuntu5.1, 2.1.9-3ubuntu5.2) End-Date: 2024-12-08 11:28:44
Gebruikers en Groepen
Zie ook mastering-user-management-and-permissions
Door gebruikersaccounts aan te maken, deze toe te wijzen aan geschikte groepen en zorgvuldig de machtigingen te definiëren, creëert u een veilige en gecontroleerde omgeving voor systeemgebruik.
Deze sectie gaat in op de kernbegrippen van gebruikersbeheer en machtigingen in Ubuntu, het maken, wijzigen en verwijderen van gebruikers en de rol van groepen.
En het instellen van machtigingen met behulp van commando's zoals adduser, usermod, groups, chmod en chown.
We maken de voor de 'homeserver' benodigde beveiligde gebruikersaccounts, het toewijzen van gedetailleerde toegangscontroles en instellen van een goed gedefinieerde machtigingsstructuur.
Gebruikersbeheer en machtigingen begrijpen
Gebruikersaccounts:
Een gebruikersaccount op Ubuntu vertegenwoordigt een persoon of een toepassing die toegang heeft tot het systeem.
Elk gebruikersaccount heeft een unieke gebruikersnaam en wachtwoord (of een andere verificatiemethode).
Gebruikersaccounts zijn cruciaal voor het handhaven van de systeembeveiliging door ervoor te zorgen dat alleen geautoriseerde personen toegang hebben tot specifieke bronnen.
Groepen:
Groepen fungeren als een verzameling van gebruikersaccounts met vergelijkbare toegangsprivileges.
Het toewijzen van gebruikers aan groepen vereenvoudigt het beheer van de machtiging, zodat u toegangsbesturingselementen kunt toepassen op een groep als geheel in plaats van individuele gebruikers.
Toestemmingen:
Machtigingen definiëren het niveau van toegang (lezen, schrijven, uitvoeren) dat een gebruiker of groep heeft voor een bestand of map op het Ubuntu-systeem. Toestemmingen worden meestal weergegeven met behulp van een code van drie tekens, waarbij elk teken toegang betekent voor de gebruiker die eigenaar is van het bestand (eigenaar), de groep (groep van de gebruiker) en alle andere gebruikers (andere).
Inzicht in het belang:
Effectief gebruikersbeheer en machtigingen zijn van het grootste belang om verschillende redenen:
- Beveiliging: Beperk ongeautoriseerde toegang tot gevoelige bestanden en systeembronnen.
- Verantwoording: Volg gebruikersactiviteit en identificeer potentiële inbreuken op de beveiliging.
- Resource Control: Wijs toegangsrechten toe op basis van gebruikersrollen en -behoeften.
- Systeemstabiliteit: Voorkom schadelijke wijzigingen door onbevoegde gebruikers.
Essentiële commando's
Gebruikers beheren
Ubuntu biedt een robuuste reeks opdrachten voor het beheren van gebruikersaccounts:
- adduser <username>: Maakt een nieuw gebruikersaccount aan. Met deze opdracht wordt u gevraagd een wachtwoord en andere gebruikersgegevens in te stellen.
- usermod <username>: Wijzigt een bestaand gebruikersaccount. U kunt deze opdracht gebruiken om wachtwoorden, gebruikersgegevens of groepslidmaatschappen te wijzigen.
- passwd <username>: Wijzigt het wachtwoord voor een gebruikersaccount (vereist de administratieve rechten van het huidige wachtwoord van de gebruiker).
- userdel <username>: Verwijdert een gebruikersaccount. Deze opdracht verwijdert ook de startmap en het postvak van de gebruiker (gebruik de -rVlag om de home directory te behouden).
- groups <username>: Geeft de groepen weer waartoe een gebruiker behoort.
- id <username>: Geeft gedetailleerde informatie over een gebruikersaccount, waaronder gebruikersnaam, gebruikers-ID (UID), groep ID (GID) en het primaire groepslidmaatschap.
Groepen en groepsbeheer
Essentiële commando's voor groepsbeheer:
- groupadd <groupname>: Creëert een nieuwe groep.
- groupdel <groupname>: Verwijdert een bestaande groep.
- groupmod <groupname>: Wijzigt een bestaande groep, zoals de naam of andere kenmerken.
- usermod -aG <groupname> <username>: Voegt een gebruiker toe aan een groep. De -a vlag zorgt ervoor dat de gebruiker aan de groep wordt toegevoegd zonder bestaande groepslidmaatschappen te verwijderen.
- usermod -aG <groupname> <username> <username> <username>: Voegt meerdere gebruikers toe aan 1 group <groupname>.
- usermod -aG sudo <username>: Voegt een gebruiker toe als Superuser aan de group Sudo.
- gpasswd <groupname>: Stelt het wachtwoord in of wijzigt het wachtwoord voor een groep (nuttig voor groepen die wachtwoordverificatie vereisen voor toegang tot specifieke bronnen).
- less /etc/group: Geeft lijst van bestaande groepen inclusief de geregisteerde gebruikers
Effectief gebruik van de groep:
- Maak groepen die gebruikersrollen en toegangsbehoeften binnen uw Ubuntu-systeem weerspiegelen. Je kunt bijvoorbeeld groepen hebben zoals 'ontwikkelaars', 'financiering' of 'admin'.
- Wijs gebruikers toe aan de juiste groepen op basis van hun functies. Dit vereenvoudigt het beheer van de machtigingen door toegangscontroles toe te passen op hele groepen in plaats van individuele gebruikers.
- Gebruik systeemgedefinieerde groepen zoals "sudo" voor het verlenen van administratieve privileges aan specifieke gebruikers binnen een groep.
Accounts
Op de homeserver plannen we vooralsnog onderstaande gebruikers en de groepen waaran ze toegevoegd worden:
![]() |
![]() |
![]() |
![]() |
|
User | Naam | Groups | Shell | Omschrijving |
ububen | default user | ububen, adm, cdrom, sudo, dip, plugdev, lxd, lanshare | /usr//bin/bash | Hoofdgebruiker met admin rechten middels Sudo |
ben | ben xps | ben, lanshare | /usr/sbin/nologin | homeserver gebruiker aangesloten bij groep 'lanshare' |
erica | erica lenovo | erica, lanshare | /usr/sbin/nologin | homeserver gebruiker aangesloten bij groep 'lanshare' |
benjamin | ben lenovo | benjamin, lanshare | /usr/sbin/nologin | homeserver gebruiker aangesloten bij groep 'lanshare' |
files | samba share | files, lanshare | /usr/sbin/nologin | samba share windows naar Fileshares |
archief | samba share | archief, lanshare | /usr/sbin/nologin | samba share windows naar Archief |
- Als later diensten of Apps toegevoegd worden die hierbij ook groepen creëeren zoals Samba dan moeten al bestaande gebruikers alsnog individueel toegevoegd worden
- De default user 'ububen' is gecreëerd tijdens de Ubuntu Server installatie.
Als er nog een extra gebruiker met admin rechten (systeem account) gewenst is dan gebruiken we het commando # useradd -r <username>
Groepen aanmaken
Bij de installatie van Ubuntu Server werd de default gebruiker 'ububen' gecreëerd en deze systeem account werd daarbij toegevoegd aan een hele serie van groepen.
Elke nieuwe gebruiker die we aanmaken wordt per default toegevoegd aan een nieuwe groep met dezelfde naam als de eigenaar. Het is tevens de primaire groep van deze gebruiker.
Zoals in bovendstaand schema te zien willen we alle gebruikers toevoegen aan een nieuw te creëren groep 'lanshare'.
Al deze gebruikers op het Local Area Network (LAN) zullen middels Samba configuraties als groep toegang krijgen tot de Samba File Server shares 'files' en 'archief'.
Maak groep LANSHARE aan
root@testserver:~# groupadd lanshare
root@testserver:~# cat /etc/group| grep lanshare
lanshare:x:1001:
Voeg 'ububen' toe aan groep 'lanshare'
root@testserver:~# usermod --append --groups lanshare ububen of usermod -aG lanshare ububen root@testserver:~# id ububen uid=1000(ububen) gid=1000(ububen) groups=1000(ububen),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),101(lxd),1001(lanshare)
Lijst van users in groep 'lanshare'
root@testserver:~# cat /etc/group| grep lanshare
lanshare:x:1001:ububen
Voorbeeld verwijder user uit groep
root@testserver:~# gpasswd --delete <usernaam> lanshare Removing user <usernaam> from group lanshare
Gebruikers aanmaken
Default Useradd Values wijzigen
Per default krijgt elke nieuwe user ssh login access, wij willen echter alleen ssh login toestaan aan systeem account 'ububen'
Edit /etc/default/useradd en wijzig settings naar:
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/usr/sbin/nologin #was /usr/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no
LOG_INIT=yes
Maak gebruiker 'ben' aan:
root@testserver:~# useradd -m ben
Optie -m zorgt voor aanmaak map /home/ben en kopieert de bestanden uit de /etc/skel map naar /home/ben
Zie onderstaande resultaten:
root@testserver:~# ls -l /home|grep -w 'ben'
drwxr-x--- 2 ben ben 4096 Nov 5 14:58 ben root@testserver:~# ls -al /home/ben
total 20
drwxr-x--- 2 ben ben 4096 Nov 5 14:58 .
drwxr-xr-x 8 root root 4096 Nov 6 13:01 ..
-rw-r--r-- 1 ben ben 220 Mar 31 2024 .bash_logout
-rw-r--r-- 1 ben ben 3771 Mar 31 2024 .bashrc
-rw-r--r-- 1 ben ben 807 Mar 31 2024 .profile root@testserver:~# id ben uid=1003(ben) gid=1004(ben) groups=1004(ben) root@testserver:~# grep ben /etc/passwd ben:x:1003:1004::/home/ben:/usr/sbin/nologin
Zet wachtwoord voor user 'ben'
root@testserver:~# passwd ben New password: Zie LastPass Retype new password: passwd: password updated successfully
Voeg user 'ben' toe aan groep 'lanshare'
root@testserver:~# usermod -aG lanshare ben
root@testserver:~# groups ben
ben : ben lanshare
Maak gebruiker 'erica' aan:
Zie voor uitgebreide outputs bovenstaande aanmaak van gebruiker 'ben'
root@testserver:~# useradd -m erica root@testserver:~# passwd erica root@testserver:~# grep erica /etc/passwd erica:x:1001:1002::/home/erica:/usr/sbin/nologin root@testserver:~# usermod -aG lanshare erica root@testserver:~# groups erica erica : erica lanshare
Maak gebruiker 'benjamin' aan:
Zie voor uitgebreide outputs bovenstaande aanmaak van gebruiker 'ben'
root@testserver:~# useradd -m benjamin root@testserver:~# passwd benjamin root@testserver:~# grep benjamin /etc/passwd benjamin:x:1006:1006::/home/benjamin:/usr/sbin/nologin root@testserver:~# usermod -aG lanshare benjamin root@testserver:~# groups benjamin benjamin : benjamin lanshare
Maak gebruiker 'files' aan:
Files wordt een via Samba gedeelde map in /home die als fileserver fungeert.
Hier maken we de groep LANSHARE de primairy groep
root@testserver:~# useradd -m -g lanshare files root@testserver:~# ls -l /home|grep -w 'files'
drwxr-x--- 2 files lanshare 4096 Nov 5 15:14 files root@testserver:~# passwd files root@testserver:~# grep files /etc/passwd files:x:1004:1001::/home/files:/usr/sbin/nologin root@testserver:~# groups files files : lanshare
Maak gebruiker 'archief aan:
Archief wordt een via Samba gedeelde map in /home die als fileserver fungeert.
Hier maken we de groep LANSHARE de primairy groep
root@testserver:~# useradd -m -g lanshare archief root@testserver:~# ls -l /home|grep -w 'archief'
drwxr-x--- 2 archief lanshare 4096 Nov 5 15:14 files root@testserver:~# passwd archief root@testserver:~# grep archief /etc/passwd files:x:1004:1001::/home/archief:/usr/sbin/nologin root@testserver:~# groups archief archief : lanshare
Overzicht Groepen en Groepsleden
De geinstalleerde groepen op dit punt van de installatie alfabetisch gesorteerd:
root@testserver:~# cat /etc/group|sort adm:x:4:syslog,ububen audio:x:29: backup:x:34: benjamin:x:1003: ben:x:1004: bin:x:2: cdrom:x:24:ububen clamav:x:113: crontab:x:990: daemon:x:1: dialout:x:20: dip:x:30:ububen disk:x:6: erica:x:1002: fax:x:21: floppy:x:25: fwupd-refresh:x:989: games:x:60: input:x:996: irc:x:39: kmem:x:15: kvm:x:994: landscape:x:109: lanshare:x:1001:ububen,erica,benjamin,ben list:x:38: lp:x:7: lxd:x:101:ububen mail:x:8: man:x:12: messagebus:x:102: news:x:9: nogroup:x:65534: operator:x:37: plugdev:x:46:ububen polkitd:x:991: postdrop:x:112: postfix:x:111: proxy:x:13: rdma:x:106: render:x:993: root:x:0: sasl:x:45: sgx:x:995: shadow:x:42: src:x:40: _ssh:x:103: ssl-cert:x:110: staff:x:50: sudo:x:27:ububen syslog:x:104: systemd-journal:x:999: systemd-network:x:998: systemd-resolve:x:992: systemd-timesync:x:997: sys:x:3: tape:x:26: tcpdump:x:107: tss:x:108: tty:x:5: ububen:x:1000: users:x:100: utmp:x:43: uucp:x:10: uuidd:x:105: video:x:44: voice:x:22: www-data:x:33:
Gebruikers groepslidmaatschap
ububen : ububen adm cdrom sudo dip plugdev lxd lanshare ben : ben lanshare erica : erica lanshare benjamin: benjamin lanshare files : lanshare archief : lanshare
Beveiliging
ClamAV is speciaal ontworpen voor het middels de Clamav-Daemon scannen van e-mail via e-mail gateways. Op de Testserver wordt geen mailservice geïnstalleerd.
Op deze server wordt Clamav geïnstalleerd, specifiek voor de
opdrachtregelscanner
en de automatische database-updater.
De kern van het pakket wordt gevormd door een anti-virus engine in de vorm van een gedeelde bibliotheek.
Het installeren van Clamav-Daemon is niet nodig.
CLAMSCAN is een opdrachtregeltool die 'libclamav' gebruikt om bestanden en/of mappen te scannen op virussen.
In tegenstelling tot clamdscan vereist clamscan geen actieve clamd service om te functioneren. In plaats daarvan creëert clamscan, elke keer dat deze wordt uitgevoerd, een nieuwe engine en laadt deze de virusdatabase.
Vervolgens worden de bestanden en/of mappen die zijn opgegeven op de opdrachtregel gescand en wordt een scanrapport gemaakt.
Clamscan filescanner installatie
root@testserver:~# apt install clamav clamav-daemon ... The following NEW packages will be installed: clamav clamav-base clamav-freshclam libclamav11t64 ...
Update virusdatabase
root@testserver:~# systemctl stop clamav-freshclam.service root@testserver:~# freshclam ClamAV update process started at Sat Nov 16 14:55:48 2024 Sat Nov 16 14:55:48 2024 -> daily.cvd database is up-to-date (version: 27460, sigs: 2067964, f-level: 90, builder: raynman) Sat Nov 16 14:55:48 2024 -> main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr) Sat Nov 16 14:55:48 2024 -> bytecode.cvd database is up-to-date (version: 335, sigs: 86, f-level: 90, builder: raynman) root@testserver:~# systemctl start clamav-freshclam.service
De Clamav-freshclam.service checkt regelmatig voor nieuwe data.
Edit /etc/clamav/freshclam.conf en zet 'Checks' naar 3, dwz 3 x daags.
Test CLAMSCAN
root@testserver:~# clamscan -r /home/benovo Loading: 15s, ETA: 0s [========================>] 8.70M/8.70M sigs Compiling: 3s, ETA: 0s [========================>] 41/41 tasks /home/benovo/.profile: OK /home/benovo/.bashrc: OK /home/benovo/.bash_logout: OK ----------- SCAN SUMMARY ----------- Known viruses: 8699757 Engine version: 1.0.7 Scanned directories: 1 Scanned files: 3 Infected files: 0 Data scanned: 0.00 MB Data read: 0.00 MB (ratio 0.00:1) Time: 19.128 sec (0 m 19 s) Start Date: 2024:11:16 15:12:36 End Date: 2024:11:16 15:12:55
Check met Eicar malware testfile
Maak een tekstbestand aan in /home/benovo en plaats hierin de EICAR malware test string:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
root@testserver:~# clamscan -r /home/benovo Loading: 15s, ETA: 0s [========================>] 8.70M/8.70M sigs Compiling: 3s, ETA: 0s [========================>] 41/41 tasks /home/benovo/.profile: OK /home/benovo/.bashrc: OK /home/benovo/.bash_logout: OK /home/benovo/eicartest: Eicar-Signature FOUND ----------- SCAN SUMMARY ----------- Known viruses: 8699755 Engine version: 1.0.7 Scanned directories: 1 Scanned files: 4 Infected files: 1 Data scanned: 0.00 MB Data read: 0.00 MB (ratio 0.00:1) Time: 19.095 sec (0 m 19 s) Start Date: 2024:11:16 15:28:33 End Date: 2024:11:16 15:28:52
Symbolische links worden niet gevolgd (default)
In tegenstelling tot wat soms gesuggereerd wordt, worden met de default Antimalware File Scanner instellingen, Symbolische Links NIET gevolgd.
Als gevolg worden bijv. de Piwigomappen '_data' en 'gallerie' met de grote datahoeveelheid niet gescand, omdat ze met symbolische links buiten de webroot opgeslagen worden.
Zie ook #man clamscan
--follow-dir-symlinks=[0/1(*)/2]
Follow directory symlinks. There are 3 options:
0 - never follow directory symlinks
1 (default) - only follow directory symlinks, which are passed as direct arguments to clamscan
2 - always follow directory symlinks.
Symbolische links toch volgen
Als alle symbolische links wel gevolgd worden, moeten we zorgvuldig controleren dat data niet dubbel gecontroleerd worden: ten eerste direct de fysieke data en daarna nogmaals via de symbolische link.
Ook moet onnodig scannen van grote datahoeveelheden vermeden worden als deze elders ook al eens gescand zijn.
Als bijvoorbeeld Piwigo gebruikt wordt voor het beheren en presenteren van images dan worden de images en derivaten opgeslagen in sub-mappen van Piwigo.
Voordat ze daar belanden zijn ze al vele malen gescand geweest. De Piwigo app bevindt zich in de webroot /var/www/html en als deze map geselecteerd wordt voor scannen dan worden ook al de images nogmaals gescand, wat uren in beslag neemt.
Dus als we besluiten dat symbolische links gevolgd moeten worden is het belangrijk deze specifieke mappen uit te kunnen sluiten van de scan.
Sluit mappen en bestanden uit van scannen
Er zijn een paar opties die gebruikt kunnen worden om mappen en/of bestanden uit te sluiten van scannen.
Voor het uitsluiten van de Piwigo data voegen we de volgende parameters toe in de commandline
root@testserver:~# clamscan -r /var/www/html --exclude-dir="(\/var\/www\/html\/piwigo\/(_data|galleries))"
Dit resulteert in het niet scannen van:
- /var/www/html/piwigo/_data (symlink naar /home/pwgdata/_data met +/- 35 GB)
- /var/www/html/piwigo/galleries (symlink naar /home/pwgdata/galleries met +/- 300 GB)
Decompress file size exceeds limits
Daily cron waarschuwing na het scannen
test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.daily 2>&1 > /dev/null; } LibClamAV Warning: cli_scanxz: decompress file size exceeds limits - only scanning 105906176 bytes
Verder werd geen informatie verstrekt.
Het schuldige bestand door eleminatie gevonden zijnde /Gparted/live/initrd.img , een Windows.Image bestand. Het is op het oog niet eens een groot bestand ( 38 Mb) maar explodeert waarschijnlijk bij het decomprimeren.
Het scanfiles script aangepast zodat .img en .iso bestanden niet gescand worden.
Hiervoor in script scanfiles regel 41 gewijzigd:
nice -n19 clamscan -ri --exclude=".img" --exclude=".iso" "$S" >>"${LOGFILE}"
Dagelijkse Filescan
SCANFILES script
Voor het dagelijks scannen van de files gebruiken we een script dat middels een cron uitgevoerd wordt.
Bekijk het 'scanfiles' script en/of gebruik Save As om het bestand op te slaan.
NOTE:
Voor de werking van het script is het nodig dat we eerst een aantal mappen en bestanden aanmaken:
root@thuisserver:~# mkdir /var/clamav root@thuisserver:~# mkdir /var/clamav/quarantine root@thuisserver:~# touch /var/clamav/scandirs
In het begin van het script worden verschillende variabelen opgeslagen o.a. het pad naar de te scannen mappen.
In deze sectie kan het script dus eenvoudig aangepast worden aan de serverconfiguratie.
SCANDIRS="/var/clamav/scandirs"; #Bestand 'scandirs' waarin te scannen mappen opgeslagen zijn QUARANTINEDIR="/var/clamav/quarantine"; #Quarantaine map LOGFILE="/var/log/clamav/scanfiles.log"; #Log bestand met resultaat laatste scan NEWPATHS="/var/clamav/newpaths"; #Bestand met paths en bestandsnamen van deze scan gevonden malware RESTOREPATHS="/var/clamav/restorepaths"; #Bestand met path en bestandsnamen van in quarantaine geplaatste malware EMAIL_MSG="Resultaat dagelijkse ClamAV scan:"; #Mail aan Admin EMAIL_FROM="testserver@makkink.eu"; #Afzender mail EMAIL_TO="ben@makkink.eu"; #Adres admin
Te scannen Mappen
# Lees SCANDIRS met lijst te scannnen dirs voor DIRTOSCAN DIRTOSCAN=$(tail -1 ${SCANDIRS});
Resultaat op 18/11/2024 van bovenstaande:
root@homeserver:~# echo $(tail -1 /var/clamav/scandirs);
/home/ububen /home/files/documenten /home/files/afbeeldingen/fotos-huidig /var/www
Update Clamav database
echo "Disable clamav-freshclam.service"
systemctl stop clamav-freshclam.service; #Aan het eind van het script wordt deze herstart
echo "Looking for ClamAV database updates...";
freshclam --quiet;
Verwijder log
Voor het script is het essentiëel dat elke daily scan een nieuw leeg logbestand maakt.
# Verwijder oude log if [ -f "${LOGFILE}" ]; then rm "${LOGFILE}"; fi
Scan de gespecificeerde mappen één voor één
De scan resultaten worden opgeslagen in de LOGFILE
De variabele 'MALWARE' is 0. Als 'infected' bestanden gevonden zijn wordt het aantal opgeteld bij MALWARE.
MALWARE=0;
for S in ${DIRTOSCAN}; do
# total size if we use something like /home/*/public_html for scanning
DIRSIZE=$(du -shc "$S" 2>/dev/null| cut -f1 | tail -1)
echo -e "Starting a daily scan of "$S" directory.\nAmount of data to be scanned is "${DIRSIZE}".";
nice -n19 clamscan -ri --exclude=".img" --exclude=".iso" "$S" >>"${LOGFILE}"
# get the value of "Infected lines"
MALWARE=$(($MALWARE+$(tail "${LOGFILE}"|grep Infected|cut -d" " -f3)));
done
Geen Malware gevonden
Script eindigt na herstart van de clamav-freshclam.service
Malware gevonden
Als er malware gevonden is wordt er een e-mail met de logfile naar de Admin gestuurd.
Vervolgens worden van de gevonden malwarebestanden de bestandsnaam inclusief path opgeslagen in het bestand RESTOREPATHS.
Daarna worden de malwarebestanden
in Quarantaine geplaatst.
# if the value is not equal to zero, send an email with the log details included if [ "${MALWARE}" -ne "0" ]; then #compose content e-mail message body=$'\n'${EMAIL_MSG}$'\n'"==========================================="$'\n'; body+="$(cat "${LOGFILE}")"; body+=$'\n'$'\n'"De bestanden met Malware zijn naar '/var/clamav/quarantine' verplaatst"; body+=$'\n'$'\n'"SSH naar 'Utils > ClamScan' om dit af te handelen"; #Send e-mail message echo "$body"|mail -s "ClamAV: Malware gevonden" -r "${EMAIL_FROM}" "${EMAIL_TO}"; # get newpaths of infected files from logfile" echo "$(grep FOUND "${LOGFILE}"|cut -d: -f1)" > "${NEWPATHS}"; # Store paths for restore echo "$(grep FOUND "${LOGFILE}"|cut -d: -f1)" >> "${RESTOREPATHS}"; # read newpaths file and move infected files to quarantine while IFS= read -r file; do mv "$file" "${QUARANTINEDIR}"; done < "${NEWPATHS}" fi
CRON.daily voor Filescan
Om script 'scanfiles' dagelijks uit te voeren voegen we deze toe aan cron.daily dmv een harde link:
root@thuisserver:~# ln /usr/local/bin/scanfiles
/etc/cron.daily/scanfiles
NOTE: Alleen op produktieserver. Niet nodig op testserver
Alle scripts in /etc/cron.daily worden dagelijks uitgevoerd, dat zijn op dit moment:
root@thuisserver:~# ls -l /etc/cron.daily
total 36
-rwxr-xr-x 1 root root 539 Mar 18 2024 apache2
-rwxr-xr-x 1 root root 376 Jul 22 16:59 apport
-rwxr-xr-x 1 root root 1478 Mar 22 2024 apt-compat
-rwxr-xr-x 1 root root 123 Feb 5 2024 dpkg
-rwxr-xr-x 1 root root 2211 Feb 10 2018 locate
-rwxr-xr-x 1 root root 377 Aug 27 16:26 logrotate
-rwxr-xr-x 1 root root 1395 Aug 27 16:26 man-db
-rwxr-xr-x 1 root root 2548 Oct 30 16:36 scanfiles
-rwxr-xr-x 1 root root 518 Aug 27 16:26 sysstat
De crons starten op tijden zoals vastgelegd in /etc/crontab
root@testserver:~# cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
# You can also override PATH, but by default, newer versions inherit it from the environment
#PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
#MAILTO=""
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.daily 2>&1 > /dev/null; }
47 6 * * 7 root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.weekly; }
52 6 1 * * root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.monthly; }
#
De cron.daily start elke dag om 06:25 uur.
Om mail van cron.daily naar root te voorkomen hebben we aan de cron.daily toegevoegd:
2>&1 > /dev/null
Om mail van alle crons te voorkomen voeg toe na #PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""
Waarschuwing cron.daily i.v.m te grote gedecomprimeerde filesize.
Oplossing: Scan .iso en .img bestanden niet
Whitelist of Delete Malware
Gevonden Malwarebestanden worden in Quarantaine geplaatst en zijn uit de Fileserver en/of Webserver verwijderd.
Het advies is deze malware definitief te verwijderen, maar het is mogelijk dat er met het scannen een false positief geconstateerd is.
Als je om wat voor reden dan ook het malwarebestand wenst te behouden dan is er de mogelijkheid dit bestand te 'whitelisten'.
In dat geval wordt de signatuur van het bestand in een lijst geplaatst en wordt deze in toekomstige scans niet positief bevonden.
Vervolgens wordt het bestand vanuit Quarantaine teruggeplaatst naar zijn oorspronkelijke locatie.
Scanquar script
Bekijk het 'scanquar' script en/of gebruik Save As om het bestand op te slaan.
Als we het script starten terwijl er geen malware in quarantaine staat krigen we onderstaand scherm:
Maar als er Malware in Quarantaine staat:
Het script start met het zetten van enkele variabelen, deze moeten gelijk zijn aan de variabelen zoals gezet in script 'scanfiles'
# Set variables QUARANTINEDIR="/var/clamav/quarantine/"; RESTOREPATHS="/var/clamav/restorepaths"; TEMPFILELIST="/var/clamav/filelist";
Na het weergeven van het 'MALWARE IN QUARANTAINE' scherm vervolgt het script met het opschonen van vorige sessies:
# clear residue mogelijke resten van voorgaande sessie if [ -f "${TEMPFILELIST}" ]; then rm "${TEMPFILELIST}"; fi
Als er geen bestanden in quarantaine staan dan:
Geef boodschap weer en stop script
# Check of er wel malware in quarantaine staat. if [ -z "$( ls -A "${QUARANTINEDIR}" )" ]; then echo " Er staan geen bestanden in Quarantaine, er valt hier niets te doen" echo; echo -n " Drukom terug te gaan"; read foo; exit; fi
Als er wel bestanden in quarantaine staan dan worden deze voorzien van een volgnummer en op de console weergegeven en tevens toegevoegd aan het tijdelijk bestand '$TEMPFILELIST'.
# Lees in quarantaine geplaats bestanden in 'RESTOREPATHS'.
# Print op console en in tijdelijk bestand 'TEMPFILELIST'.
n=1;
while IFS= read -r line;
do
echo " $n:$line"|tee -a "${TEMPFILELIST}";
n=$((n+1));
done < "${RESTOREPATHS}"
Kies op de console uit de weergegeven quarantainebestanden of stop.
Van het gekozen bestand worden variabelen opgeslagen zijnde FULLPATH en deze opgesplitst in DIR en FILE
# Maak keuze uit in quarantaine geplaatste bestanden echo; keuze=; while [ -z $keuze ] ;do echo -n " Kies nummer van gewenst bestand of Q om te stoppen: "; read keuze; done # Geef optie voor Cancel case $keuze in [qQ]) exit;; esac # Haal keuze op. Ga terug naar menu als keuze niet bestaat FULLPATH="$(grep -w "$keuze:" /var/clamav/filelist|cut -d : -f2)"; # Als $FULLPATH niet bestaat of leeg is > ga terug naar selectiemenu if [ -z "${FULLPATH}" ]; then scanquar; exit; fi # Sla resultaten op in Var's DIR="$(dirname "${FULLPATH}")/"; FILE="$(basename "${FULLPATH}")";
Als een bestand gekozen is dan worden er twee opties geboden, zijnde:
'V' voor Verwijderen
en
'W' voor Whitelisting en terugzetten
# Geef keuzelijst met opties weer echo " Geselecteerd bestand:"; echo " ====================="; echo " $(tput setaf 2)"$keuze:""${FULLPATH}"$(tput sgr 0)"; echo; optie=; while [ -z $optie ] ;do echo " Kies:"; echo " $(tput setaf 2)V$(tput sgr 0) voor het geheel $(tput setaf 2)verwijderen$(tput sgr 0) van het bestand"; echo " $(tput setaf 2)W$(tput sgr 0) voor $(tput setaf 2)Whitelisting$(tput sgr 0) en terugzetten in oorspronkelijke map"; echo -n " of $(tput setaf 1)Q$(tput sgr 0) om te stoppen: "; read optie; case $optie in [vVwWqQ]) optie=$optie ;; *) optie=; esac done case $optie in [qQ]) optie=; scanquar;;
NOTE:
De tput settings zijn voor de vormgeving:
tput setaf 1 = set foregound rood
tput setaf 2 = set foregound groen
tput sgr 0 = Turn off all attributes
Keuze VERWIJDER
- Verwijder bestand
- Als quarantainemap nu leeg is, verwijder map
$RESTOREPATHS
- Keer terug naar begin van het script 'scanquar'
[vV]) # echo "Verwijder"; echo; rm "${QUARANTINEDIR}""${FILE}"; if [ -z "$( ls -A "${QUARANTINEDIR}" )" ]; then rm "${RESTOREPATHS}" else grep -v "${DIR}${FILE}" "${RESTOREPATHS}" > /var/clamav/temp && mv /var/clamav/temp "${RESTOREPATHS}"; fi echo " Het Malwarebestand '"${FILE}"' is van de fileserver verwijderd"; echo; echo -n " Drukom verder te gaan"; read foo; scanquar;;
Keuze WHITELIST en zet terug
- Maak checksum van het bestand en plaats deze in /var/lib/clamav/false-positives.sfp
- Plaats het bestand terug naar de map waar het stond voor de scan
-
Als quarantainemap nu nog niet leeg is, verwijder de listing van het bestand uit het bestand $RESTOREPATHS
- Als quarantainemap nu leeg is, verwijder map
$RESTOREPATHS
- Keer terug naar begin van het script 'scanquar'
[wW]) # echo "Whitelist en restore"; echo; sigtool --sha256 "${QUARANTINEDIR}${FILE}" >> /var/lib/clamav/false-positives.sfp mv "${QUARANTINEDIR}${FILE}" "${DIR}${FILE}"; if [ -z "$( ls -A "${QUARANTINEDIR}" )" ]; then rm "${RESTOREPATHS}" else grep -v "${DIR}${FILE}" "${RESTOREPATHS}" > /var/clamav/temp && mv /var/clamav/temp "${RESTOREPATHS}"; fi echo " Het bestand '"${FILE}"' is aan de Whitelist toegevoegd en teruggeplaatst."; echo; echo -n " Drukom door te gaan"; read foo; scanquar;; esac