• linkedin

Archives for : Terminalkommandon

Configure SSH for high security

There are some steps to do after SSH is installed on a system and there is a old saying that says “A chain is only as strong as its weakest link” and if you are using a weak password for your root account (or any other account) then you are extremely vulnerable. It does not matter if the communication is secure when you are easily brute forced. All steps is used on a Ubuntu 11.10 but should be the same on OpenBSD, Debian, Linux Mint or any other Linux distribution with none or very few modifications.

We are going to do the following steps

  • Create certificate
  • Set correct credentials to .ssh folder and files
  • Shut down the possibility to log in with password
  • Prevent root to log in via SSH
  • Remove less secure encryption methods
  • Enable visual identification of the server fingerprint
  • Optional: Change SSH port (does really not not increase security)

Create certificate
We are going to use a RSA-key with a key length of 4096 bits. Open a terminal and enter the following “‘ssh-keygen -t rsa -b 4096”.  1024 bits key should be enough but better to be safe than sorry.

johan@johan-laptop:~$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.

Then you will be asked where to store the key. If you already got keys in id_dsa then you should enter another file name or your existing keys will be overwritten. If you are satisfied with the suggestion simply press enter.

Enter file in which to save the key (/home/johan/.ssh/id_rsa):

It’s now time to enter a password. Use a strong password with big and small letters, numbers and symbols. The password should also be unique and stored on a secure place like in a encrypted container like Keepass.

Enter passphrase (empty for no passphrase): 2sWf3+@/’?B>.%DpBU”r
Enter same passphrase again: 2sWf3+@/’?B>.%DpBU”r
Your identification has been saved in /home/johan/.ssh/id_rsa.

Your public key has been saved in /home/johan/.ssh/
The key fingerprint is:
The key’s randomart image is:
+–[ RSA 4096]—-+
|     o++ ..o.    |
|      Eoo ..     |
|      . o   . .  |
|     .   o o +   |
|      . S   +    |
|     . o o o     |
|    . + o .      |
|     + o .       |
|    . .          |

Enable the public key for authentication
The public key should be stored in ~/.ssh/authorized_keys and there can be more then one key for a single user. Just make a new row for each public key. If you key should be installed on the same system from where you just created the private key simply copy to authorized_keys

johan@johan-laptop:~$ cd ~/.ssh
johan@johan-laptop:~/.ssh$ cp authorized_keys

If you want to use the public key on another machine you could simply copy the public key using scp (secure copy). Please notice that you will replace existing authorized_keys if you already has one in place. To copy simply write the following command.

johan@johan-laptop:~/.ssh$ scp -p ~/.ssh/authorized_keys
johan@’s password:
authorized_keys 100% 1839 1.2MB/s 00:00

Set correct credentials to .ssh folder and files

Make sure that your working folder is your home folder, replace “johan” with your username.

johan@johan-laptop:~/.ssh$ cd ~
johan@johan-laptop:~/.ssh$ sudo chown -R johan:johan .ssh
johan@johan-laptop:~/.ssh$ sudo chmod -R 600 .ssh
johan@johan-laptop:~/.ssh$ sudo chmod +x .ssh

Do a test log in to test the public key

johan@johan-laptop:~/.ssh$ ssh johan@localhost
Enter passphrase for key ‘/home/johan/.ssh/id_rsa’:

After you entered the private key password you should have access to your machine, if not you will have to look for errors in the logs but I will not cover this in this guide.

Configure sshd
The next step is to modify sshd. All settings we will change is in the file /etc/ssh/sshd_config. Start to make a backup of sshd_config just in case.

johan@johan-laptop:/$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_backup


Use desired editor to edit sshd_config. I prefer vi but I will use nano in this example

johan@johan-laptop:/$ sudo nano /etc/ssh/sshd_config

The following lines is going to be added or altered:

  • PermitRootLogin yes
  • #PasswordAuthentication yes
  • Ciphers

PermitRootLogin no

