Hoofdstuk 6 Devices, partities en filesystemen

vanaf pagina 107

Filesysteem controle. Stel voor dat een systeem door stroomuitval plotseling down is gegaan. Er dient dan een controle plaats te vinden om de inhoudsopgave van het file-systeem weer overeen te laten komen met de inhoud van de harddisk. Bij dit proces kan dus ontdekt worden dat er gegevens verloren zijn gegaan. Dit controle-proces noemt men een filesystem-check en het hiervoor gebruikte commando is "fsck". Hierbij wordt de inhoud van de gehele disk gecontroleerd. reiserfsck wordt gebruikt als de partitie reiserfs als filesysteem heeft. Maar dan moet u (SUSE) wel root zijn plus de desbetreffende partitie umounten. En dit moet allemaal in single-user mode gebeuren (telinit 1)

capaciteit controleren. Als beheerder is het een van uw taken om de beschikbare harddisk capaciteit te controleren. Deze controle kan op een aantal manieren plaatsvinden.

Het "df" command is het meest gebruikte gereedschap voor controle van de beschikbare diskruimte. De uitvoer kan er als volgt uitzien:

rene@linux®:~> df

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/hda2 38687836 3425416 35262420 9% /

tmpfs 95452 8 95444 1% /dev/shm

Het is prettig als u weet hoeveel ruimte er in de /home directory is en dat er ook nog genoeg inodes beschikbaar zijn. Met het "du" commando krijgt u een overzicht van de gebruikte diskruimte onder een bepaalde directory. De optie -s zorgt ervoor dat u alleen de totalen krijgt. U mag dan alleen uw eigen home-directory opvragen, tenzij u root-permissies heeft.

rene@linux:~> su

Password:

linux:/home/rene # du -s /usr

1474812 /usr

Het koppelen van file-systemen.

In het linux systeem staat geconfigureerd welke partitie tijdens het opstarten de / (root) van het systeem wordt. Dan worden er koppelingen gelegd tussen file-systemen en directories."mount" zonder verdere opties en argumenten geeft een weergave van de op dit moment gemounte (gekoppelde) file-systemen. Op dit systeem valt dan te zien dat aan de root /dev/hda2 gekoppeld is en dat daarop reiserfs als filesysteem is geïnstalleerd. Het ontkoppelen van directories en/of parties (en het daarop staande file-systeem) kan met het "umount". Alleen als niet iemand anders gebruik maakt van de directory. Anders wordt de melding "device is busy" gegeven.

Tijdens het opstarten worden een of meer file-systemen gemount. Dit gebeurt door opstartscripts die allerlei controles doen en diverse systeembestanden lezen. Een van die belangrijke bestanden is /etc/fstab. In dit bestand staat een lijst van de beschikbare file-systemen en op welke plaats zij gemount moeten worden. Elke regel bevat als eerste de device-file van de betreffende partitie, vervolgens de directory waarmee de koppeling tot stand moet worden gebracht, daarna het type file-systeem en daarna een aantal opties en vlagen. Als u wilt dat een file-systeem bij het opstarten wordt gemount aan een directory dan dient de volgende regel in /etc/fstab te worden toegevoegd.

/dev/hda5 /test ext2 defaults 0 0

Men kan daarbij uit de volgende opties kiezen:

De twee vlagen hebben de volgende betekenis. De eerste vlag betekent dat het dump programma van dit filesysteem een back-up moeten maken (1=ja, 0 = nee). De tweede vlag heeft invloed op het controleren van het filesysteem check. Een 0 betekent geen check, een 1 betekent als eerste checken en een 2 betekent overige. Voor het root filesysteem staat er een 1, alle andere een 2. Het bestand /etc/fstab kan door u als systeembeheerder naar wens en met behulp van een editor als VI worden aangepast.

rene@linux:~> cat /etc/fstab (bv. mijn SUSE:ik heb dus meer mogelijkheden om aan te geven)

/dev/hda2 / reiserfs acl,user_xattr 1 1

/dev/hda1 swap swap pri=42 0 0

devpts /dev/pts devpt mode=0620,gid=5 0 0

proc /proc proc defaults 0 0

usbfs /proc/bus/usb usbfs noauto 0 0

sysfs /sys sysfs noauto 0 0

/dev/cdrecorder /media/cdrecorder subfs fs=cdfss,ro,procuid,nosuid,nodev,exec,iocharset=utf8 0 0

/dev/fd0 /media/floppy subfs fs=floppyfss,procuid,nodev,nosuid, sync 0 0

Hoofdstuk 7 Bestandsbeheer voor gevorderden

