Tips en Trucs 2018

Bestanden en mappen aan een andere eigenaar toewijzen

Linux systemen werken met gebruikers die elk hun eigen werkomgeving hebben. Om deze werkomgeving af te kunnen schermen, krijgen alle bestanden en mappen op uw systeem een gebruiker of eigenaar toegewezen. Enkel de eigenaar van het bestand kan elke bewerking op zijn/haar bestand uitvoeren. De meeste bestanden en mappen op een Linux systeem behoren toe aan de systeemgebruiker root. Andere gebruikers kunnen deze bestanden en mappen niet zomaar aanpassen, verwijderen of uitvoeren. Het systeem is daardoor enigszins beveiligd tegen ongewilde aanpassingen. Soms doet zich de situatie voor dat je een bestand waarvan je eigenaar bent, wilt laten beheren door een andere gebruiker. Bijvoorbeeld bij het doorgeven van een document. Of het doorgeven van een webpagina aan een webserver die enkel met aan de gebruiker wwwrun toegekende bestanden en mappen werkt.

De chown opdracht

Om de eigenaar van een bestand aan te passen, gebruiken we de opdracht chown (CHange OWNer). Als voorbeeld gebruiken we de startpagina van een webpagina. Na het schrijven van de webpagina vragen we met de ls opdracht zijn eigenschappen op:

dany@pindabook:~> ls -lart index.html
-rw-r--r-- 1 dany users 6269 24 aug 20:55 index.html

Daaruit blijkt dat dany de eigenaar (owner) van de webpagina is. Linux heeft drie niveau's waarbij je aan bestanden en mappen beperkingen kunt opleggen. De eigenaar mag alle bewerkingen op zijn eigen bestanden en mappen uitvoeren of er toelating voor geven. De groep gebruikers waartoe de eigenaar behoort, krijgt aparte door de eigenaar vastgelegde bewerkingsmogelijkheden. Alle andere gebruikers krijgen eveneens door de eigenaar vastgelegde bewerkingsmogelijkheden. Er is echter één supergebruiker, namelijk de systeembeheerder root, deze kan alle bestanden en mappen van alle gebruikers zelfs zonder toelating van de eigenaar naar believen beheren.

De ls opdracht toont ons eveneens dat de eigenaar dany tot de groep users behoort. De bewerkingsmogelijkheden van de verschillende gebruikers kunnen we aflezen uit de reeks -rw-r--r--, waarbij het eerste - teken aanduidt dat index.html een bestand is. Daarna staan drie groepen van telkens drie rechten (rwx), waarbij r (read) je toelaat het bestand te openen, w (write) waardoor je het bestand kunt aanpassen en x (eXecute) waarmee je het bestand (programma of script) kunt starten. De eigenaar dany kan het bestand index.html openen en aanpassen (rw-); de gebruikers die tot dezelfde groep van dany behoren, kunnen het bestand openen (r--) en alle andere gebruikers eveneens enkel het bestand openen (r--).

Daar de index.html pagina klaar is om op het internet geplaatst te worden, gaan we de gebruiker van het bestand aanpassen naar root, waardoor enkel de systeembeheerder het bestand nog kan beheren.

dany@pindabook:~> sudo chown root index.html 
[sudo] wachtwoord voor root: 
dany@pindabook:~> ls -lart index.html
-rw-r--r-- 1 root users 6269 24 aug 20:55 index.html

De groep van een bestand aanpassen

Ook de groep van een bestand kan je aanpassen. Om de groep van het bestand index.html van users (gewone gebruikers) te veranderen naar het strengere root (systeembeheerders), gebruik je de volgende opdracht:

dany@pindabook:~> sudo chown :root index.html 
dany@pindabook:~> ls -lart index.html
-rw-r--r-- 1 root root 6269 24 aug 20:55 index.html

Let in de chown opdracht op de : voor de aan te passen groepsnaam. Met : pas je de groepsnaam aan, zonder : de naam van de eigenaar.

In één keer

Je kunt de naam van de eigenaar en de groepsnaam ook in één opdracht aanpassen:

dany@pindabook:~> sudo chown dany:users index.html 
dany@pindabook:~> ls -lart index.html
-rw-r--r-- 1 dany users 6269 24 aug 20:55 index.html

Eerst controleren, dan pas aanpassen

In sommige situaties wil je eerst checken of het bestand een bepaalde eigenaar en groep bezit, voor je deze aanpast. Zo pas je de eigenaar en de groep van index.html enkel aan als deze als eigenaar:groep dany:users heeft:

dany@pindabook:~> sudo chown --from=dany:users root:root index.html 
[sudo] wachtwoord voor root: 
dany@pindabook:~> ls -lart index.html
-rwxr-xr-x 1 root root 6269 24 aug 20:55 index.html

Via een referentiebestand

Wil je een bestand of map dezelfde eigenaar en groep geven als een ander bestand (het referentiebestand):

dany@pindabook:~> ls -lart .bash_history
-rw------- 1 dany users 1818 19 aug 14:26 .bash_history
dany@pindabook:~> sudo chown --reference=.bash_history index.html 
[sudo] wachtwoord voor root: 
dany@pindabook:~> ls -lart index.html
-rwxr-xr-x 1 dany users 6269 24 aug 20:55 index.html

Recursief aanpassen

Om een map en zijn volledige inhoud een andere eigenaar en/of groep te geven, gebruik je recursiviteit (-R). Eerst maken we een map, plaatsen er een testbestand in en passen de eigenaar en groep aan zodat internetgebruikers deze als uploadmap kunnen gebruiken:

