My Keepass2 setup with Android, Firefox and sync

Motivation

A couple of weeks ago I read another article about a major security breach of a big online service and finally decided that I need a special password for every service I’m using. Up until then, I always used about 6 passwords for online stuff. More important sites got one of the better passwords, irrelevant sites one of the poor ones, but a lot of sites shared passwords. Since I try to use only three user names (private, gaming and work) if they are available, it wouldn’t have been too hard to try my password they stole from service X on service Y with not a bad chance of success.

It’s not my first try to use a central application for my passwords, but all failed because of trust or usability. I want to be able to use this on all my computers, on my mobile and on the go, so I needed a synced solution. There are a few around, but I don’t trust this kind of data hosted on a server thats not mine. So this is the first solution that was comfortable to use and secure for my needs. All the tools here are open source, which doesn’t makes them secure, but we can hope there are people checking them out. 🙂

I’ll show mostly my setup, all the tools described here are heavily customizable, so check all the options after the initial setup to adapt them exactly to your needs. But this will hopefully get you started.

KeePass

First we need to install KeePass2. There are versions for the major operating systems on their website, I tried Linux (used the packages shipped with Ubuntu) and Windows.

Create a new database
Create a new database

Now that we installed KeePass, we’ll first need to create a new database. After selecting where to save it, we’ll have to put in a master password. Obviously, this should be one of the better kind. I didn’t check out the possibilities of a key file or testing the existence of a USB drive, since it would be a problem for portability of the solution.

(src xkcd, CC BY-NC 2.5)
(src xkcd, CC BY-NC 2.5)

After putting in the password, it was asking for a few settings. Since I was fine with the standards, the KeePass file was created with a few sample entries. We can delete the samples and save it now.

Create a new password, e.g. 32 characters long.
Create a new password, e.g. 32 characters long.

To try it out, we could generate a new password (Tools -> Generate Password). I prefer to use A{32} as a pattern, which creates 32 lower and upper case letters and numbers. (I guess that is security wise dumb to tell, so I might change it in the future. ;)) It’ll create a blank entry in the database with a random password. If you edit it, you can add at a user name, but also URL (later useful for Firefox integration), custom notes, an icon and a lot of other fields.

Update: I changed that to use special characters as well.

If we want to login now, we can select the entry and press Ctrl-C to copy the password into the clipboard for a few seconds. If you want to copy the user name, use Ctrl-B and Ctrl-U will open the saved URL for you.

KeeFox: Firefox Integration

To make this far more comfortable to use, we should integrate this into our browser. Since I use Firefox at the moment, I used KeeFox for that, but there are supposed to be plugins for other browsers as well. KeeFox can fill out your forms automatically and save new passwords directly into KeePass, just like the internal Firefox password manager did. Running Windows, this is a breeze. Install KeeFox from Mozillas Addon Page, restart Firefox and follow the instructions. It’ll copy the KeeFox plugin into your KeePass directory. After restarting KeePass and maybe Firefox as well, you’ll get a connection window asking you to for a code and another one showing it to you. (Just to make sure that nothing connects without your consent.)

Linux users have a slightly harder time. On Ubuntu, you’ll need to install mono-complete for KeeFox to work, other distributions will have similar meta packages for a complete mono installation. (If anybody knows exactly the packets necessary, I would appreciate a comment, all the howtos simply install mono-complete.) The installation is covered in pictures very well on sysads.co.uk, so I will not write it down here again. 🙂

KeeFox asks if I want to save the password in my KeePass database
KeeFox asks if I want to save the password in my KeePass database

Now that we should be connected, we could try out logging in somewhere and saving the password. I’ll login to my blog backend and on the top of the screen KeeFox asks me if I want to save the password.

Editing an entry created from KeeFox
Editing an entry created from KeeFox