root should never be used since it much more secure to use a regular user instead and then you need to perform a administrative task use the command sudo instead which gives you temporary administrative rights
We are also going to prevent the possibility to log in with password (you will be forced to use the private key). Find the rows which looks like  this:

PermitRootLogin yes

Modify it to look like this

PermitRootLogin no

Find the row which look like this

#PasswordAuthentication yes

Modify it to look like this

PasswordAuthentication no

At the end Cipers is going to be added and it may not apply never installations but the default ciphers has not always been the best choices and sshd should be forced to only use the strongest ones.

Ciphers aes128-ctr,aes256-ctr,arcfour256,arcfour,aes128-cbc,aes256-cbc

More information about why to alter the ciphers can be found here:

Verify these entries:

  • Protocol 2
  • UsePrivilegeSeparation yes
  • StrictModes yes
  • RSAAuthentication yes
  • PubkeyAuthentication yes

Save and exit

Restart to active the settings.

johan@johan-laptop:~/.ssh$ sudo service ssh restart
ssh start/running, process 2212

Enable visual identification of the servers fingerprint (Visual Host Key)
It’s not easy to verify and remember the fingerprint of a host since it’s a long hexadecimal string that may look like this one: ” 31:b0:be:0b:5b:7c:f1:79:65:e4:72:42:18:08:c4:8d” , some one may have altered the DNS record so that you in fact are trying to authenticate to a rouge server and to remember that string is near impossible. . It’s more easy to remember a visual fingerprint but it’s still not bulletproof. It’s absolute best to verify the exact string every time and that is done by most SSH clients and for example openssh stored them in ~/.ssh/known_hosts and gives you a warning if it has changed.

Do the following to enable visual host key

Edit eider /etc/ssh/ssh_config witch effects all users on the system or ~/.ssh/config to enable it for a single user.

Add the following lines (“Host * is already at top of ssh_config)

Host *
VisualHostKey yes

Test and verify
It’s now time to test and verify. You should not be able to log in without your private key and password authentication should been disabled. You should also see your visual finger print when you tries to log in.

Your SSH should be more safe now but remember that SSH probably was the most secure software from the beginning with default settings and MySQL, Apache or any other system also has to be secured.

—  Johan Ryberg

Så här använder du brandväggen ufw i Ubuntu (Uncomplicated firewall)

Senast förändrad 2009-10-21

Det finns ingen brandvägg som standard aktiverad i Ubuntu, inte ofta i några andra distributioner heller för den delen och det kan vara smart att aktivera en brandvägg för att ge ett grundläggande och extra skydd. Det är lätt gjort att man testar att installera någon LAMP-lösning för att labba lite och sedan glömmer man av att det faktiskt finns en Apache, MySQL och lite annat smått och gott som körs i bakgrunden på maskinen.

Denna guide förutsätter att du använder Ubuntu 8.04 eller senare. Programprofiler (Application profile commands) kräver 9.04 och egressfiltrering, filter per interface och bash autoavslutning kräver Ubuntu 9.10.

Kort om ufw (Uncomplicated Firewall)
ufw är ett mycket enkelt program för att administrera netfilter vilket är den brandväggsfunktionalitet som finns inbyggt i Linux kärna. Ufw kommunicerar inte direkt med netfilter utan går via iptables som är det normala gränssnittet mot netfilter men som normalt är relativt komplicerat att använda och därför skapades ufw som ett ramverk ovanpå iptables för att förenkla och göra brandväggskonfigurationer lättförståeliga för samtliga. Ufw administreras via konsolen eller genom att grafiskt gränssnitt som heter gufw

Få hjälp med ufw
För att få hjälp skriv “man ufw” Om man bara skriver ufw får man upp en grundläggande instruktion:

Grundläggande konfiguration
Blockera allt som standard
Detta exempel fungerar även om du fjärradministrerar din maskin eftersom vi kommer öppna för SSH innan vi aktiverar brandväggen.

En nyhet med den ufw 0.29 som följer med Ubuntu 9.10 är att man nu även kan filtrera utgående trafik. Man brukar kalla riktningen för utgående trafik för egress och inkommande trafik för ingress. Anger man ingen riktning så förutsätter ufw att man avser inkommande trafik alltså ingress-filtrering och utgående trafik är som standard alltid tillåten.

