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
Om een gebruiker uit een groep te verwijderen gebruik je:
gpasswd -d gebruiker groep
Removing user pietjansen from group sftp_only
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.