Als gebruiker mag u bepaalde zaken wel doen en bepaalde zaken niet. Dit mechanisme beveiligt linux. Het bestaat onder meer uit de volgende onderdelen:

chmod. Het meest gebruikte commando om de rechten van een bestand te wijzigen. Stel u heeft het volgende bestand in uw directory staan.

ls -l bestand: -rw–r-—r-- 1 cursus users 104 Jul 13 15.49 bestand

U ziet hier als eerste informatie in de regel de toegangsrechten staan. Het eerste karakter is al eerder aan bod gekomen. De 'd' staat voor directory, de 'b' voor een blockdevice, de 'c' voor een character device. De geeft veelal aan dat het een tekstbestand is. De resterende negen karakters bevat de toegangsrechten voor de verschillende drie soorten gebruikers (drie voor de user, drie voor de group, en tenslotte drie voor ieder ander -other-). Een r voor leesrechten (read), een w voor schrijven (write) en een x (execute) voor opstartrechten.

De rechten zijn te veranderen. chmod u-rw+x bestand ; ls -l bestand geeft:

---xr--r-- 1 cursus users 104 Jul 13 15.49 bestand

chmod zorgt er voor dat van de userrechten r/w (cursus) wordt ingetrokken en dat het execute-recht wordt toegekend. Zo kunt u ook de groeprechten (users) veranderen, bv.door chmod g-r+wx bestand. De rechten van ieder ander (other)met bv. chmod o-r+x bestand.

U kunt ook in een keer alles wijzigen. chmod u=rw g=r o=r.

U kunt het ook numeriek doen. Read = 4. Write = 2. Execute = 1

chmod 600 bestand geeft dus:

read en write voor de user

niets voor de group

niets voor de others

chmod 755 bestand geeft dus:

read, write en execute voor de user (4+2+1=7)

read en execute voor de group (4+1=5)

read en execute voor others (4+1=5)

Bij directories geldt dit ook. Een r mag de inhoud van deze directory bekijken. De w mag bestanden aanmaken in deze directory. De x mag naar deze directory toe.

De umask wordt gebruikt om aan te geven welke rechten bestanden krijgen als u ze voor het eerst aanmaakt. Wordt ook wel 'user-file-creation mask' genoemd. Met de optie -S wordt het in symbolische vorm afgedrukt.

Op mijn SUSE machine. umask -S geeft u=rwx g=rx o=rx

Zonder optie geeft mask 022. Hier is het namelijk een optelling van de bits die uiteindelijk niet in de rechten komen mask 022 heeft dus als rechten 644. Dus hier gaat het een beetje fout – zie vraag. 4 bij mij geeft ie 0022

Er zijn een paar speciale toegangsrechten die worden gebruikt om bepaalde zaken mogelijk te maken, maar worden niet veel gebruikt. Het gaat om de rechten SUID, SGRID en 'sticky bit'. Onoordeelkundig gebruik van deze rechten is een absolute bedreiging voor de veiligheid van uw systeem.

SUID of set user ID bit. Het regelt dat het effectieve user-id van een proces dat dit programma draait het user-id is van het programma en niet van de gebruiker die het start. Door het betreffende programma SUID recht te geven en de eigenaar van het programma root te maken worden de beveiligingen omzeilt. Tijdens de uitvoering van het programma is het UID van de root en niet van de gebruiker. Dit is tevens een gangbare methode om te proberen in een systeem in te breken. Het toekennen van het SUID recht kan door middel van chmod u+s o chmod 4000 vraag!!

SGRID werkt hetzelfde als SUID, maar dan wordt het group-id van het betreffende programma gebruikt. Op sommige systemen betekent het dat bestanden die in een bepaalde directory worden geplaatst automatisch het group-id krijgen als de directory zelf. Toekennen kan met chmod g+s of chmod 2000

Als Sticky Bit wordt gezet wordt de tekstimage van een programma opgeslagen op de swapdevice voor een snellere toegang. De gebruiker kan geen bestanden verwijderen uit directories waarvan zij geen eigenaar zijn. Append-only directory. Met een ls -l comamndo ziet u een t achter de toegangsrechten. Een veel gebruikte toepassing is de /temp directory. Toekennen kan met het commando chmod o+t of chmod 1000.

Eigendom. Voor het wijzigen van de eigenaar en de groep bestaan er twee commando's. Het chown (change owner) commando wordt gebruikt om de eigenaar van een bestand te wijzigen. Dit kan uiteraard alleen de root.

Het chgrp commando wordt gebruikt om de groep waartoe een bestand behoort te wijzigen. Eenvoudig in gebruik:

