Storing passwords with python keyring

I'm using keyring library to store passwords in my python app.

import keyring
keyring.set_password('My namespace', username, password)
keyring.get_password('My namespace', username)

And this works very well.

I assume that passwords are safe in keyring, they are encrypted. But, since I can get them by username, what prevents other apps to do the same?

Isn't that a security risk, or am I missing something?


Solution 1:

The keyring library uses the standard keyring of your desktop environment, e.g. the GNOME keyring. This keyring is unlocked as soon as you log in, meaning: yes, any other application run by you has access to the password you store with your application, but -- and this is the idea of a keyring -- other users and their applications have not.

Quoting “gnome-keyring Security Philosophy”:

An example of security theater is giving the illusion that somehow one application running in a security context (such as your user session) can keep information from another application running in the same security context.

Note that the username in the set_password/get_password functions is not related to the name of the user running the application (i.e. the user whose keyring is used) but may be for example an email address, a database username, etc.