• linkedin

Archives for : Linux

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

mysqlbackup-ng i ny tappning

MySQLBackup-NG är ett trevligt litet skript som tar backup på MySQL-databaser, komprimerar filen och sedan skickar iväg den med scp till önskad plats.

Jag har nästan skrivit om det totalt sedan version 1.1 som tidigare fanns på Google Code vilket betyder att 2.0 är 100% POSIX-kompatibelt och fungerar på både OpenBSD och under Linux som t.ex. Ubuntu Server 10.04.

Ni hittar MySQLBackup-NG hos github:

–  Johan Ryberg

free – Dagens terminalkommando

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

johan@xps-laptop:~$ free
total used free shared buffers cached
Mem: 2033472 890648 1142824 0 27308 322920
-/+ buffers/cache: 540420 1493052
Swap: 3172796 0 3172796

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.

johan@xps-laptop:~$ free -m
total used free shared buffers cached
Mem: 1985 876 1109 0 27 316
-/+ buffers/cache: 532 1453
Swap: 3098 0 3098

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

Återställ Gnome (radera personliga inställningar)

Ibland händer det att man råkat krascha gnome-panel, bytt tema till något som inte fungerar eller man har gjort något annat som gjort att man vill börja om från början.

För att rensa sina personliga inställningar i Gnome och återställa till Ubuntu original så behöver man endast radera ett par kataloger.

Om du kan använda skrivbordet trycker du Alt+F2 och skriver “gnome-terminal” och sedan klickar du på “Kör”. Om du inte ens kan använda Gnome måste du ut i en av konsolerna vilket du kommer åt genom att trycka följande tangentkombination: Ctrl+Alt+F1, logga in med din vanliga användare.

Utför sedan följande kommando:

sudo rm -rf .gnome .gnome2 .gconf .gconfd .metacity

Lösenordet som skall användas är ditt eget.

För att inställningarna skall aktiveras måste du sedan starta om Gnome, enklast är att starta om X. Utför följande kommando:

sudo /etc/init.d/gdm restart

Nu är skrivbordet återställt till sitt ursprung

— Johan Ryberg

Så här byter du namn på din Ubuntu-maskin

Om du av någon anledning behöver byta namn på din maskin eller om t.ex. domänen du använder byter namn så är det viktigt att du uppdaterar din konfiguration.

Det finns tre filer som eventuellt behöver uppdateras vilka är “/etc/hosts”, “/etc/hostname” samt “/etc/resolv.conf”. Om du har dynamisk IP så kommer resolv.conf uppdateras automatiskt från din DHCP-server

I filen “/etc/hostname” står endast datorns värdnamn vilket bara skall vara ett enda “ord”, t.ex:


Uppdatera sedan “/etc/hosts” så att datorns fullständiga värdnamn och domän står med i filen som t.ex: localhost wastebin

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

I exemplet ovan står datorn under domänen “”

Den 3:e filen är “/etc/resolv.conf” som behöver uppdateras
Den kan se lite olika ut men ett standardutseende är ungefär som följer:


Det är alltså viktigt att uppdatera alla tre för att domännamn och värdnamn skall stämma överens med verkligenheten.

För att förändringarna skall tas är det enklast att starta om maskinen eller köra följande script:

sudo /etc/init.d/

— Johan Ryberg

Skriv "virus" till Linux i 5 enkla steg

Jag hittade detta mycket intressanta blogginlägg från “foobar” med rubriken “How to write a Linux virus in 5 easy steps“. Den sårbarhet som beskrivs är ett ett känt problem men som man ännu inte bryr sig om i varken KDE eller Gnome, Xfce har dock lagt in någon form av skydd.

Kortfattat handlar sårbarheten om att man bifogar genvägar eller mer kända som “launchers” i t.ex. ett e-postmeddelande vilket är en liten textfil som innehåller en länk till ett exekverbart program samt vilken ikon man vill ha. Denna launcher behöver inte vara exekverbar i sig utan för användarvänlighetens skull så fixar Gnome och KDE detta och kör kommandot som står beskrivet i filen. Detta kommando kan t.ex. hämta hem script från Internet och sedan exekvera det. Vad som händer sedan är upp till programmeraren men det kan t.ex. vara en Firefox-plugin som stjäl lösenord eller vart nu fantasin sätter sina gränser.

Läs mer här:

— Johan Ryberg