chown piet bestanden (eigenaar is veranderd naar piet)

chgrp anderen bestand (groep is veranderd naar anderen)

De commando's kennen allebei de optie -R waarmee recursief door een directory wordt gegaan. Alle bestanden in deze directory en sub-directories worden dan aangepast. Het chown commando kan ook worden gebruikt om een chgrp uit te voeren. chown piet.anderen bestand. Dit commando wijzigt zowel het user-ID als de group-ID.

Er zijn twee soorten links: de symbolische en harde links. Het begrip link hoeft niet tot verwarring te leiden als u weet dat een bestandsnaam los staat van een bestand.

rene@linux:~>

ln -s bestand bestand2 ; ls -l bestand

-rwxr-xr-x 1 rene users 104 Jul 13 15.49 bestand

lrwxrwxrwx 1 rene users 7 Jul 19 20.26 bestand2 -> bestand

Aan het begin staat een l van link. De link neemt veel minder ruimte in (7 ipv 104). De naam bestand2 verwijst naar bestand. De optie -s in de opdrachtregel geeft aan dat een een symbolische link is. Een link heeft alle rechten omdat uiteindelijk de rechten van het doelbestand gelden.

Een harde link wordt met het zelfde commando (ln) gemaakt, maar is als we de uitvoer van een ls bekijken, minder makkelijk te herkennen.

rene@linux:~>

ln bestand bestand3 ; ls bestand* -il

751658 -rwxr-xr-x 2 rene users 104 Jul 13 15.49 bestand

751734 lrwxrwxrwx 1 rene users 7 Jul 19 20.26 bestand2 -> bestand

751658 -rwxr-xr-x 2 rene users 104 Jul 13 15.49 bestand3

U ziet dat het bestand3 gemaakt is met een harde link. Het is precies het zelfde bestand (grootte) en het bevindt zich op dezelfde inode van de harde schijf. Met de optie -i verschijnt het inode-nummer. Het gebruik van links kan erg gemakkelijk zijn. Als u in een /usr/local/bin directory PATH een link wil aanbrengen in een andere directory. Een symbolische link verdient de voorkeur. Het scheelt ruimte, maar het bestand verdwijnt niet als de symbolische link wordt verwijderd. Dit gebeurt wel bij een harde link.

Bij het kopiëren of op computertape vastleggen van hele directory structuren dient u er op te letten of de symbolische links mee worden gekopieerd. Uit man cp

cp -d bewaar links

cp -s maak symbolische links vanaf de bestemming naar bronbestanden ipv de bestanden te kopiëren

cp -l maak harde links vanaf de bestemming naar de bronbestanden

Quota. Hoe voorkomt u dat een gebruiker de totale beschikbare ruimte van het /home filesysteem in beslag neemt. De oplossing is het diskquota-systeem. Daarmee kan men een niet alleen een maximale grens instellen voor het aantal diskblokken dat een gebruiker mag consumeren, maar ook voor het aantal inodes. Het linux quota systeem werkt alleen voor het ext2 en wordt ingesteld per ext2-filesysteem. Als u een redelijk recente kernel heeft zal de ondersteuning al binnen de kernel geregeld zijn.

Het toevoegen van de quota-optie kan in het bestand ect/fstab gebeuren. Wilt u controleren op userquota dan voegt u usrquota toe, wilt u controleren op groupsquota dan voegt u grpquota toe.

De regel in /ect/fstab wordt dan bv.

/dev/hdc3 /home ext2 defaults,usrquota,grpquota 1 2

Daarnaast moeten er in de top-directory van de filesystemen die gecontroleerd moeten worden de bestanden quota.user en quota.group te staan. Deze mogen alleen eigendom van en lees- en schrijfbaar zijn voor de root.

Dus #touch /home/quota.user

#touch /home/quota.grp

#chmod 600 /home/quota.user

#chmod 600 /home/quota.group

Nu zijn de juiste bestanden gemaakt en voorzien van de juiste rechten. Na een herstart checkt het systeem de nieuwe bestanden en voert controles uit.

Met quotacheck controleert de gewenste filesystemen en genereert aan de hand daarvan een quota-bestand. In het volgende voorbeeld start u handmatig om een reboot overbodig te maken (als root).

quotacheck -avug

De gebruikte opties hebben de volgende betekenis:

-a gebruik de in de fstab aanwezige filesystemen

-v geef informatie over wat er gebeurt

-u controleer de userquota

-g controleer de groupquota

 

De volgende stap is het aanzetten van de quotabewaking. Dit kan met het commando quotaon. quotaoff kan dus gebrukt worden om het weer uit te zetten.

