Linux – Shell enzo… deel 5
Vandaag zijn we aangekomen bij deeltje 5 van de maandelijkse “Linux – Shell enzo” serie. Deze keer gaan we dieper in op het Linux rechtensysteem en hoe we zelf met deze rechten aan de slag kunnen. Daarnaast gaan we een aantal methodes bekijken m.b.t. software installaties zoals manuale installatie, Apt, RMP en meer. We leren hoe en op welke manieren we software kunnen toevoegen en verwijderen van ons Linux systeem. Als kleine extra kijken we nog even naar system terminal en de Linux headers. Kortom, weer veel interessante dingen om te doen dus laten we snel aan de slag gaan…
Linux rechtensysteem
Alvorens we gaan starten met commando’s is het goed om te snappen hoe Linux (zonder mods) omgaat met rechten. De manier waarop file permissions ingesteld worden is namelijk anders dan in Windows.
Linux kent 3 permissie groepen die aanwezig zijn op elk bestand en op elke directory (hierna te noemen “object”), te weten:
- u – owner
Alleen de originele ontwikkelaar (aanmaker) van het object is “owner” en wordt toegevoegd aan deze groep. - g – group
De “group” groep bevat gebruikers of groepen die aan het object toegekend zijn. - o (of a) – all users
De “all users” groep is de groep die van toepassing is op alle gebruikers van het systeem.
Per groep kunnen we 3 soorten permissies / rechten instellen:
- r = read (lezen)
Het lezen van een object. - w = write (schrijven)
het schrijven of modificeren van een object. - x = eXecute (uitvoeren)
Het uitvoeren van bestand of het bekijken van de directory inhoud.
De rechten in Linux worden weergegeven in 10 letters, b.v.:
-rw-r--r-- |
Dit is te verdelen in 4 delen / octetten:
- | rw- | r-- | r-- |
1. De eerste letter is een “-” als het een bestand is en een “d” als het om een directory gaat. Als er een “l” gedefinieerd staat dan gaat het om een “symbolic link”.
Vervolgens zijn er nog 3 octetten over van elk 3 letters.
2. Het eerste 3-letterige octet laat de rechten zien voor de beheerder (owner) van het bestand.
3. Het 2e 3-letterige octet laat de rechten zien voor leden van de groep die het bestand beheren (group).
4. Het 3e en laatste 3-letterige octet laat de rechten zien voor alle overige gebruikers (all users).
Als we kijken naar het vorige voorbeeld dan weten we nu dat:
- Het gaat om een bestand
- De owner heeft: rw- rechten
- De leden van de groep die het bestand beheren hebben: r– rechten
- Overige leden hebben r– rechten
Maar wat betekenen de rechten:
Je kunt deze bekijken als bits waarbij een waarde 1 is en een – een 0 is. rw- = 110 en 110 = 6 in decimalen. Zie hieronder de omzetting van het 2 cijferige binaire systeem naar binaire cijfers:
00000 = 0
00001 = 1
00010 = 2
00011 = 3
00100 = 4
00101 = 5
00110 = 6
00111 = 7
etc …
- r = 4
- w = 2
- x = 1
Omgerekend hebben we nu de volgende rechten:
- De owner heeft: rw- = 110 (binair) = 6 (decimaal) rechten
- De leden van de groep die het bestand beheren hebben: r– = 100 (binair) = 4 (decimaal) rechten
- Overige leden hebben r– = 100 (binair) = 4 (decimaal) rechten
Als we de binaire nummers achter elkaar zetten is dat 644.
Een aantal voorbeelden van rechten in Linux:
- 777 = rwxrwxrwx = Hier zijn geen restricties. Iedereen heeft volledige rechten op het bestand.
- 755 = rwxr-xr-x = De owner heeft volledige rechten op het bestand, de leden van de groep kunnen lezen en uitvoeren en de overige gebruikers kunnen ook lezen en uitvoeren.
- 700 = rwx—— = De owner heeft volledige rechten op het bestand maar niemand anders heeft toegang tot dit bestand.
- 666 = rw-rw-rw- = Iedereen heeft lees en schrijfrechten op dit bestand.
- 644 = rw-r–r– = De owner heeft lees en schrijfrechten op het bestand, de overige gebruikers kunnen dit bestand alleen lezen.
- 600 = rw——- = De owner heeft lees en schrijfrechten op het bestand maar niemand anders heeft toegang tot dit bestand.
Werken met Linux rechten
Nu we inzichtelijk hebben hoe het Linux rechten systeem is opgebouwd wordt het tijd om ermee te gaan werken.
Om de actuele rechten op een object te bekijken gebruik je het volgende commando:
ls -l |
Om rechten toe te kennen of te modificeren gebruiken we het “chmod” commando. Bovenstaande voorbeeld zag er als volgt uit “-rw-r–r–“. Als ik nu aan de group gebruikers “rw” (read + write) rechten wil toekennen i.p.v. alleen “r” (read) rechten dan gebruik ik het volgende commando:
chmod g+rw testfile1.txt |
Het “chmod” commando is als volgt opgebouwd:
1. Group (u, g, o)
2. Rechten toevoegen (+) of verwijderen (-)
3. Type rechten
Om de read rechten van de “all user” groep compleet te verwijderen doen we:
chmod o-r testfile1.txt |
Bovenstaande rechten (rw-rw—-) staan gelijk aan “660” in decimalen. We kunnen rechten ook aanpassen door decimalen te gebruiken. Dit werkt makkelijker omdat we hiermee meerdere groepen in 1 keer aan kunnen passen. Stel je voor dat we de rechten willen veranderen naar 666 (rw-rw-rw-) dan voeren we het volgende commando uit:
chmod 666 testfile1.txt |
We gebruiken het “chown” commando om de owner (u) en de group (g) aan te passen. Dit kan alleen als je superuser bent. Het commando is dan als volgt: “chown owner:group”. Om owner en group aan te passen naar “jarno” voeren we dus het volgende uit:
chown jarno:jarno testfile1.txt |
Group (g) leden aanpassen werkt middels het “chgrp” commando. Het terug aanpassen naar de “root” groep werkt als volgt:
chgrp root testfile1.txt |
Op de positie van de execute (x) flag kan ook een “setuid/setgid” gedefinieerd staan. Als deze gedefinieerd is wordt deze getoond als een “s” wanneer de groep ook “execute” rechten heeft en als een “S” als de groep geen –x- rechten heeft. De setguid/setgid permissie verteld het systeem om het bestand altijd te draaien als “owner” met goedkeuring van de rechtmatige “owner”.
Wees voorzichtig met het gebruik van setuid / setgid bits in machtigingen. Als je ten onrechte setuid/setgid rechten toekent voor een bestand waarbij de “root” deze rechten heeft dan kun je je systeem openstellen voor indringers.
We kunnen de setuid / setgid machtiging als volgt toekennen (en verwijderen):
chmod g+s testfile1.txt |
In bovenstaande voorbeeld zien we ook een “sticky bit” karakter welke op de –x- positie van de “all users” groep genoteerd kan worden. Het sticky bit is ontzettend handig in netwerkomgevingen wanneer er gewerkt wordt met gedeelde bestanden. Het sticky bit zorgt ervoor dat het bestand alleen door de owner hernoemd en verwijderd kan worden. Het sticky bit passen we als volgt toe:
chmod +t testfile1.txt |
Setuid / setgid / stickybit e.d. zijn “speciale permissies. Als er speciale permissies toegekend zijn dan is dit ook zichtbaar in de weergave. De bestandsnaam is dan ingekleurd:
Zoals al in de eerdere “Linux – Shell Enzo” delen verteld hebben we op ieder systeem 2 speciale gebruikers, te weten:
su – Voer een commando uit als superuser. Je moet hiervoor ook de gebruikersnaam en wachtwoord van de superuser ingeven. Om de “su” sessie te verlaten type je “exit” en dan werk je weer met je reguliere gebruikers rechten.
Om bash uit te voeren als superuser gebruik je dus:
su |
Na het invoeren van de juiste credentials werk je als superuser tot bash wordt gesloten of tot het “exit” commando gegeven wordt.
sudo – In sommige distributies (b.v. Ubuntu) kun je een gebruiker lid maken van een superuser groep. Voor het starten van een commando kun je dan het sudo commando plaatsen. Er wordt dan niet om de credentials van de superuser gevraagd (als bij “su”) maar om de gegevens van een gebruiker die lid is van de superuser groep. Op die manier kun je commando’s tijdelijk (een voor een) als superuser uitvoeren.
sudu apt-get update |
Software installeren
Een ander “lastig” ding in Linux is het installeren van software. Linux kent vele soorten manieren en de meeste zijn lang niet zo gemakkelijk als de methodes die we gewend zijn van Windows. Dubbelklikken, volgende, volgende, klaar. Helaas. We kunnen veel soorten software installeren of vele soorten manieren. We gaan de volgende methodes bespreken:
- Manuele installatie (compilen e.d.)
- apt
- dpkg
- rpm
- yum
Linux manuele installatie
Het kan voorkomen dat je handmatig de software download en dat deze niet doelgericht is gemaakt voor jouw Linux distributie. Deze software moet je dan nog compilen vanuit de bron zodat deze werkbaar gemaakt wordt op jouw distributie. Dit proces is wellicht het lastigste installatieproces.Het installatieproces bestaat uit de volgende stappen:
- Download de software
- Pak deze nog uit (meestal is het een archiefbestand)
- Configureer de installatie
- Maak de installatie gereed
- Start de installatie
Alvorens we starten moet onze distributie over de juiste software (zoals de GCC compiler) beschikken om bestanden te kunnen compilen. De meeste distributies kunnen dit out-of-the-box. Zo niet, voer dan eerst het volgende commando uit om de juiste software te installeren:
sudo apt-get install build-essential |
Het downloaden van de applicatie is logisch toch? Vervolgens gaan we de bestanden uitpakken. Hoe dit moet hebben we in deel 4 van Linux – Shell Enzo besproken. Dit werkt b.v. als volgt:
tar xvf software1.tar.gz |
Als alle bestanden uitgepakt zijn, is er een nieuwe directory aangemaakt. Ga in deze directory en gebruik het volgende commando:
./configure |
Het ./configure bestand controleert het systeem op de benodigde software om het programma te maken. Het “./” voorvoegsel zorgt ervoor dat Bash in de huidige directory zoekt naar het “configure” bestand en deze uitvoert. Zonder de “./” zou Bash in de systeem directories zoeken naar het configure programma. Er zijn applicaties die iets anders gebruiken voor het configureren van de software. Indien dit het geval is, lees dan de bijgeleverde instructies.
De kans is groot dat er nu foutmeldingen tevoorschijn komen van software die we op het systeem missen (dependencies). Deze software moeten we eerst downloaden alvorens we verder kunnen gaan. Soms kunnen deze dependencies in 1 keer geïnstalleerd worden via het commando:
sudo apt-get build-dep software1 |
Als alle benodigde pakketten geïnstalleerd zijn kunnen we doorgaan met de volgende stap, het compilen van de software (ofwel het maken van een valide installatiepakket). Het compilen van de software doen we met het volgende (simpele) commando:
make |
Het “make” proces kan een tijdje duren en zou zonder fouten moeten lopen als alle dependencies aanwezig zijn. Het “make” proces kunnen we ook draaien met een aantal extra flags zoals -d voor debug informatie, -i voor het negeren van fouten en -s voor een “silent make”. Hoe het “make” proces te werk gaat is afhankelijk van de ontwikkelaar welke het “Makefile” bestand geschreven heeft. Meestal kan het “make” proces ook uitgevoerd worden als “make clean” en “make distclean” waarbij het “make clean” commando alle tijdelijke bestanden achteraf verwijderd en het “make distclean” proces de boomstructuur hersteld zoals deze was voordat de software werd uitgepakt (alle bestanden worden na het “make” proces verwijderd).
Als het programma “compiled” is dan is deze nog niet geïnstalleerd. Het programma is nu klaar om geïnstalleerd te worden. Dit doen we als volgt:
sudo make install |
Het programma wordt nu waarschijnlijk geïnstalleerd in de “/usr/local” directory.
Het is aan te raden de programma directory niet te verwijderen. Deze bestanden kunnen later nog eens nodig zijn. Zo hebben we de bestanden ook nodig voor het verwijderen van het pakket. Om het pakket te verwijderen gebruiken we:
sudo make uninstall |
Programma’s die via deze handmatige methode geïnstalleerd worden, worden niet automatisch geüpdate. Hou deze dus in de gaten om tijdig veiligheidsproblemen te patchen met nieuwe software.
Linux APT installatie
Linux maakt gebruik van verschillende repositories. Deze repositories zijn eigenlijk grote bibliotheken met software welke met 1 klik op de knop geïnstalleerd kunnen worden. Denk hierbij aan b.v. de appstore. Deze repositories kunnen vanuit de shell of de grafische interface benaderd worden. Vanuit hier kun je de applicaties met 1 klik of 1 commando installeren. Een van die commando’s is het “APT” commando. Dit commando hebben we eerder gezien voor de update commando’s zoals “apt-get update”.
APT staat voor “Advanced Packaging Tool” is een C++ software management pakket welke gebruikt wordt in Linux distributies die gebaseerd zijn op Debian. APT kan gebruikt worden via de terminal. Synaptic is de grafische gebruikersinterface van APT. Met APT kunnen we de volgende zaken uitvoeren:
- Het downloaden van (.deb) pakketten uit repositories
- Automatisch aanvullen van pakket dependencies
- Updaten van pakketten en de Linux distributie
- Verwijderen van pakketten
- Zoeken naar software
Kortom, een zeer uitgebreid software management pakket waarmee software installeren net zo gemakkelijk wordt als in Windows en op sommige vlakken zelfs vergelijkbaar met de app-store van je telefoon.
Bovenstaande eigenschappen gaan we in nader detail bekijken. Zoals we al eerder bekeken hebben worden de repositories toegevoegd in het /etc/apt/sources.list bestand. APT zal deze repositories gebruiken.
Om de databases van APT up-to-date te houden moeten deze regelmatig geupdate worden. Dit gaat via het volgende commando voor de apt-get database:
apt-get update |
Het volgende commando update de apt-file database:
apt-file update |
Laten we eens een applicatie (pakket1) gaan zoeken. Het volgende commando wordt hiervoor gebruikt:
apt-cache search pakket1 |
Als ook de omschrijving van de gevonden pakketten weer willen geven gebruiken we:
apt-cache show pakket1 |
We kunnen ook meteen de dependencies van een pakket opzoeken:
apt-cache showpkg pakket1 |
We kunnen ook zoeken naar pakketten die een bepaald bestand (bestand1) bevatten:
apt-file search bestand1 |
Als we het gewenste pakket hebben gevonden kunnen we deze automatisch downloaden en installeren middels het volgende commando:
apt-get install pakket1 |
Om meer softwarepakketten in 1x keer te installeren geven we simpelweg meerdere pakketten op:
apt-get install pakket1 pakket2 pakket3 |
Om de dependencies van een pakket te zoeken en installeren gebruiken we:
apt-get build-dep pakket1 |
APT kan eveneens gebruikt worden om de software te verwijderen:
apt-get remove pakket1 |
Bovenstaande commando verwijder de applicaties maar laat configuratie bestanden in tact. Om het complete pakket en alle bestanden te verwijderen gebruiken we:
apt-get purge pakket1 |
Om een pakket en alle dependencies te verwijderen gebruiken we:
apt-get autoremove pakket1 |
Om dependencies te verwijderen die niet meer door de software gebruikt worden gebruiken we:
apt-get autoremove |
Om ook alle .deb bestanden (installatiebestanden) te verwijderen uit de “package cache” van pakketten die niet meer geïnstalleerd zijn gebruiken we het commando:
apt-get autoclean |
Alle bestanden uit de “package cache” verwijderen doen we met:
apt-get clean |
Bovenstaande commando zorgt ervoor dat alle installatiebestanden van alle pakketten opnieuw gedownload moeten worden als deze nodig zijn en is dus niet aan te raden bij trage internetverbindingen.
Tenslotte is er ook een commando om automatisch defecte applicaties te repareren. Deze is:
apt-get –f install |
Linux dpkg installatie
dpkg staat voor “Debian PaKaGe” en wordt evenals APT gebruikt om in Debian distributies van Linux software te beheren. dpkg en APT hebben vele overeenkomsten. Het grootste verschil is dat “dpkg” niet automatisch pakket dependencies installeerd terwijl APT dit wel kan. dpkg werkt als volgt:
Ook met dpkg gaan we zoeken naar het pakket: pakket1. Dit werkt als volgt:
dpkg -l pakket1 |
Het mooie aan bovenstaande commando is dat we meteen zien of het pakket al geïnstalleerd is. We kunnen voor het zoeken ook wildcards gebruiken. B.v.:
dpkg -l *akket1 |
Om specifiek te bekijken of een bepaald pakket al geïnstalleerd is gebruiken we de “-s” flag:
dpkg -s pakket1 |
Als een pakket al geïnstalleerd is kunnen we ook gemakkelijk opvragen in welke paden de bestanden geplaatst zijn:
dpkg -L pakket1 |
Meer informatie en dependencies kunnen we opzoeken middels het commando:
dpkg --print-avail pakket1 |
Om de bestanden in een pakket te bekijken gebruiken we de “-c” flag:
dpkg -c pakket1 |
Als we het gewenste pakket hebben gevonden kunnen we deze automatisch downloaden en installeren middels het volgende commando:
dpkg -i pakket1 |
Het dpkg commando kan ook gebruikt worden om lokale dpkg pakketten te installeren. Stel je voor dat we 5 .deb files (5 softwarepakketten) in de folder “debinstall” en subfolders van “debinstall” hebben staan. Dan kunnen we al deze pakketten als volgt installeren:
dpkg -R --install debinstall |
Om een pakket alleen uit te pakken maar niet te installeren of configureren gebruiken we:
dpkg –unpack pakket1 |
Om pakketten te verwijderen met dpkg gebruiken we:
dpkg –r pakket1 |
Bovenstaande commando verwijder de applicaties maar laat configuratie bestanden in tact. Om het complete pakket en alle bestanden te verwijderen gebruiken we:
dpkg –p pakket1 |
Linux RPM installatie
RPM staat voor “Red Hat Package Manager”. Zoals de naam al doet vermoeden is RPM ontwikkeld voor Red Hat Linux. Tegenwoordig wordt RPM in de meeste Linux distributies gebruikt om software te beheren. De RPM manager installeert, beheerd, updatet en verwijderd software van het systeem.
RPM beheerd een eigen database van geïnstalleerde pakketten en bestanden. RPM kent ook een grafische interface, namelijk de “Package Management Tool”. RPM werkt met “rpm” bestanden.
Het RPM commando werkt met een aantal flags welke we eerst door gaan namen.
- i – Install
De “i” flag geeft aan dat het om een pakket installatie gaat - v – Verbose
De “v” flag is de “verbose” flag. De “verbose” optie zorgt ervoor dat u veel informatie over het installatieproces te zien krijgt - h – Hash Symbols
De “Hash Symbols” flag zorgt ervoor dat er tijdens de installatie een duidelijke voortgangsbalk wordt weergegeven
Nu we weten welke belangrijke flags er zijn kunnen we deze in de praktijk gaan toepassen. Het installeren van een rpm pakket gaat als volgt:
rpm -ivh pakket1 |
Controleer de checksum van het RPM pakket met de “–checksig” optie:
rpm –checksig pakket1
Om eerst te de afhankelijke software (dependencies) te bekijken gebruik je de -q flag. De “q” is voor “Quiry de software”. Vervolgens gebruiken we de “-p” flag welke een lijst laat zien met de eigenschappen van software. Tenslotte gebruiken we de -R flag om de dependencies te bekijken:
rpm -qpR pakket1
Op het moment dat we een RPM proberen te installeren zal RPM controleren of alle dependencies aanwezig zijn. Als dit niet zo is dan zal RPM een melding geven. Het kan betekenen dat de dependencies niet aanwezig zijn of dat deze wel aanwezig zijn maar niet middels RPM geïnstalleerd zijn waardoor deze niet voorkomen in de RPM database en RPM deze software ook niet herkend. Als we de software toch willen installeren dan gebruiken we de “–nodeps” flag. Dus:
rpm –ivh --nodeps pakket1 |
RPM zal weigeren om reeds geïnstalleerde pakketten nogmaals te installeren. Een pakket updaten kan wel met de “U” flag.
rpm –Uvh pakket1 |
Als je toch wilt downgraden naar een lager versienummer dan moet de “–force” flag gebruikt worden:
rpm –Uvh --force pakket1 |
Pakketten verwijderen doen we met de “e” flag (van erase):
rpm –e pakket1 |
Met de “-q” optie kun je nog meer doen. Je “queriet” hiermee het pakket. “rpm –ql” laat een lijst zien met alle bestanden van geïnstalleerde RPM software. “rpm -qa –last” zorgt voor een lijst van recentelijk geïnstalleerde RPM pakketten. En “rpm -qa” zorg voor een overzicht van alle geïnstalleerde RPM pakketten. Voor meer informatie over het RPM pakket kun je de “rpm -qi” optie gebruiken.
Als de RPM database corrupt raakt moet deze gerepareerd worden. Dit doen we met de volgende commando’s:
cd /var/lib rm __db* rpm –rebuilddb rpmdb_verify Packages |
Linux YUM installatie
Om RPM beheren nog gemakkelijker te maken zijn er diverse innovaties bedacht. Een daarvan is “yum”. YUM staat voor “Yellowdog Updater, Modified”. Yum is gemaakt in Python en is afhankelijk van RPM. Yum gebruikt zijn eigen repositories en kent ook verschillende grafische interfaces waaronder “Yum Extender” (yumex). Yum wordt gebruikt voor de installatie van pakketten maar ook voor het automatisch updaten van deze pakketten en het verwijderen. Yum controleert en beheerd dependencies en is qua functionaliteit redelijk vergelijkbaar met het eerdere genoemde APT. Yum wordt nog veel gebruikt maar zal op termijn vervangen worden door DNF. DNF is gemaakt met “libsolv”.
Allereerst een aantal veelgebruikte Yum flags:
- -y (yes)
Beantwoord alle vragen met “ja” - -c (config file)
Specificeer de locatie van het configuratiebestand - -d (debug)
Stel het debug level in (hoe hoger het level des te meer debug logging er plaatsvindt) - -h (help)
Laat het helpbericht zien - -C (cache)
Draai Yum volledig uit de cache (dus zonder iets te downloaden)
Om software te zoeken kunnen de “search” optie gebruiken:
yum search pakket1 |
Meer informatie opvragen over de software en de dependencies kan met de “info” optie:
yum info pakket1 |
De “install” optie zorgt ervoor dat de software geïnstalleerd wordt evenals eventuele dependencies die nodig zijn:
yum install pakket1 |
We kunnen ervoor zorgen dat tijdens de installatie alle vragen met “yes” beantwoord worden door het toevoegen van de “-y” flag:
yum –y install pakket1 |
Om een applicatie te verwijderen gebruikt je de “remove” optie:
yum remove pakket1 |
De update optie zal de oudere software en dependencies updaten naar de nieuwste versie:
yum update pakket1 |
Om alle geïnstalleerde pakketten te laten zien kun je de “list” optie gebruiken:
yum list installed | less |
Binnen Yum bestaan ook softwaregroepen zodat u deze niet 1 voor 1 hoeft te installeren. Om alle groepen te zien gebruikt je de “grouplist” optie:
yum grouplist |
Om een hele groep met software te installeren gebruiken we de “groupinstall” optie:
yum groupinstall 'DNS Name Server' |
Het updaten van den softwaregroep gaat met de “groupupdate” optie:
yum groupupdate 'Graphical Internet' |
En het verwijderen met de “groupremove” optie:
yum groupremove 'DNS Name Server' |
Systeem Terminal / Login Loop
Zelf heb ik helaas meerdere malen te maken gehad met problemen waardoor inloggen onmogelijk was. 1 van deze issues was b.v. een login loop veroorzaakt doordat er nieuwe software geïnstalleerd was maar meestal nadat de systeem core van Linux geüpgrade was (sudo apt-get install dist-upgrade).
Op het moment dat het niet meer lukt om in te loggen in het systeem dan is het goed om te weten dat je met de toetsencombinatie “CTRL + ALT + F1” of “CTRL + ALT + F2” kunt schakelen naar de systeem terminal. Op dat moment verlaat je dus de grafische weergave en kom je in de terminal.
Vanuit hier kun je het systeem controleren en herstellen. In het geval van een login loop moeten de volgende zaken als eerste gecontroleerd worden.
De /tmp folder moet de volgende rechten hebben: “drwxrwxrwt” en moet root als eigenaar hebben en root als beheersgroep. Dit doe je met het volgende commando:
ls –l / |
Vervolgens is het zaak om ervoor te zorgen dat je owner bent van het .Xauthority bestand. Het .Xauthority bestand kan worden gevonden in de home directory van gebruikers en wordt gebruikt om referenties op te slaan in in cookies welke weer gebruikt worden door “xauth” voor authenticatie van X-sessies. Zodra een X sessie wordt gestart, wordt het cookie gebruikt om connecties te verifiëren.
Je moet owner zijn van dit bestand omdat je anders geen informatie kunt opslaan en je dus niet kunt inloggen. Om owner te worden van dit bestand gebruik je het commando:
sudo chown username:username .Xauthority |
Als dat niet lukt kunnen we ook het bestand hernoemen. Dit doen we als volgt:
sudo mv ~/.Xauthority ~/.Xauthority.old |
Reboot nu (reboot) of ga terug naar de grafische weergave (toetsencombinatie “CTRL + ALT + F7”) en reboot vanuit de grafische weergave.
Als dit alles geen effect had dan kan het probleem van een login loop ook te maken hebben met “lightdm”. “lightdm” is de display manager van Ubuntu welke de X servers en gebruikerssessies start.
We kunnen allereerst proberen om “lightdm” opnieuw te configureren. Dit doen we als volgt:
sudo dpkg-reconfigure lightdm |
Als dat ook niet werkt kunnen “lightdm” opnieuw installeren:
sudo apt-get purge lightdm && sudo apt-get install lightdm |
Als ook dat niet werkt dan kunnen we kiezen om een andere manager te gebruiken (b.v. “gdm”). Om “gdm” te verwijderen moeten we eerst “lightdm” verwijderen. Het hele commando ziet er als volgt uit:
sudo apt-get purge lightdm && sudo apt-get install gdm |
We kunnen dus via de systeem terminal het systeem repareren en modificeren, zelfs als we niet meer in kunnen loggen.
Linux Headers
Wat echter ook nogal eens voorkomt is dat we tijdens een handmatige installatie de opmerking krijgen dat de Linux Headers niet aanwezig zijn of dat deze incorrect zijn. Maar wat zijn nu eigenlijk de Linux Headers?
De Headers zijn sets bestaande uit een aantal bestanden. Deze bestanden definiëren de “Application Programming Interface” (API) voor de programma’s. Dus als je b.v. tijdens het schrijven van een bepaalde C++ code de functie: getWidget (myContext); gebruikt dan moet ergens in uw “build pad” (welke gebruikt wordt tijdens het compileren) een header moeten worden beschreven die aangeeft waar de getWidget (Context c) gedefinieerd is.
Header files eindigen meestal op .h of soms .h ++. Broncode bestanden meestal eindigen op .c, .cpp of .c ++. De broncode bestanden hebben vaak verwijzingen naar header bestanden.
Om een programma te compileren welke gebruik maakt van een “functie bibliotheek” (library), moet u de header-bestanden hebben voor deze bibliotheek, zodat de compiler de code kan controleren op “syntax problemen”. Dit doet de compiler door de geschreven code te vergelijken met de definitie in de header(s). Je hoeft niet de volledige broncode van de library te hebben om de functies te gebruiken. Header files zijn stukken kleiner en maakt het proces dan ook sneller.
In het kort: Tijdens het compilen heeft de code slechts een klein beetje informatie nodig van de functie die gebruikt wordt. De header files voorzien in deze informatie. Als de compiler alle informatie nodig had zou deze de source code van de functie moeten inspecteren welke stukken groter is waardoor het proces dus langer duurt.
Tegenwoordig zijn header bestanden vrijwel nooit meer standaard opgenomen in Linux distributies. De reden hiervoor is omdat de meeste distributies de gebruiker binaire (pre-compiled) pakketten voor het systeem aanbied (APT – RPM etc.). Omdat je in dat geval niet zelf hoeft te compileren, hoef je ook niet te zoeken naar functie definities in de headers.
1. Als u binaire pakketten te installeren, je hoeft niet header-bestanden nodig hebt (NVidia is een uitzondering die ik zal uitleggen)
2. Als u de bron pakketten te installeren, dan heb je de header-bestanden en / of de bron van de afhankelijkheden van dat pakket nodig
Als de kernel headers nodig zijn dan kunt u deze altijd installeren.
Kernel header pakketten variëren van naam en kunnen zowel ‘linux-headers’ als ‘kernel-headers’ heten of andere variaties welke eindigen op ‘-headers’. Header bestanden van andere softwarepakketten zijn meestal verkrijgbaar in de * -devel (op) of * -dev pakketten. Dus als je de headers van een specifiek product nodig hebt dan kun je deze zelf compileren middels deze development pakketten.
Om de Linux Headers van je ditributie te verkrijgen zou je het volgende commando kunnen gebruiken:
sudo apt-get install linux-headers-`uname -r` |
De `uname -r` toevoeging is een variabele (utsname) die de huidige versie en informatie ophaalt van de huidige kernel. Als de huidige kernel “4.8.0-kali-amd64” is dan voert het bovenstaande commando dus de volgende opdracht uit:
sudo apt-get install linux-headers-4.8.0-kali-amd64 |
That’s it…. for today
Hartelijk dank voor het volgen van de Linux – Shell Enzo posts. Na deze 5e post moet je al goed om kunnen gaan met Linux en de meeste basishandelingen zelfstandig uit kunnen worden. Je zult ondertussen ook al diverse problemen tegengekomen zijn die je zelf opgelost hebt. Knap!! Ga zo door. Wij gaan in ieder geval door met deeltje 6! In deel 6 gaan we kijken naar het mounten van apparaten, bekijken we disk commando’s en gaan we kijken naar networking commands. Tot dan.q