当我们登录 Web 应用程序后提示浏览器保存凭据时,它们会存储我们相应的用户名和密码。我知道如何从浏览器中恢复这些信息。但我想知道这些密码存储在 Ubuntu 中的哪个目录中?
答案1
铬和铬合金
以三种方式存储密码:
- GNOME 钥匙圈
- 钱包 4
- 纯文本
Chromium 根据您的桌面环境自动选择使用哪个商店。
GNOME Keyring 或 KWallet 中存储的密码在磁盘上加密,对它们的访问由专用守护程序软件控制。以纯文本形式存储的密码未加密。因此,在使用 GNOME Keyring 或 KWallet 时,任何先前存储的未加密密码都会自动移至加密存储中。
铬的来源。
Google Chrome 的手册页(man google-chrome
)显示:
--password-store=<basic|gnome|kwallet>
Set the password store to use. The default is to automatically
detect based on the desktop environment. basic selects the
built in, unencrypted password store. gnome selects Gnome
keyring. kwallet selects (KDE) KWallet. (Note that KWallet may
not work reliably outside KDE.)
Chrome 使用的方法与 Chromium 相同。并且您可以使用上述设置切换到纯文本密码(当然不推荐)。
铬合金(旧版本)
密码存储在~/.config/google-chrome/Default/Login\ Data
一个 sqlite 数据库文件中(该文件已加密)。
此登录数据库文件采用 SQLite 格式,这是流行 SQL 数据库的精简版。除了登录凭据外,它还存储其他信息,例如自动完成条目、IE7 登录、搜索关键字等。Chrome 会在“登录”表中存储所有登录或登录机密。此表包含以下有趣的字段
Origin_URL - Base URL of the website
Action_URL - Login URL of the website
Username_element - Name of the username field in the website
Username_value - Actual username
Password_element - Name of the password field in the website
Password_value - Encrypted password
Date_created - Date when this entry is stored
Blacklisted_by_user - Set to 1 or 0 based on if website is blacklisted or not.
除密码字段外,所有其他字段均以明文形式输入。所有存储网站的密码均使用三重 DES 算法加密,该算法以登录用户的密码为种子。这意味着除非在某些条件下,否则登录机密无法跨用户或系统边界解密。
火狐
看~/.mozilla/firefox/<profilename>
您的密码存储在 key4.db 和 logins.json 文件中。
来源。
答案2
Ubuntu 20.10 Chromium 将密码存储在~/snap/chromium/common/chromium/Default/Login Data
自回答以来,以下两件事已经发生了变化我的浏览器密码存储在哪里?写道:
- 正如指出的那样鲁杰罗·图拉,他们显然从 GNOME 密钥环回到了自定义 SQLite 数据库,正如所宣布的:https://chromium.googlesource.com/chromium/src/+/master/docs/security/faq.md#Does-the-Password-Manager-store-my-passwords-encrypted-on-disk
- Chromium 现在默认为 snap,因此默认配置文件现在位于,
~/snap/chromium/common/chromium/Default/
而不是旧的~/.config/chromium
测试这一点的一个简单方法是在你没有注册过的网站上创建一个新的登录名,例如我选择了https://www.onlylads.com/
然后,在 Chromium 要求您保存密码并且您同意后,退出 Chromium 以解锁数据库,然后执行以下操作:
sqlite3 ~/snap/chromium/common/chromium/Default/Login\ Data 'SELECT * FROM logins' |
grep -a onlylads
现在它包含一个类型为:
https://www.onlylads.com/join/register/|https://www.onlylads.com/join/register/|new_email|<your-email>|new_password|<encrypted-password-blob>|6KӜYTP||https://www.onlylads.com/|13257819658687161|0|0|0|0||0||||0|0|@|543|13257819641704329|
这确认它存储的是加密密码,其他字段都是纯文本。
我们还可以使用以下命令获取相应的模式:
sqlite3 ~/snap/chromium/common/chromium/Default/Login\ Data .schema
这使:
CREATE TABLE meta(key LONGVARCHAR NOT NULL UNIQUE PRIMARY KEY, value LONGVARCHAR);
CREATE TABLE sqlite_sequence(name,seq);
CREATE TABLE sync_entities_metadata (storage_key INTEGER PRIMARY KEY AUTOINCREMENT, metadata VARCHAR NOT NULL);
CREATE TABLE sync_model_metadata (id INTEGER PRIMARY KEY AUTOINCREMENT, model_metadata VARCHAR NOT NULL);
CREATE TABLE insecure_credentials (parent_id INTEGER REFERENCES logins ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, insecurity_type INTEGER NOT NULL, create_time INTEGER NOT NULL, is_muted INTEGER NOT NULL DEFAULT 0, UNIQUE (parent_id, insecurity_type));
CREATE INDEX foreign_key_index ON insecure_credentials (parent_id);
CREATE TABLE stats (origin_domain VARCHAR NOT NULL, username_value VARCHAR, dismissal_count INTEGER, update_time INTEGER NOT NULL, UNIQUE(origin_domain, username_value));
CREATE INDEX stats_origin ON stats(origin_domain);
CREATE TABLE field_info (form_signature INTEGER NOT NULL, field_signature INTEGER NOT NULL, field_type INTEGER NOT NULL, create_time INTEGER NOT NULL, UNIQUE (form_signature, field_signature));
CREATE INDEX field_info_index ON field_info (form_signature, field_signature);
CREATE TABLE IF NOT EXISTS "logins" (origin_url VARCHAR NOT NULL, action_url VARCHAR, username_element VARCHAR, username_value VARCHAR, password_element VARCHAR, password_value BLOB, submit_element VARCHAR, signon_realm VARCHAR NOT NULL, date_created INTEGER NOT NULL, blacklisted_by_user INTEGER NOT NULL, scheme INTEGER NOT NULL, password_type INTEGER, times_used INTEGER, form_data BLOB, display_name VARCHAR, icon_url VARCHAR, federation_url VARCHAR, skip_zero_click INTEGER, generation_upload_status INTEGER, possible_username_pairs BLOB, id INTEGER PRIMARY KEY AUTOINCREMENT, date_last_used INTEGER NOT NULL DEFAULT 0, moving_blocked_for BLOB, date_password_modified INTEGER NOT NULL DEFAULT 0, UNIQUE (origin_url, username_element, username_value, password_element, signon_realm));
CREATE INDEX logins_signon ON logins (signon_realm);
然后我还观察到“密码和密钥”下有:
seahorse
GNOME 密钥环的 GUI 前端,有一个 Chromium 条目:
据推测其中包含解密数据库中密码的密钥。
该 GUI 还显示了我以前版本的 Chromium 遗留的所有旧密码,我现在已删除了这些密码(然后不得不重置密码数据库,因为我还错误地删除了 Chromium 密钥,但 Google 自动同步拯救了我 :-)https://superuser.com/questions/573602/chrome-not-saving-passwords-and-not-auto-filling-existing-login-passwords/1325741#1325741)
登录时会自动解锁。
一些有趣的提醒:
- 您必须使用强大的长密码进行登录,否则攻击者获得您的计算机并离线破解您的短密码后,便会获取您所有网站的密码
- 因为屏幕锁似乎无法锁定钥匙圈我认为,一个装备精良的攻击可以窃取你已登录的计算机并锁定屏幕,从而读取 RAM 并解密你的密码
在 Ubuntu 20.10、Chromium 88.0.4324.150 snap 上测试。
GNOME 密钥环可能会回归
今天弹出一个窗口:file:///snap/chromium/2333/firstrun/password-en.html,内容是:
通过 Gnome 密钥环存储密码的问题已经得到修复,但是为了使其正常工作,您必须重命名旧的 ~/snap/chromium/common/chromium/Default/Login Data 文件,以便新的、可用的文件可以替换它。
我们建议您将其重命名为 Login Data.old。您可以通过文件管理器或打开终端并输入以下代码来执行此操作:
cd ~/snap/chromium/common/chromium/Default/ mv "Login Data" "Login Data.old"
也许它会允许 Gnome Keyring 再次存储所有密码而不是仅仅一个主加密密钥?