Een van de meest gebruikte commando wordt dan edquota. U kunt met dit programma individuele quota van gebruikers instellen. Vervolgens wordt de editor gestart (standaard vi -afh. van de EDITOR environment variabele). U kunt nu de limieten aanpassen. Er is een softlimit, een hardlimit en een grace periode. Er wordt in het boek niet ingegaan of dit met een ext3 of een reiser anders gaat.

Men kan bestanden op een linux-systeem op twee manieren indelen.

Shareable (deelbaar) versus unshareable (niet deelbaar). Bv. de home-directory kan gedeeld worden in een netwerk met meerdere systemen. Daaren-tegen zijn bepaalde die aangeven dat een bepaald device door een programma niet deelbaar is met andere systemen.

Static versus variable. Bv de home directory die variabele gegevens bevat (en dus rw rechten moeten hebben). De /usr directory bevat daarentegen weer statische gegevens (mits het variabele deel in /var geplaatst is).

shareable Unshareable

static /usr/etc /opt/boot

variable /var/mail/var/run /var/spool/news/var/lock

Het FHS ofwel het File Hierarchy Standard is een standaard die de indeling van linux-systemen beschrijft. Het bestaat uit drie delen.

  1. De root directory,
  2. de /usr hiërarchie
  3. en de /var hiërarchie.

Het feit dat een bestand in het FHS wordt genoemd betekent niet dat dit bestand ook in elke distributie voorkomt of op deze plaats staat. Het betekent alleen dat de FHS voorstelt om het betreffende bestand op een bepaalde plaats neer te zetten.

De inhoud van een root-filesysteem moet voldoende zijn om een systeem te starten, repareren, herstellen en terug te halen. Dit inclusief gereedschapen, configuratiebestanden, en opstartbestanden zoals de kernel en andere essentiële zaken.

 

De linux-directory structuur

/ de root directory

/bin : essentiële commando's. Bevat programma's die in ieder geval zeker nodig zijn in single-user mode. Er mogen geen subdirectories zijn.

/boot : bootloader en kernel. Alles nodig voor het booten behalve de opstartscritps. Zij bevat bestanden die de kernel nodig heeft voordat user-mode programma's worden gestart.

/dev : device bestanden. Lokatie voor speciale en device bestanden

/etc : host-specifieke configuratie-betanden. Bevat configuratie-bestanden. Er horen hier geen programma's te staan. Er kunnen subdirectories zijn, bv van de configuratie van de x(11)-server of van etc/opt voor configuratie van optionele zaken (kde-gnome).

/home : home directory van gebruikers. Bevat individuele directories van gebruikers van een systeem. Op grotere systemen kan men gebruikers weer onderverdelen in groepen. Bv /home/studenten/individuele gebruiker.

/lib : essentiële gedeelde bibliotheken en kernelmodules die nodig zijn om het systeem te starten en de commando's van het root-filesysteem te kunnen verwerken.

/mnt : mountpoint voor koppeling (tijdelijke) filesystemen

/opt : optionele hardware pakketten. Is bedoeld voor add-ons en extra software-pakketten. Meerdere subdirectories (man-doc-include-lib)

/root : home-directory van de root gebruiker. Probeer deze zo klein mogelijk te houden. Het is beter er een goede gewoonte van te maken om het systeem als gewone gebruiker te benutten en indien nodig van het root-account gebruik te maken.

/sbin : essentiële systeem-programma's, maar minder noodzakelijk dan /bin

/tmp : tijdelijke bestanden. Men mag ervan uitgaan dat deze directory zonder grote problemen mag worden leeggemaakt tijdens het opstarten van het systeem.

/usr : tweede hiërarchie. Kan door meerdere systemen worden gedeeld. Is zelf weet onderverdeeld in subdirectories (X11R6, X386, bin, games, include, lib, local, sbin, share, src)

/var : variabele gegevensbestanden. Is voor opslag van varaibele gegevens, inclusief printerspoolbestanden, administratieve en logging-in gegevens. Subdirectories (kunnen) zijn account, cache,log, var, message, opt, run, spool, state, tmp).

Bestanden zoeken. Het programma which kunt u gebruiken als u wilt waar waar een bepaald commando staat. which ls geeft /bin/ls Het bestand staat in de map /bin Het commando type i is ook te gebruiken. Met type wordt een alias ook weergeven (which doet dat niet)

Het commando find wijkt wat af van de gebruikelijke manier van invoeren. De directory waarin gezocht moet worden. De naam van het gezochte bestand. En wat er mee moet gebeuren. Zo kan men bestanden vinden die voor een bepaalde datum zijn gemaakt, of niet groter dan een bepaald formaat zijn.