If we save, the entry appears in KeePass with the favicon of the page (my blog doesn’t have one) and title, user name, password and URL already filled. Sometimes it makes sense to change the URL or title, but mostly you are good to go and don’t need to edit anything. If you log out and open the login dialog again, the fields will be filled out and you only need to click the login button.

Sync with OwnCloud/Nextcloud

After the first two parts, we should have a comfortable setup for one computer. But most of us have more than one computer and want to use passwords all across them. Since I already use ownCloud (or rather now Nextcloud), I wanted to save the password database there. The server is administrated by myself, so I’m pretty sure that only I can access the data there. (Barring big security holes in PHP, bash, SSL, …) If you want to install it as well, you can follow the official documentation, but keep in mind that you’ll have to take care of security of the installation as well. In case you want to do this with Dropbox, you’ll have to trust them enough (whyever) and it should work just the same, I guess.

Password database in ownCloud
Password database in ownCloud

If you copy the password file anywhere in your local ownCloud (client) directory, the client will automatically sync it to the server. Now open the database file again from the ownCloud directory, every change you’ll make will be synced again. But since my password database is only about 50kb (I’m still migrating sites to the new password whenever I log in and have a minute), it’s no problem with nearly all internet connections.

When you now setup KeePass and KeeFox on a second computer (with ownCloud installed of course), you can open the database file from the local ownCloud directory and always get a current version of the database. I set up KeePass so that it closes the database after certain time of inactivity, so I never expect two KeePass instances adding new entries at the same time. But if you work with two computers side by side, make sure to save the database after adding a new entry and reopening it on the second computer before making any changes.

Update: I switched to nextcloud, but that doesn’t change the process here at all. But I discovered there is an app for nextcloud to open your Keepass database in the browser, Keeweb for nextcloud. Download the latest release and install it like any other nextcloud app. Then you can access your passwords easier, even when you aren’t at your own computer. Obviously you should only do that on trustworthy computers.

Keepass2Android: Android App

Now we should have a Firefox integrated password save, that is synced between our computers. Today smartphones are also used to connect to lots of services, each needing its own password. I for example need my Amazon password from time to time, to buy something while sitting in public transport. Instead of typing it in with people looking over my shoulder, I copy and paste it out of my password database now.

To do so, we can use Keepass2Android. Since the Android ownCloud client didn’t work well for me for keeping files local and updated, we connect directly via WebDAV to our ownCloud installation. Choose to open a password database:

Open a database on Keepass2Android
Open a database on Keepass2Android

There are a lot of services to connect to, but to connect to the ownCloud instance, we should use HTTPS and add the following (adapted) URL: https://owncloud.server.com/remote.php/webdav/path/to/the/pw.kdbx

Login with optional quick unlock feature
Login with optional quick unlock feature

Put in username and password of your ownCloud installation, and then the password for your database and you should be good to go. You can activate quick unlock, which doesn’t lock the database completely, but you only need to input the last three characters of the password to access it until you close the database manually. (At latest at a reboot.) If you don’t mind the reduced security, its a nifty feature.

The KeePass groups in the Android app
The KeePass groups in the Android app

After login you’ll get a list of all your passwords and groups. If we choose the amazon password entry, Keepass2Android will show two new entries in Androids notification area (next to the one that is already there because the database is open):

The username and password can be put into the clipboard from the notification screen
The username and password can be put into the clipboard from the notification screen

Those entries enable you to switch to your browser, pull down notifications, copy the password (or username) directly from the notification area and paste them in the website. There is a risk according to Keepass2Android that other apps might copy data from your clipboard, so the alternative is to use a special Keepass2Android keyboard instead the copy and paste solution. Whatever you decide.

Update: I switched to the integrated keyboard Keepass2Android provides. Whenever I open an entry, a dialog pops up that lets me switch the keyboard to a special keyboard that lets me access username and password with one button each. After closing the database, the keyboard switches back to my default one.

Backup