Börja med att blockera ALL trafik in till din dator.

# sudo ufw default deny
Default policy changed to ‘deny’
(be sure to update you rules accordingly)

Nu kan inget komma igenom brandväggen. Om du t.ex. har en ssh-server för administration måste du nu öppna för tcp port 22.

Tillåt vissa portar/protokoll
Denna regel tillåter inkommande trafik på port 22, protokoll tcp

Aktivera brandväggen
Sedan får man se till att brandväggen startas med datorn

Man måste inte starta om hela datorn för att aktivera ufw första gången då det går lika bra med en tvingande omladdning av ufw

För Ubuntu fram till 9.04 använder du följande kommando

# sudo /etc/init.d/ufw force-reload
* Stopping firewall: ufw…
* Starting firewall: ufw…

Om du använder Ubuntu 9.10 använder du följande kommando

# sudo service ufw start

Kontrollera att dina regler stämmer
Kontrollera sedan att dina regler finns på plats

Testa gärna konfigurationen via någon hemsida som kan scanna din anslutning. Ett tips är ShildsUP! från Steve Gibson

— Johan Ryberg

2009-05-04: Första utgåvan
2009-10-21: Anpassat inlägget för Ubuntu 9.10

Aktivera färgglad konsol i Ubuntu 9.10

Om du tycker att konsolen känns lite tråkig så kan man piffa upp den genom att aktivera färger. Enklast är att editera ~/.bashrc och leta upp raden “#force_color_prompt=yes”. Ta bort brädgården framför så att det står:


Du måste sedan avsluta sessionen och starta upp en ny för att aktivera förändringen

— Johan Ryberg

byobu – Visa extra systeminformation i screen

byobi eller tidigare känd som screen-profiles är ett script som hjälper till att konfigurera screen för visa mer information i terminalen. byobi används med fördel på en server och eftersom man inte har någon grafisk miljö och då får man en fin statusrad längst ner på skärmen som visar t.ex. statusmeddelanden, CPU-användninig, ledigt minne, klockan och systemets upptid.

Installation av byobu under Ubuntu 9.04

Redigera /etc/apt/sources.list med din favoriteditor och lägg till följande rader i slutet av filen:

# byobu
deb jaunty main
deb-src jaunty main

Lägg till projektets nyckel

sudo apt-key adv –recv-keys –keyserver A42A415B4677D2D22EB05723CF5E7496F430BBA5

Uppdatera förrådet

sudo apt-get update

Installera byobu

sudo apt-get install byobu byobu-extras

Konfigurera sedan screen genom att starta byobu, tryck F9 och utför önskade ändringar och ladda sedan om med F5. Efteråt används screen som vanligt.

Mer information:

— Johan Ryberg

Vim-nox – Dagens terminalkommando

Vi är en standardeditor i de flesta Unix-miljöer och till Linux används Vim (startas med vi). Vim står för Vi IMproved och är en vidareutveckling av Vi

Jag tänkte inte gå in på hur man använder Vi utan detta är ett tips om en variant av Vim som heter Vim-nox som är vanliga Vim utan support för X och som åtgärdar lite irriterande småproblem med originalet som skickas med i t.ex. Ubuntu.

En av sakerna som jag personligen har stört mig mest på är att när man skriver in text och vill förflytta sig uppåt eller nedåt mellan raderna med piltangenterna så skjuter man in nya rader istället för att förflytta vilket är mycket enerverande. Vim-nox löser detta problem vilket är fullt tillräckligt för mig att byta.

Vim-nox installeras i terminalen med följande kommando:

sudo apt-get install vim-nox

— Johan Ryberg

free – Dagens terminalkommando

Med kommandot free så får du ledigt arbetsminne (ram), även swap visas.

Som du ser är inte utskriften särskilt användarvänlig, lätt till växeln -b,-k,-m eller -g vilket ger utskrift i bytes, Kbyte, Mbyte eller Gbyte.

