Mude a senha para muitas contas de uma vez no Gnome Keyring

2

Eu uso o Gnome Keyring como o back-end de armazenamento de senha para vários aplicativos. Muitas das entradas são para diferentes formas de entrar na mesma conta, acessadas por diferentes meios. Eu mudei minha senha nesta conta, agora eu quero atualizar todas as entradas no meu chaveiro.

Eu costumo usar o Seahorse para editar o chaveiro, mas ele só me permite editar entradas individuais com uma sequência um pouco desajeitada de teclas pressionadas ou cliques do mouse. Com muitas senhas para mudar, isso é tedioso.

Como posso atualizar minha senha para muitas entradas no Gnome Keyring de maneira eficiente, ou seja, sem ter que digitá-la várias vezes?

    
por Gilles 06.07.2015 / 12:02

2 respostas

2

Seguindo conselho do meuh escrevi um script Python para alterar as senhas de todas as entradas que correspondem a certas condições (por exemplo, um certo nome de usuário e nome do servidor). O script solicita a senha antiga como uma verificação de integridade e altera apenas as entradas com a senha antiga especificada. Uso de amostra:

gnome-keyring-change-passwords 'user|username_value=^gilles$' 'action_url|server=acme\.example\.com'

Aviso: o código foi executado satisfatoriamente uma vez. Essa é a extensão do meu teste.

#!/usr/bin/env python
import getpass, re, sys
import gnomekeyring

def getpass2(prompt):
    input1 = getpass.getpass(prompt)
    input2 = getpass.getpass('Repeat ' + prompt)
    if input1 != input2:
        raise ValueError, 'password mismatch'
    return input1

def check_conditions(conditions, attributes):
    for (names, regexp) in conditions:
        value = ''
        for name in names:
            if attributes.has_key(name):
                value = attributes[name]
                break
        if not re.search(regexp, value): return False
    return True

def parse_condition_string(arg):
    eq = arg.index('=')
    return arg[:eq].split('|'), re.compile(arg[eq+1:])

def change_passwords(keyring_name, conditions, old_password, new_password):
    '''Change the password in many Gnome Keyring entries to new_password.

Iterate over the keyring keyring_name. Only items matching conditions and where
the current password is old_password are considered. The argument conditions
is a list of elements of the form (names, regexp) where names is a list of
attribute names. An item matches the condition if the value of the first
attribute in names that is present on the item contains a match for regexp.
'''
    all_items = gnomekeyring.list_item_ids_sync(keyring_name)
    for item in all_items:
        attributes = gnomekeyring.item_get_attributes_sync(keyring_name, item)
        if not check_conditions(conditions, attributes): continue
        info = gnomekeyring.item_get_info_sync(keyring_name, item)
        display_name = info.get_display_name()
        if info.get_secret() == old_password:
            print 'changing:', display_name
            info.set_secret(new_password)
            gnomekeyring.item_set_info_sync(keyring_name, item, info)
        else:
            print 'has different password, skipping:', display_name

def change_password_ui(condition_strings):
    conditions = map(parse_condition_string, condition_strings)
    old_password = getpass.getpass('Old password:')
    new_password = getpass2('New password:')
    change_passwords('login', conditions, old_password, new_password)

if __name__ == '__main__':
    if '--help' in sys.argv:
        sys.stdout.write('''Usage: ' + sys.argv[0] + ' [CONDITION...]
Change multiple entries in the Gnome Keyring login keyring.
Prompt for the old and new password. Only entries for which the old password
matches are modified.

''')
    else:
        change_password_ui(sys.argv[1:])
    
por 06.07.2015 / 19:16
1

Há um pacote python para a API de chaveiro do gnome. Você pode seguir uma espécie de tutorial: bending-gnome-keyring-com-python que tem alguns exemplos de busca e configuração de senhas.

Há também um comando secret-tool no pacote libsecret , que pode obter / definir senhas em um chaveiro do gnome.

    
por 06.07.2015 / 12:47