I hope that we have a comfortable synced password solution now, that we can access from our Android mobile as well. My last fear now was, what happens if the database gets deleted or corrupted in some way? In theory there is an ownCloud feature to keep old versions of a file around. But I don’t trust that. I want to have a backup with more than one version simply in my computers (or home servers) filesystem.

If you use windows (or don’t want to use self written scripts on Linux), I recently stumbled over Duplicati, an open source GUI backup tool, that also supports WebDAV. I’m sure it wouldn’t be hard to setup a backup job to save a copy of the password file from the ownCloud (WebDAV) server.

But I didn’t try it yet and I prefer this simple solution I can easily completely understand. I created a very short script using cadaver (a command line WebDAV client.) Create a directory, e.g. ~/.pwdatabase where you want the file saved and adapt the following script to your needs, I called it ~/bin/pwdatabase-backup.sh:

[cc lang=“bash“]
#!/bin/bash

cd ~/.pwdatabase-backup
rm pw.kdbx
echo „get pw.kdbx“ | cadaver https://owncloud.server.com/remote.php/webdav/directory/of/database/
mv pw.kdbx pw.kdbx-`date +%Y-%m-%d_%H%M%S`
[/cc]

After that we still need to save our ownCloud access data in a file ~/.netrc: (If you are more paranoid than I am, create a dedicated user just for the backup task.)

[cc lang=“bash“]
machine owncloud.server.com
login foo
password bar
[/cc]

Make sure to make the script executable and the .netrc as well as the backup directory only accessible by you:

[cc lang=“bash“]
lenfers@waxford:~$ chmod +x ~/bin/pwdatabase-backup.sh
lenfers@waxford:~$ chmod 600 ~/.netrc
lenfers@waxford:~$ chmod 700 ~/.pwdatabase-backup/
[/cc]

Last but not least, add a cronjob to run this script. This will run now every hour at the 42nd minute. Run ‚crontab -e‘ and put the following line in the editor that opens now:

[cc]
42 * * * * /home/lenfers/bin/pwdatabase-backup.sh
[/cc]

You’ll now get files in your backup directory named like pw.kdbx-2014-10-12_193002 every hour. If you want the script to run at different intervals, check out a cron howto.

Conclusion, Security opinion and Todo

We should have installed and used the following software by now:

You should now have the possibility to create a password per webpage and sync it between different computers and mobile phones. If you haven’t done so, I would recommend to change a few passwords from sites that are important to you into long automatically generated ones. The password file should be in a lot of places, just in case it gets corrupted (which didn’t happen to me, I’m just cautious.)

I’m by far no security expert, but I want to provide you with my view on how secure this setup is. It shouldn’t be good enough for missile launch codes (but might be) or if you are in a position where you might be targeted directly (instead if being one among many victims of a site hack.) If someone were to breaks into your cloud account, they would only need to break your KeePass password offline and got access to all your accounts! Since I don’t expect to be targeted directly (shouldn’t have said that, should I? :-)) this will immensely increase security for me, because the damage resulting from big hacks on websites won’t affect me anymore outside of the hacked site. Also brute force attacks on my online accounts should be far harder now. Last but now least, I use two factor authentication as much as possible.

Update: Keeweb added in the cloud section. In the future I want to look into integrating a web interface into ownCloud (maybe based on WebKeePass?) so I could access my passwords easier from a friends computer without having to copy them manually from my mobiles screen, but I’m not sure when I’ll find time for that. If anybody has a working solution or good hints on how to do that easily, I would appreciate a pointer.

I hope this helped you to switch from a small array of simple to medium passwords to a system of one secure password per site. Any feedback is appreciated!

What do you think of this post?
  • Awesome (30)
  • Interesting (29)
  • Useful (26)
  • Sucks (9)
  • Boring (7)

Tiny Tiny RSS: More open source Google Reader alternatives