Minne som är “cached” är sådant som går att återanvända vid behov men som även skrivs över om det skulle behövas mer ledigt minne. Just nu har jag 1109 Mbyte ledigt ramminne + 316 Mb som är mellanlagrat så jag har nästan 1.5 Gb ledigt

— Johan Ryberg

"tab" (slutför kommando) – Dagens terminalkommando

Tangenten “Tab” är inget kommando i sig men det är något som underlättar enormt mycket eftersom bash kan slutföra kommandon åt dig.

Om du t.ex. skriver “ifcon” och trycker på “tab” så kommer bash slutföra kommandot åt dig och lägga till resterade så att det står “ifconfig” i terminalen. bash kan alltid slutföra unika kommandon men om det finns flera potentiella kommando så får du istället upp en lista på dem som går att slutföra och du måste själv lägga till några tecken så att det till slut blir unikt och går att slutföra.

Testa med att skriva if och tryck “tab” vilket kommer ge dig 4 olika förslag av kommandon. Lägg till bokstaven “c” så det står “ifc” vilket är unikt för ifconfig så slutför bash kommandot åt dig.

Samma sak gäller sökvägar och filnamn i kombination med kommandon.

För mer hjälp om bash skriver du “man bash”.

— Johan Ryberg

nano – Dagens terminalkommando

nano är en enkelt textbaserad text-editor och startas genom att skriva “nano” men oftast i samband med ett filnamn som t.ex “nano /var/log/messages”. Just messages är kanske inte en fil man normalt går in och ändrar i men det är en fil alla har och som blir ett bra exempel.

Väl inne i nano får man hjälp genom att trycka Ctrl+g vilket är ett av dem viktigaste kortkommandona.

För att avsluta trycker man Ctrl+x vilket även ger frågan om man vill spara genom att ange N för Nej (No) eller Y för Ja (Yes). Tryckte man Ctrl+x av misstag ångrar man genom att trycka Ctrl+c för att avbryta.

Page up och Page down fungerar som vanligt, även piltangenterna.

För att snabbt hoppa till slutet på en rad trycker man Ctrl+e och för att hoppa tillbaka trycker man Ctrl+a

Det finns mänger med trevliga snabbkommandon att använda men man klarar sig bra utan dem för enklare editeringar.

Om man tycker nano är lite för enkelt så finns alltid “vi” vilket jag brukar använda eftersom vi i princip alltid finns i dem flesta Unix-liknande system som t.ex OpenBSD och Sun Solaris men även i strippade embedded-system baserade på Linux så det är ett mycket bra alternativ att lära sig.

— Johan Ryberg

clear – Dagens terminalkommando

När man har mycket på skärmen och skall skriva något avancerat kommando så brukar många trycka enter flera gånger för att få lite utrymme och för ökad läsbarhet. Kanske är det bättre att rensa hela skärmen vilket kan gör med kommandot “clear”. Kommandot har inga växlar utan är kanske ett av dem mest simpla som finns.

— Johan Ryberg

df – Dagens terminalkommando

Om man är intresserad av att veta hur hårddiskarna används så är “df” rätt kommando att använda. Skriver man bara df så får man standardutskriften vilket kan se ut som följer:

johan@crm:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 19734388 1297384 17434552 7% /
tmpfs 257028 0 257028 0% /lib/init/rw
varrun 257028 64 256964 1% /var/run
varlock 257028 0 257028 0% /var/lock
udev 257028 2628 254400 2% /dev
tmpfs 257028 0 257028 0% /dev/shm

Tyvärr visas inte informationen i något vidare läsbart format som standard och för att få lite mer lättläst format som man är van vid lägger man till växeln -h (human readable) precis som för ls.

johan@crm:~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 19G 1.3G 17G 7% /
tmpfs 252M 0 252M 0% /lib/init/rw
varrun 252M 64K 251M 1% /var/run
varlock 252M 0 252M 0% /var/lock
udev 252M 2.6M 249M 2% /dev
tmpfs 252M 0 252M 0% /dev/shm

— Johan Ryberg