rene@linux:~> find /home -size +100k zoekt alle bestanden die groter zijn dan 100K.

Locate Het find commando kan veel tijd nodig hebben en het systeem behoorlijk belasten. Als er nu 's nachts een database werd gemaakt met daarin alle bestandsnamen, dan zou u die overdag met een commando kunnen raadplegen. Het maken van een database die het locate commando gebruikt kan met het commando updatedb. Het resultaat wordt opgeslagen in var/lib.

Hoofdstuk 8 Opstarten, runlevels en uitzetten

Als eerste wordt vanaf de eerste sector de bootloader geladen. Er is LILO (Linker Loader), maar tegenwoordig ook GRUB (maakt niet deel uit van LPI). Na een ingestelde tijd begint het systeem de kernel te laden en deze vervolgens te starten. U kunt ook op TAB drukken waarna u een lijst krijgt gepresenteerd van beschikbare kernels waarmee kan worden gestart. U kunt tijdens het bootproces op ALT of SHIFT drukken. Dit is vooral handig als LILO meteen begint linux te booten en u wilt eerst de LILO prompt hebben om het opstartproces te beïnvloeden. Zodra de kernel klaar is start het eerste proces. Dat eerste proces heet init en dat betekent dat de PID 1 is. Op het moment dat de init wordt gestart stopt de kernel met zijn meldingen en gaat zijn werk doen.

init is een programma wat tot doel heeft het hele systeem tot leven te wekken en alle taken te starten die nodig zijn. Daarvoor gebruikt init het configuratie-bestand genaamd /etc/inittab. in deze tabel staan alle benodigdheden voor het resterende opstartproces. Init kent een aantal runlevels. Het inittab-bestand bestaat uit regels met ieder 4 velden gescheiden door een dubbele punt : Deze velden verwijzen naar Id (unieke tekst, maximaal 4 karakters), runlevels (welke is default), action (wat er moet gebeuren), proces (het te starten proces).

Belangrijke regels in inittab:

id:5:initdefault (runlevel 5) en –> si:I:bootwait:/sbin/init.d/boot. Dit script checkt de integriteit van de partities en het filesysteem, zoals aangegeven in etc/fstab mounten, stelt de hostname in etc. Daarna wordt afhankelijk van welk runlevel default is processen opgestart die corresponderen met het desbetreffende level. Als laatste worden een aantal terminals aangesloten (6 stuks). mingetty kijkt of deze actief is. En dan wordt een inlogprogramma gestart waarna de gebruiker kan inloggen.

Tijdens het opstarten van het systeem zijn er ontzettend veel bestanden betrokken. In /var/log/messages wordt het gros van de meldingen opgeslagen. In dit bestand worden niet alleen meldingen geplaatst tijdens het opstarten maar ook gedurende de verdere werking van het systeem. Er wordt veel meer gecheckt. De geladen modules, de specificaties van de hardware (poorten), geheugen, etc. Er zijn een aantal runlevels (in SUSE):

0 een halt van het systeem. Systeem wordt down gebracht, geen reboot

1 single user. Geen andere gebruikers mogelijk. Geen netwerk

2 level voor multi-user, zonder netwerk. Wel terminals (serieel) mogelijk

3 volledige multi-user, met netwerk

4 niet gebruikt in SUSE

5 volledig multi-user met netwerk en X-server en GUI (kde-gnome)

6 reboot

Om naar een ander level te gaan gebruikt u, als root, het telinit commando. telinit 1 betekent dus dat u naar een single-user mode gaat. Dit kan nodig zijn om ongestoord bv de harddisk opnieuw in te delen. telinit is een symbolische link naar het programma init. Omdat init PID 1 heeft.

Het shutdown commando dient voor het gecontroleerd down brengen van het systeem. Alle ingelogde gebruikers krijgen een melding dat het systeem down wordt gebracht. Men kan direct down gaan maar ook na een bepaalde periode (grace). Alle processen worden ingelicht over het down gaan via een SIG-TERM signaal. Het programma kent een aantal opties.

-t vertel init dat het een aantal seconden moet wachten tussen het waarschuwings- en het kill signaal.

-r voer na shutdown een reboot uit.

-h halt het systeem na shutdown

tijd over 5 minuten moet ingevoerd worden als +5

melding. Na tijd kan men een tekst die de gebruikers op hun scherm krijgen.

#shutdown -tr 5 +15 over 15 minuten gaat het systeem uit en reboot

 

Linux® is the registered trademark of Linux Torvalds in the U.S. and other countries.