【问题标题】:Using Secrets API with dbus-send将 Secrets API 与 dbus-send 一起使用
【发布时间】:2020-12-08 00:40:45
【问题描述】:

我试图弄清楚如何使用dbus-send 从密钥环中获取密码,但我很难理解会话参数是什么。

这就是我要去的地方:

#!/bin/bash

# Find key path
KEY_PATH=$(dbus-send --dest=org.freedesktop.secrets --print-reply=literal /org/freedesktop/secrets org.freedesktop.Secret.Service.SearchItems dict:string:string:"mount-point","/home/s/.mozilla/firefox" | grep -Eo '/\S+')
# Unlock keyring
RESULT=$(dbus-send --dest=org.freedesktop.secrets --print-reply=literal /org/freedesktop/secrets org.freedesktop.Secret.Service.Unlock array:objpath:$KEY_PATH | grep -Eo '/\S+')

# If unlocked...
if [ "$RESULT" = "$KEY_PATH" ]; then
    # Get password
    PASSWORD=$(dbus-send --dest=org.freedesktop.secrets --print-reply=literal /org/freedesktop/secrets org.freedesktop.Secret.Service.GetSecrets array:objpath:$KEY_PATH objpath:<WHAT IS SESSION?>)
    # Mount ecryptfs firefox directory
    echo $PASSWORD | ecryptfs-simple -o key=passphrase,ecryptfs_cipher=aes,ecryptfs_key_bytes=32,ecryptfs_passthrough=no,ecryptfs_enable_filename_crypto=yes,no_sig_cache=yes /home/s/.mozilla/.firefox-ecryptfs /home/s/.mozilla/firefox
    firefox $@
fi

我不知道如何获取会话以获取密码。

【问题讨论】:

    标签: dbus gnome-keyring-daemon


    【解决方案1】:

    需要使用以下方法创建会话:

    org.freedesktop.Secret.Service.OpenSession (
        IN String algorithm,
        IN Variant input,
        OUT Variant output,
        OUT ObjectPath result);
    

    https://specifications.freedesktop.org/secret-service/latest/re01.html

    以下是创建非加密会话的示例。请注意,GetSecret 返回的密码将是纯文本,因为它使用的是非加密会话:

    dbus-send --dest=org.freedesktop.secrets --print-reply=literal /org/freedesktop/secrets org.freedesktop.Secret.Service.OpenSession string:plain variant:string:''
    

    输出是创建会话的 objpath:

    variant          /org/freedesktop/secrets/session/s31
    

    然后,理论上,您可以将会话传递给GetSecrets。例如:

    dbus-send --dest=org.freedesktop.secrets --print-reply=literal /org/freedesktop/secrets org.freedesktop.Secret.Service.GetSecrets array:objpath:/org/freedesktop/secrets/collection/login/6 objpath:/org/freedesktop/secrets/session/s31
    

    注意:/org/freedesktop/secrets/collection/login/6SearchItems返回的对象路径。

    但是,这不适用于 dbus-send。我认为这是因为会话可能会在 dbus-send 返回后立即关闭。

    如果您使用 d-feet,会话将一直保留到 d-feet 窗口关闭为止。因此,您将能够使用 d-feet 获取密码。但是,我知道你想自动化它。

    我建议您使用 python3 的keyring,它提供使用加密会话获取密码。

    【讨论】:

      猜你喜欢
      • 2020-06-05
      • 2014-09-02
      • 1970-01-01
      • 2015-02-28
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 2017-12-15
      • 2016-07-10
      相关资源
      最近更新 更多