Debian server beheer

Een gebruiker toevoegen

Om een gebruiker toe te voegen moet je ingelogd zijn als root of je gebruikt je gewone login en het su commando. Het toevoegen van de gebruiker "janweijers" doe je met deze opdracht:

useradd janweijers

Om een wachtwoord in stellen gebruik je de opdracht:

passwd janweijers

Debian vraagt je dan een wachtwoord in te voeren (twee keer). De nieuwe gebruiker kan zelf zijn wachtwoord wijzigen. Vervolgens moet je een thuismap voor de nieuwe gebruiker maken en de gebruiker eigenaar van die map maken:

mkdir /home/janweijers chown janweijers /home/janweijers

Het kan ook nodig zijn de gebruiker toegang tot andere mappen te geven. Als je bijvoorbeeld een virtuele site voor de gebruiker aanmaakt dan moet de gebruiker ook toegang tot de map krijgen waar de bestanden van die site in staan, bijvoorbeeld:

chown -R janweijers /srv/www/nl.janweijers

Als de virtuele site in de map nl.janweijers staat. Hier gebruik ik de optie -R zodat ook de submappen van de map van eigenaar veranderen.

Alternatief: adduser

Adduser is een perl script wat het ietsje makkelijker maakt om een gebruiker aan te maken:

adduser janweijers

Het script vraagt vervolgens om een wachtwoord te kiezen en maakt de directoy /home/janweijers aan met de juiste rechten.

Maildir maken

In beide gevallen moet je nog zelf de Maildir voor deze gebruiker aanmaken:

mkdir /home/janweijers/Maildir chown janweijers /home/janweijers/Maildir

ssh en telnet toegang weigeren

Als je een gebruiker aanmaakt alleen voor een website en e-mail hoeft deze gebruiker geen ssh toegang te hebben. Ook uit veiligheidsoverwegingen kun je er voor kiezen zo min mogelijk gebruikers toegang tot ssh te geven. Om een gebruiker uit te sluiten doe je:

usermod -s /usr/sbin/nologin janweijers

Met het commando usermod pas je een gebruiker aan, -s betekent dat je een nieuwe shell instelt. nologin is geen echte shell maar weigert alleen de login. Als gebruiker janweijers vervolgens probeert in te loggen is dit het resultaat:

This account is currently not available. Connection to mijndomein.com closed.

Hou er wel rekening mee dat de gebruiker dan ook geen bestanden meer kan uploaden over ssh. Om een gebruiker opnieuw toegang tot ssh te geven doe je:

usermod -s /bin/bash janweijers

Wel scp, geen shell

Met ssh kun je een gebruiker wél toegang geven tot scp zonder toegang te hebben tot een shell. Dat betekent dus dat die gebruiker via poort 22 op een veilige manier bestanden op de server kan plaatsen maar geen toegang heeft tot de andere onderdelen van ssh. Bewerk de ssh configuratie:

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup1 nano /etc/ssh/sshd_config

Zorg dat de volgende regel er in staat:

Subsystem sftp /usr/lib/openssh/sftp-server

Nu voeg je voor elke gebruiker aan het eind van het bestand het volgende blok toe:

Match User gebruiker ChrootDirectory %h AllowTCPForwarding no ForceCommand internal-sftp

Je moet er wel op letten dat de home directory van de gebruiker eigendom is van root en dat alle mappen in de home directory van de gebruiker zijn:

chown gebruiker:gebruiker -R /home/gebruiker chown root:root /home/gebruiker

Tenslotte ssh opnieuw opstarten:

/etc/init.d/ssh restart

En uiteraard moet je er voor zorgen dat alle bestanden waar deze gebruiker bij moet kunnen ook in de home map staan. Denk dan bijvoorbeeld ook aan de logfiles van Apache.

Nog eleganter: wel scp, geen shell middels een groep

Een nog elegantere oplossing is het gebruiken van een groep om je klanten alleen toegang te geven tot sftp en niet tot een shell. Maak eerst een extra groep aan:

groupadd sftp_only

