i76 webdesign, Sittard

10 maart 2010

Weblog Rubrieken

i76 webdesign, Sittard

Linux

Unix rechten voor projectteams

dinsdag, 23 oktober, 2007

Er zijn veel artikelen en pagina’s te vinden over de werking van unix-rechten. Er is echter weinig te vinden over de praktische toepassing ervan. In dit artikel leg ik uit hoe i76 de rechten toepast voor het werken in projectverband op een veilige manier.

Verschillende gebruikers van i76 moeten rechten hebben tot de projecten waar ze aan werken, maar niet tot de projecten waar ze niet aan werken. Onze ontwikkel en productieservers draaien op Linux Debian, maar het door ons toegepaste rechtensysteem geldt ook voor alle overige unix afstammelingen en klonen.

Voor elk project wordt een nieuwe gebruiker aangemaakt die zijn eigen gebruikersgroep heeft. Voor Debian is een eigen gebruikersgroep per gebruiker default en kan worden aangepast in /etc/adduser.conf met de setting USERGROUPS=yes.

# adduser testproj
Adding user `testproj' ...
Adding new group `testproj' (1006) ...
Adding new user `testproj' (1006) with group `testproj' ...
Creating home directory `/home/testproj' ...
Copying files from `/etc/skel' ...

Als een gebruiker toegang moet hebben tot een project dan voegen we hem toe aan de groep met het adduser commando.

# adduser gerard testproj
Adding user `gerard' to group `testproj' ...
Done.

Van nature is Unix een heel open systeem waarbij gebruikers gestimuleerd worden om zoveel mogelijk informatie te delen. Bij de meeste standaard installaties zie je dit terug bij het aanmaken van een gebruiker waarbij de gebruiker zijn homedirectory de rechten 0755 krijgt. Oftewel drwxr-xr-x. De eigenaar mag alles, de groepsleden en overigen hebben lees, verwijder en filescan rechten.
Wij willen dat gebruikers die niet in de groep zitten (other) niet bij directories mogen. Bovendien willen we dat leden van deze groep schrijfrechten hebben:

# chmod 770 testproj
# ls -ld testproj
drwxrwx— 3 testproj testproj 4096 2007-10-23 08:30 testproj

Dit kun je ook als standaard instellen in /etc/adduser.conf met de setting DIR_MODE=770.

Indien een gebruiker binnen een project directory een file aanmaakt, krijgt deze file als eigenaar en groep de gebruiker zelf.

gerard@i76:/home/testproj$ touch foo
gerard@i76:/home/testproj$ ls -l foo
-rw-r--r-- 1 gerard gerard 0 2007-10-23 08:45 foo

Dat zou betekenen dat andere gebruikers binnen deze groep enkel het bestand mogen lezen, maar niet wijzigen. Een aardige domper op de samenwerking.

De oplossing is eenvoudig door de zogenaamde setgid bit op de projectdirectory te zetten.

# chmod g+s testproj
# ls -ld testproj
drwxrws— 2 testproj testproj 4096 2007-10-23 08:46 testproj

Deze zorgt ervoor dat alle files en subdirectories die in deze directory worden aangemaakt bij de groep testproj horen.

gerard@i76:/home/testproj$ touch foo
gerard@i76:/home/testproj$ mkdir foodir
gerard@i76:/home/testproj$ ls -ld foo*
-rw-r--r-- 1 gerard testproj 0 2007-10-23 08:46 foo
drwxr-sr-x 2 gerard testproj 4096 2007-10-23 08:46 foodir

We zien de setgid bit mooi gezet is op de subdirectory, maar de groepsleden hebben enkel leesrechten gekregen op het bestand en de directory. Om de rechten van nieuwe bestanden en directories te bepalen wordt umask gebruikt. umask bepaald welke rechten een bestand niet heeft als deze wordt aangemaakt.

In onze situatie is een umask van 007 geschikt:

gerard@i76:/home/testproj$ umask 007
gerard@i76:/home/testproj$ touch foo2
gerard@i76:/home/testproj$ mkdir foo2dir
gerard@i76:/home/testproj$ ls -ld foo2*
-rw-rw---- 1 gerard testproj 0 2007-10-23 08:47 foo2
drwxrws--- 2 gerard testproj 4096 2007-10-23 08:47 foo2dir

Een default umask kun je opnemen in /etc/profile zodat deze bij het inloggen wordt gezet. Denk eraan dat een webserver nu ook niet bij de bestanden kan. De bestanden waar de webserver bij moet mogen moet je expliciet aanpassen om leesrechten toe te kennen aan other en op de directory waar ze inzitten lees- en filescan-rechten.

chmod o+r foo
chmod o+rx foodir

Geschreven door: Gerard

i76 webdesign, Sittard
Tel 046 4007004
Fax 046 4009640
E-mail