I posted about selfoss last week, an open source and self hosted rss reader as alternative to Google Reader. After installing it and posting about it, I stumbled across an even feature richer software: Tiny Tiny RSS. Despite the name, TTRSS really isn’t tiny, it’s features are for example:

  • Very good import from Google Reader (OPML import and export.)
  • Nice clean AJAX interface, as well as a mobile interface and mobile apps.
  • Keyboard shortcuts.
  • Easy installation, requires PHP&MySQL.
  • Multiuser support.
  • Plugin support.
  • Multiple language support
  • Filtering and scoring, I’m quite curious if I find a cool use for that feature.
  • API to access it with other services, for example desktop clients

Tiny Tiny RSS Screenshot

Installation is quite easy, the official documentation should be sufficient to get you going. After installation you might want to do one or more of the things I did:

First I got my Google Reader data imported: Export your feeds from Reader and extract the subscriptions.xml from the archive. You can upload it to ttrss in the settings dialog under feeds, OPML. Next I activated some plugins under settings and plugins. I activated the Google+-sharing plugin and the mail plugin, but there might be others that could be useful to you. After that I installed a plugin for Chrome to be able to subscribe to feeds directly from the browser. Install the plugin and open the plugins settings to add „http://yourservername/public.php?op=subscribe&feed_url=%s“ as a service. Firefox users might want to check this article instead. If you prefer a more Google Reader like interface, check in this forum, there are lots of CSS snippets going around that try to accomplish that.

And I guess that’s it, ttrss is filling the hole Reader left quite well for me. My workflow hasn’t changed much and the differences might prove to be valuable additions in the future. I’m very curious what kind of plugins the new users create and what more they are going to do with the API. What are you using as a feed reader now?

What do you think of this post?
  • Awesome (24)
  • Interesting (17)
  • Useful (16)
  • Sucks (10)
  • Boring (7)

selfoss: Self hosted alternative to Google Reader

Screenshot of selfoss with the special source to get the full article in the heise feed
Screenshot of selfoss with the special source to get the full article in the heise feed

Update: I switched to Tiny Tiny RSS, which already has far more features I wanted, I also blogged about my experiences.

Since Google Reader announced that it is going down, lots of articles describing alternatives came up. I wanted to host my own RSS-Reader for some time so this was the final reason to do it. Since I couldn’t make Newsblur work on my own host last time I tried it, I tried selfoss which is a great deal easier. Here are my first impressions of selfoss:

  • Nice user interface, even on my android phone.
  • Got keyboard shortcuts very similar to Google Reader.
  • Not only RSS sources but some special sources to get full content of sites that only have a teaser in their RSS feed.
  • The article text is divided into three panes much like a newspaper.
  • Easy to install (only PHP needed, MySQL optionally.)
  • At the moment there is sadly no way to read by feed, only by category or tag. Hope this will be integrated in the future. I would like to be able to have a view just like in Google Reader, where I can view whole categories but also a single feed from the category. But I’m managing by creating categories with only one feed in them.
  • I’m also missing an option to automatically mark an item read when I open it.

So selfoss isn’t a perfect solution for me, but I might try and add some of the missing features myself and I bet after todays news more user will use and therefore enhance it. If you just want to install it on your hoster without MySQL, it is really simple. To let it run in my Ubuntu server I had to enable the rewrite and headers modules and create a cronjob for the updates:

[cc lang=“bash“ line_numbers=“off“]
sudo a2enmod headers
sudo a2enmod rewrite
sudo service apache2 restart
sudo echo „*/5 * * * * nobody wget -o /dev/null http://your.domain/selfoss/update“ >> /etc/cron.d/selfoss
[/cc]

Update: If you are running on a Debian with default settings or get a 500 server error on other distributions, try to add „AllowOverride All“ in your webserver/vhost config. (source)

I’m running it with MySQL and authentication with this configuration file (config.ini in the selfoss directory):