Vervolgens voeg je alle gebruikers die alleen sftp moeten hebben één voor één toe aan deze groep:

usermod -G sftp_only [gebruikersnaam]

Bewerk nu de sshd configuratie:

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup2 nano /etc/ssh/sshd_config

En voeg daar het volgende blok aan toe:

Match Group sftp_only ChrootDirectory %h AllowTCPForwarding no ForceCommand internal-sftp

Alle gebruikers die in de groep sftp_only zitten hebben nu alleen sftp (dus geen shell) en alleen toegang tot de map /home/[gebruikersnaam]. Tenslotte ssh opnieuw opstarten:

/etc/init.d/ssh restart

Het voordeel van deze oplossing is dat je nu niet meer aan de configuratie van ssh hoeft te komen. Een nieuwe gebruiker voeg je toe aan de groep sftp_only en dat is dan alles.

Lijst van gebruikers en groepen

Wil je de lijst van alle bestaande gebruikers op je systeem zien:

cat /etc/passwd | cut -d":" -f1

Om de thuismap van alle gebruikers te zien doe je:

awk -F":" '{print "user: "$1", Home directory is: "$6}' /etc/passwd

Om te weten in welke groepen een gebruiker zit doe je:

groups [gebruikersnaam]

[gebruikersnaam] : [gebruikersnaam] sftp_only klanten

Je kunt ook een lijst opvragen van alle groepen:

less /etc/group

ssl-cert:x:106: postfix:x:107: postdrop:x:108: dovecot:x:109: spamd:x:5001: clamav:x:110:

Je kunt ook opvragen wie lid is van een groep:

grep ^sftp_only: /etc/group

sftp_only:x:1002:[user1],[user2],[user3]

Wat je in feite doet met deze opdracht is grep vragen in /etc/group de regel te zoeken die begint met sftp_only. Als je de uitvoer nog wat netter wilt maken kun je cut gebruiken om de eerste drie velden er af te halen:

grep ^sftp_only /etc/group | cut -d ":" -f 4-

[user1],[user2],[user3]

Gebruiker wissen

Soms wil je ook weer van een gebruiker af. Het is aan te raden om eerst een backup van de bestanden van die gebruiker te maken. Vervolgens verwijder je de gebruiker door:

userdel -r gebruiker

Dit wist de gebruiker uit het systeem. De optie -r zorgt er voor dat ook de map /home/gebruiker en alles wat daar in staat gewist wordt. Bestanden in andere mappen zul je zelf nog moeten wissen.

Als de gebruiker ook een website had moet je die nog apart verwijderen:

a2dissite website.conf

Site website.conf disabled. Run '/etc/init.d/apache2 reload' to activate new configuration!

/etc/init.d/apache2 reload

Als er voor deze gebruiker een mysql database bestond moet je deze ook apart verwijderen, bijvoorbeeld via de command line van mysql:

mysql -u root -p

Je moet nu het root wachtwoord van mysql invoeren. Vervolgens zie je de mysql prompt:

mysql>

Je kunt nu een database wissen met de volgende opdracht:

drop database [databasenaam]

Mail doorsturen naar andere gebruikers

Er zijn meerdere manieren om mail voor je gebruiker door te sturen naar een andere account. De makkelijkst manier is een .forward bestand maken in de thuismap van de gebruiker:

nano /home/[gebruiker]/.forward

In het bestand zet je de naam van een andere gebruikers of een extern e-mail adres.

Een andere manier is het gebruik van aliases. Bewerk het bestand:

nano /etc/aliases

Je ziet dan ongeveer iets als dit:

mailer-daemon: postmaster postmaster: root nobody: root hostmaster: root jan: iemand@gmail.com

Voeg een regel toe met de forward die jij nodig hebt. Na het aanpassen van nano /etc/aliases moet je het bestand bij postfix aanmelden met rtwee opdrachten:

newaliases postfix reload

Let op dat .forward belangrijker is dan /etc/aliases. Als je dus in beide bestanden een doorstuuradres plaats wordt altijd die uit .forward gebruikt.