dany@pindabook:~> sudo mkdir -p /srv/www/webdav
[sudo] wachtwoord voor root: 
dany@pindabook:~> sudo touch /srv/www/webdav/testbestand.txt
dany@pindabook:~> ls -lart /srv/www/webdav
totaal 8
drwxr-xr-x 5 root root 4096 24 aug 21:20 ..
-rw-r--r-- 1 root root    0 24 aug 21:21 testbestand.txt
drwxr-xr-x 2 root root 4096 24 aug 21:21 .
dany@pindabook:~> sudo chown -R wwwrun:www /srv/www/webdav/
dany@pindabook:~> ls -lart /srv/www/webdav/
totaal 8
drwxr-xr-x 5 root   root 4096 24 aug 21:20 ..
-rw-r--r-- 1 wwwrun www     0 24 aug 21:21 testbestand.txt
drwxr-xr-x 2 wwwrun www  4096 24 aug 21:21 .

Foutmeldingen onderdrukken

Bij het uitvoeren van scripts maken gebruikers zich soms onnodig zorgen bij foutmeldingen. De volgende opdracht veroorzaakt bij mij een foutmelding:

dany@pindabook:~> sudo chown --from=dany:users root:root index.php 
[sudo] wachtwoord voor root: 
chown: kan geen toegang krijgen tot 'index.php': Bestand of map bestaat niet

Door de optie -f toe te voegen onderdruk je de foutmelding:

dany@pindabook:~> sudo chown -f --from=dany:users root:root index.php
dany@pindabook:~> ls -lart index.php
ls: kan geen toegang krijgen tot 'index.php': Bestand of map bestaat niet

Geen foutmelding, maar de opdracht werd ook niet uitgevoerd, het bestand index.php bestaat namelijk niet.

Aanpassen naar groep van gebruiker

Om een bestand of map een andere eigenaar te geven en tegelijkertijd te groep aan te passen naar de groep waartoe de eigenaar behoort, gebruik je:

dany@pindabook:~> sudo chown root: index.html 
[sudo] wachtwoord voor root: 
dany@pindabook:~> ls -lart index.html
-rwxr-xr-x 1 root root 6269 24 aug 20:55 index.html

Let vooral op de positie van de dubbele punt.

Symbolische koppelingen

Zoals gebruikelijk bij symbolische koppelingen (links) worden bewerkingen op koppelingen uitgevoerd op het bestand en niet op de koppeling.

dany@pindabook:~> sudo ln -s index.html default.html
[sudo] wachtwoord voor root: 
dany@pindabook:~> ls -lart index.html
-rwxr-xr-x 1 root root 6269 24 aug 20:55 index.html
dany@pindabook:~> ls -lart default.html
lrwxrwxrwx 1 root root 10 25 aug 14:11 default.html -> index.html
dany@pindabook:~> sudo chown dany: default.html
dany@pindabook:~> ls -lart index.html
-rwxr-xr-x 1 dany users 6269 24 aug 20:55 index.html
dany@pindabook:~> ls -lart default.html
lrwxrwxrwx 1 root root 10 25 aug 14:11 default.html -> index.html

De koppeling zelf blijft dus eigendom van de oorspronkelijke eigenaar en groep.

De eigenaar en groep van een map aanpassen

Dit gaat als volgt:

dany@pindabook:~> sudo chown root:root /srv/www/webdav/
[sudo] wachtwoord voor root:

Met de stat opdracht kan je de aanpassing bekijken:

dany@pindabook:~> stat /srv/www/webdav/
  Bestand: /srv/www/webdav/
  Grootte: 4096         Blokken: 8            IO-blok: 4096   map
Apparaat: 804h/2052d   Inode: 267169       Koppelingen: 2
Toegang: (0755/drwxr-xr-x)   UID: (    0/    root)   GID: (    0/    root)
Toegang:   2018-08-24 21:23:20.291042270 +0200
Gewijzigd: 2018-08-24 21:21:12.029557413 +0200
Veranderd: 2018-08-25 14:17:43.494951277 +0200
Ontstaan:  -

Bij het recursief (-R) aanpassen (inclusief de inhoud van de map), heb je de volgende mogelijkheden voor de koppelingen (opties):

UID en GID gebruiken

Computersystemen werken met getallen (ID's), gebruikers met namen. Zo vertaalt het systeem de gebruiker root naar het gebruikers ID (UID) 0 en de groep root naar het groeps ID (GID) 0. De hoofdgebruiker (niet systeembeheerder) krijgt meestal het UID 1000 en GID 1000. de chown opdracht werkt ook met UID's en GID's:

dany@pindabook:~> sudo chown 0:0 index.html 
[sudo] wachtwoord voor root: 
dany@pindabook:~> ls -lart index.html
-rwxr-xr-x 1 root root 6269 24 aug 20:55 index.html

Zeg me wat je doet

Met de -v (verbose) optie worden alle uitgevoerde bewerkingen op het scherm weergegeven:

dany@pindabook:~> sudo chown 1000:1000 index.html -v
[sudo] wachtwoord voor root: 
de eigenaar van 'index.html' is veranderd van root:root naar 1000:1000
dany@pindabook:~> ls -lart index.html
-rwxr-xr-x 1 dany 1000 6269 24 aug 20:55 index.html

Meer weten

Raadpleeg met de opdracht man chown de manual met een overzicht van de chown opdracht. Met de opdracht info chown krijg je de informatie pagina's met uitgebreidere informatie. En op internet kan je terecht op de chown webpagina van de GNU Coreutils.

chown