[cc lang=“ini“ line_numbers=“off“]
db_type=mysql
#db_file=data/sqlite/selfoss.db
db_host=localhost
db_database=selfoss
db_username=selfoss
db_password=YOUR_DB_PASS
db_port=3306
logger_level=ERROR
items_perpage=50
items_lifetime=400
base_url=
username=username
password=YOUR_PASSWORD_HASH
salt=YOUR_RANDOM_SALT
public=
rss_title=selfoss feed
rss_max_items=300
rss_mark_as_read=0
[/cc]

What do you think of this post?
  • Interesting (4)
  • Awesome (2)
  • Useful (2)
  • Sucks (2)
  • Boring (0)

VDR hack: Stream video with synced audio

VDR streams very well with the streamdev-plugin, but only unicast http streams. That is usually no problem, because even 3 streams aren’t nearly too much for a normal 100Mbit home network and I wouldn’t need any more at home. But with the world cup starting tomorrow me and Karin are going to watch some games that aren’t that interesting to us at the computer while doing other stuff. We did this before, but the downside is that we never got the http stream really synchronized and nothing is more annoying than the same audio stream with a one second delay in one room. (Our solution was to mute one stream, but thats not a real solution because one of us always has to have a asynchronous audio to the video signal.)

My hack I will be using for the world cup the next four weeks is the following: I described how to stream the world cup at your office for all your colleagues a few days ago. I will do that at home too, and then just play that stream, in which the video and the audio are really in sync, at least for my ear. I have to play the stream, because the VDR still has control over the DVB devices and VLC couldn’t open them. And the VLC on my VDR is quite ancient, since I’m using an older version of c’t-vdr.

So, on one computer I start VLC with the following options (all in one line):

cvlc  http://vdr:3000/S19.2E-1-1101-28106  ":sout=#rtp{dst=226.42.42.42,port=5004,mux=ts}"

You can get the URL for each channel from your vdr at http://vdr:3000/channels.html.

And on all the computers that are supposed to view the stream, VLC has to be started with the following command:

vlc rtp://@226.42.42.42:5004/

Sure there is now a slightly higher delay (two streams), but I don’t mind those three seconds when we can watch the games with synced audio. You can get a bit more information about streaming in my world cup streaming post and a lot more in the VLC streaming documentation.

What do you think of this post?
  • Interesting (5)
  • Useful (4)
  • Awesome (1)
  • Boring (1)
  • Sucks (0)

Stream of the World Cup 2010

This year I wanted to stream the FIFA World Cup 2010 (or Weltmeisterschaft 2010 here in Germany :)) to a few computers at my work. I chose VLC to do this because of its build in excellent streaming capabilities. There are also more flexible or powerful streaming solutions from VLC like VLM or DVBlast, but I wanted to keep it simple. If you know a good and simple setup guide for one of those systems, I would love a link in the comments to it.

Behold, there might be restrictions in your country, that prohibit even this personal use, please check before deploying this somewhere!

Prerequisite

  • A spare computer with Linux,Windows or I presume OSX. It doesn’t even need to be spare one: Since we don’t want to transcode, it uses virtually no resources.
  • a DVB card supported by your operating system (I’m using DVB-T in my example)
  • VLC

Setting up the stream

Setting up the stream consists of two parts: You need the source and the stream settings. For the source settings with DVB-T you’ll need to know the frequency of the channel you want to stream. Here in Bremen, Germany for example the frequency for ARD is 482000Khz. You can use the tool scan to generate a channels.conf when running linux (found in the package dvb-apps in Ubuntu) and probably OSX. I don’t know how to get a channels.con or the frequencies on a windows box, but maybe you can find a channels.conf for your region in the VDR Wiki. An entry in the channels.conf looks like that:

Das Erste:482000:I999B8C23D12M16T8G4Y0:T:27500:261:262:267:0:160:8468:3329:0

