So, I’ve been moving the site to a VPS - a Virtual Private Server. A VPS is basically the same as a physical server to which you can’t have physical access. When you get your virtual server, most likely it will be setup with a basic disk image with an Operating System and a root account. In my case at DigitalOcean I choose to setup an Ubuntu Linux image and here are the first moves you should take after creating the VPS to get the basic security in place.
Setting up a user account
At DigitalOcean the server images is deployed and once it’s ready you get a mail with the root password. Letting root login over the internet is pretty bad practice, so the first step you should do is login (over SSH) and setup a new user. Creating the new user is done with the adduser command and follow the instructions, then start visudo to grant your new user some special powers:
adduser newuser visudo
In the visudo file you want to add copy of an existing line. Find this line:
root ALL=(ALL:ALL) ALL
… and make a copy of the line. Change the “root” to your newly created login name to grant you new user the right to become root. Save and exit the file. Check out can be come root from you new account (first switch to the new user with the command “su - newuser” (change newuser to you new username), then try to switch back to root by writing “sudo su -” and enter the password to your new user account (not the root password, and surely you didn’t use the same right?). If this success enter “exit” twice to get back to the initial root shell. The new account is setup and has the rights to become root.
Setting up SSH
Next step is preventing root from login in from remote locations (we only want the newly created account from above to be able to login remotely and then change to root if needed).
Setup the .ssh directory
Assuming you have an existing SSH key set start up creating a “.ssh” directory in you new users directory. Add your public key to the directory (it’s probably called “id_rsa.pub”) and name it “authorized_keys”.
- the .ssh directory and the file in it is owned by your newuser-account (not root).
- the directory is set to 0700 and the file to 0600 (using the chmod command).
You should now be able to login to the “newuser” account remotely using SSH.
Reconfiguring the SSH daemon
Asuming your new account is setup and able to login from remote with SSH the next step should be reconfiguring the SSH daemon to a more secyre setup, open the sshd-configuration file with this command (as root):
The changes you should make are these two:
PasswordAuthentication no PermitRootLogin no
The first requires we only allow logins using public-key authentication - no password-only logins. The second denies root to login from remote. If we need root access, we must login with the regular account and then change to root.
Once the changes are med, make sure they take effect by reloading the SSH daemon with this command (as root):
Once this is completed, please move on and setup a firewall.
The emergency hatch
Should you get into trouble and not be able to get back in to your server using SSH, DigitalOcean offers an emergency hatch. If you log into the backend (where you created the VPS) there’s an option to get “console” access to your server. Using this console is as close as you can get to actually sitting with a console next to the machine, and could be the access you needed to fix any misconfiguration or problem preventing you getting in through regular SSH.