Linux – Shell enzo… deel 1
Linux (en met name Linux Backtrack / Kali) is de favo distributie van menig hacke.. uhhh security professional. Elke Linux distributie kan voorzien worden van een eigen DE – Desktop Environment. Er zijn verschillende Desktop Environments die je kunt kiezen. Denk aan Gnome, KDE Plasme, Unity, Cinnamon en vele andere. Een Desktop Environment zorgt ervoor dat het besturen van je OS een stuk intuïtiever wordt omdat de grafische opmaak veel zaken een stuk duidelijker maken. Het nadeel van DE’s zijn dat ze beperkt zijn en dat niet de volledige functionaliteit van het OS benut kan worden. Linux biedt hiervoor de “shell”.
De termen “terminal” en “shell” worden vaak door elkaar gebruiken en referen meestal aan “Bash” wat eigenlijk een shell is (Bash staat ook voor Bourne Again SHell). Binnen Linux kennen we ook nog de term “console”. Dit zijn de feitelijke verschillen:
Shell:
De “shell” is het programma dat daadwerkelijk commando’s verwerkt en output genereert. De meeste shells beheren ook voor- en achtergrond processen, commando geschiedenis en command line editing. Deze functies (en nog veel meer) zijn standaard in Bash, de meest voorkomende shell in moderne Linux-systemen.
Terminal:
Een “terminal” refereert naar een “wrapper programma” (DE) welke de shell draait. Lang geleden was dit een fysiek apparaat welke uit weinig meer bestond dan een monitor en een toetsenbord. Toen Unix / Linux-systemen betere multiprocessing en windowing systemen toegevoegde, werd het begrip “terminal” omgezet naar software. Nu heb je programma’s zoals Gnome Terminal. Deze programma’s leveren een raamwerk / grafische shell waarin vensters geopend kunnen worden zoals b.v. een venster met een shell.
Console:
De console is een bijzonder soort terminal. Historisch gezien is de console een toetsenbord en een monitor welke aangesloten zijn op een speciale seriële console poort van een computer voor directe communicatie op een laag niveau met het besturingssysteem. Moderne Linux-systemen bieden virtuele consoles. Deze zijn toegankelijk via toetscombinaties (bijvoorbeeld Alt + F1 of Ctrl + Alt + F1). De virtuele console communiceert op een laag niveau met het Linux-besturingssysteem wat betekent dat er geen speciale dienst moet worden geïnstalleerd om met het Linux OS te communiceren. Interactie met de console wordt ook uitgevoerd met een shell programma.
Via de shell (of console) werk je op basis van commando’s. De meest gebruikte (default) shell is “Bash”. Maar net zoals met de DE’s zijn er ook verschillende shells te verkrijgen. Omdat Linux volledig open-source is kunnen we via de shell elk onderdeel aanpassen om het OS volledig naar eigen wens te laten werken.
In deze post en alle opvolgende posts (het wordt een flinke serie) gaan we dieper in op Linux en met name op de Linux Shell. In deze serie leggen we de Bash Commando’s uit om in Linux te navigeren en werken. “Who needs a Desktop Environment when he can use Bash”…right!
Linux directory’s / mappenstructuur
Alvorens we de shell opstarten en gaan gebruiken is het zaak om te weten hoe Linux is opgebouwd. De mappenstructuur is namelijk helemaal anders dan bij Windows en Windows gebruikers moeten hier dan ook meestal aan wennen.
Om te beginnen heeft iedere gebruiker een “Home” directory. In deze directory bevinden zich de mappen “Desktop”, “Documents”, “Downloads”, “Pictures” etc. Dit is erg vergelijkbaar met de persoonlijke gebruikersdirectory in Windows waarin mappen staan als “Desktop” “My Documents”, “My Pictures” etc. In Windows (een beetje afhankelijk van welke versie” bevindt deze persoonlijke directory zich in “C:\gebruikers\%gebruikersnaam%” Binnen Linux bevindt deze zich in “/home/%gebruikersnaam”.
In Windows gebruiken we C:\ om de root aan te geven van het Windows OS. C: is dus altijd het laagste niveau op de partitie waar Windows op geïnstalleerd is. Een andere partitie of schijf in Windows krijgt een andere schijfletter. Binnen Linux werken we niet met een schijfletters maar duiden we de root aan met een foreward slash “/”. Andere partities en schijven worden gezien als “mappen” binnen het Linux OS.
Welke mappen bevinden zich nog meer in de root, en wat is hun functie:
bin
In de bin directory bevinden zich alle essentiële systeem applicaties
boot
De bootfolder bevat bestanden die door de bootloader gebruikt worden om het systeem te booten alsmede de broncode (kernel) van Linux. De kernel bestanden zijn de bestanden die beginnen met “vmlinuz”
dev
De dev folder bevat alle “devices”. Dit zijn fysieke devices (gekoppeld aan hardware) als virtuele devices (die we pseudo-devices noemen). Deze devices worden aangetoond als bestanden. Een voorbeeld:
sda: Dit is de eerste SATA HD in het systeem (fysiek)
random: Dit is een device dat random nummers genereert (pseudo)
null: Een device die geen output genereert en alle input verwijderd (pseudo)
etc
Deze folder bevat alle configuratiebestanden van het systeem. Een paar noemenswaardige configuratiebestanden zijn:
passwd: Alle gebruikers die in het systeem gedefinieerd zijn incl. hun wachtwoorden
fstab: Bestand waarin gedefinieerd staat waar partities en schijven geopend worden
hosts: Het hostsbestand koppeld domeinnamen aan IP adressen (net zoals het hosts bestand in Windows)
init.d: Deze directory bevat scripts voor het booten van het systeem
home
Alle thuisdirectories van de op het systeem bekende gebruikers (zoals hierboven beschreven)
lib
Deze folder bevat de gedeelde bibliotheken (vergelijkbaar met de DLL bestanden in Windows) die door de essentiële binaries in de /bin en /sbin folders gebruikt worden
lib64
Deze folder is identiek aan de lib folder maar dan voor 64-bit bibliotheken (voor 64-bits applicaties)
media
Als verwijderbare media (zoals CD-ROM of USB stick) gemount worden dan wordt er automatisch een folder aangemaakt in de media directory zodat je via de folder de verwijderbare media kunt benaderen
opt
De opt is speciaal voor optionele bestanden. Zo zal software die zich niet aan de Linux file system hiërarchie houdt geplaatst worden in de “opt” directory
proc
De proc directory is de plaats waar het proc pseudofilesystem gemount is. Deze directory bevat speciale bestanden die systeem en proces informatie vertegenwoordigen. Enigszins vergelijkbaar met de “dev” directory maar bevat geen standaard bestanden. Binnen de “proc” directory wordt interfacing met de kernel of met bestaande processen toegestaan. Elk getal binnen /dev komt overeen met een lopend proces
root
Dit is de “home” directory van de “root” user. De “home” directory van de “root” user is dus de enige directory die zich niet in “/home” bevindt
run
Binnen deze directory kunnen programma’s vergankelijke bestanden opslaan welke niet opgeslagen kunnen worden in de “tmp” directory omdat deze bestanden niet zomaar verwijderd kunnen worden. Denk aan sockets en process ID’s
sbin
Deze directory is vergelijkbaar met de “bin” directory. De sbin directory bevat echter alle essentiele “system administration” binaries (programs)
srv
De “srv” directory is een data directory voor services van het systeem. Als je Apache draait dan zul je de website bestanden waarschijnlijk opslaan in een directory binnen de “srv” directory
sys
De sys directory is de plaats waar het sys pseudofilesystem gemount is en is erg vergelijkbaar met de “/proc” directory. Binnen de sys directory wordt eveneens interfacing met de kernel of met bestaande processen toegestaan
tmp
Alle tijdelijke bestanden van alle gebruikers worden hier opgeslagen
usr
De “usr” directory bevat vele soorten databestanden voor applicaties
share/X11 Bevat databestanden voor de Windows X server (grafische interface)
share/dict Woordenboeken die gebruikt worden voor spellingscorrectie
share/doc Vele verschillende documenten
share/man Hier bevinden zich de “man” ofwel “manual” bestanden. Deze bestanden bevatten programma specifieke informatie en zijn te gebruiken vanuit andere applicaties zoals de shell
bin Folder voor minder essentiële applicaties of gebruikersapplicaties
local Installatiefolder voor niet-officiele software
src De src folder bevat alle broncode bestanden van reeds geïnstalleerde pakketten.
var
Deze directory is de beschrijfbare wederhelft van de “/usr” directory (welke normaliter “read-only” is) en bevat variabele bestanden zoals logbestanden en wachtrijen
Symlinks
Binnen deze serie zullen we een aantal keer refereren aan “symlinks” (of voluit “Symbolic Links”). Een Symlink wordt ook wel een “Softlink” genoemd. Een Symlink is een bestand dat is gekoppeld aan een ander bestand of een andere map. Een Symlink is vergelijkbaar met een “snelkoppeling” in Windows.
Aanpassen Shell
Het aanpassen van de Shell is een persoonlijke aangelegenheid. Iedereen heeft zijn eigen voorkeur. Via het menu van Bash kun je al diverse aanpassingen maken. De volgende kan ik je aanbevelen:
Edit – Preferences – General:
-Enable mnemonics (sneltoetsen)
Edit – Preferences – Profiles:
Bewerk je profiel:
-Geef je profiel een naam
-Bewerk de kleuren op de “colors” tab (persoonlijk hou ik niet van de transparante achtergrond en zet deze dus heel laag)
Om een nog betere ervaring aan je shell te geven kun je de volgende applicaties gebruiken:
- Archey – Deze tool laat systeeminformatie zien na het opstarten van een nieuwe shell
- Htop – Deze tool zorgt ervoor dat de procesmonitor binnen de shell er een stuk duidelijker uitziet.
- Dotfiles – Door het dotfiles script toe te voegen aan je bash profiel wordt de output voorzien van duidelijke kleuren.
- iTerm2 – iTerm2 zorg voor veel verbeteringen aan je bash shell zoals autocompletion, kleuren en split-screens.
Wil je verder personaliseren dan kan dat door een “.bash_profile” bestand aan te maken in je home directory. In dit bestand kun je persoonlijke settings van je bash shell inladen.
Note: In de volgende posts houden we geen rekening met deze persoonlijke aanpassingen.