The red number in the second field is the frequency we need, here 482000Khz. You can try it out by opening VLC and choosing Media=>Open Capture Device (or Ctrl+C). The capture mode has to be set to DVB (DVB Directshow on Windows), you need to fill in your frequency, ignore the advanced options and hit Play. You should be able to see a channel, but not necessarily the one you wanted. There are usually three to four channels on one frequency, so you might need to tune manually to the channel you wanted in Playback=>Program. (The SID of the channel (160) is marked in green in the example above, we’ll use it later to tune to that channel automaticly.)

When that worked we can start setting up the stream. VLC can stream anything it can play, you could stream video files, webcams and a lot of other media. We’ll set the stream up as a multicast stream for a local network with RTP, so it will not work through internet connections. If you want to set a stream over the internet up, please refer to the VLC streaming documentation, but don’t forget that you might need a lot of bandwidth for multiple clients. The advantage of multicast over unicast streaming is that we need to send the data only once into the network and not to every client. The client either ignores the traffic or subscribes to it and receives it.

We need a multicast address to identify our stream and we can chose in the range from 224.0.0.0 to 239.255.255.255, e.g. 226.42.42.42. To set the stream up, chose Media=>Streaming (or Ctrl+S) and select Capture Device. Set the DVB settings up like you tried out above and select Stream. Your settings are copied into the Source field in the next dialog, so you could simply click next. But you might want to copy the settings into a text file for the automation later. Next you will have the possibility to set the stream settings up: As destination chose RTP and click Add. You should get something like the following, where you should put in your multicast address, uncheck the transcoding option and leave the other options on default settings:

After a click on next you get a few options you can leave alone and, like with the source before, a string for the stream. We should copy that one too to the text file and click on stream. We are now streaming a channel to the network, even though you cannot see anything.

Connecting with a client

To see the stream, you need to connect to it. You can do that locally on your own computer too, just open a new VLC and choose Media=>Open Network Stream. Check RTP as protocol and put in your multicast address:

You can now already save a playlist file to send to your clients later on. Make sure your playlist is empty besides that stream (Ctrl+L opens it) and then save it Media=>Save Playlist to File (or Ctrl+Y).

Automating the Server

This is supposed to be a quick and dirty solution, we won’t create start scripts for this or run it as a NT service. But if you don’t want to set the server settings up every time you start the stream, you can create a batch file under windows or run it completely from the command line on linux. (Preferably in a GNU screen session.)

Linux users can run cvlc without an interface, but can also use vlc if they want the interface. You can run the following line after replacing your my settings with the ones you gathered directly in a shell (or a shell with screen) or you can put it into a .sh file and run it as a script.

cvlc dvb-t://frequency=482000000 --ts-es-id-pid --program 160 ":sout=#rtp{dst=226.42.42.42,port=5004,mux=ts}"

In windows create a .bat file with a simple text editor and replace my example with your settings (all in one line). Of course you can configure a lot more settings with the GUI and get very complex settings in the first step for this. (On 64bit Windows, you might have to replace %ProgramFiles% with „%ProgramFiles(x86)%.) Then you can just run the .bat file instead of setting the stream up every time.

"%ProgramFiles%Videolanvlcvlc.exe" dvb-t://frequency=482000000 --ts-es-id-pid --program 160 :sout=#rtp{dst=226.42.42.42,port=5004,mux=ts}

The frequency is here given in Hz, not Khz, so you need to add three more zeros.

Conclusion

I hope this simple tutorial about streaming helped you to stream the word cup wherever you wanted. I wrote it, because I had some problems in the beginning, since the VLC documentation is being revised for the current 1.0 series and didn’t reflect always the current status.

I found it very impressing that I could stream a channel to three different computers in the same room and the audio was in sync, at least for my ears. I would love to see something like this to find it’s way into VDR or some other solution to stream audio (or even video!) at home…

What do you think of this post?
  • Awesome (5)
  • Interesting (4)
  • Useful (3)
  • Boring (1)
  • Sucks (0)