Hướng dẫn python keyring set password - mật khẩu đặt khóa python

Hướng dẫn python keyring set password - mật khẩu đặt khóa python

Thư viện Keyring Python cung cấp một cách dễ dàng để truy cập dịch vụ Keyring hệ thống từ Python. Nó có thể được sử dụng trong bất kỳ ứng dụng nào cần lưu trữ mật khẩu an toàn.

Những phụ trợ Keyring được đề xuất này được hỗ trợ:

  • Keychain MacOS

  • Dịch vụ bí mật Freedesktop hỗ trợ nhiều DE bao gồm Gnome (yêu cầu bí mật)

  • KDE4 & KDE5 KWALLET (Yêu cầu DBU)

  • Windows Ch dụng khóa thông tin

Các triển khai Keyring khác có sẵn thông qua phụ trợ của bên thứ ba.

Cài đặt - Linux

Trên Linux, phụ trợ KWALLET dựa vào DBUS-Python, không phải lúc nào cũng cài đặt chính xác khi sử dụng PIP (cần biên dịch). Để có kết quả tốt nhất, hãy cài đặt DBUS-Python làm gói hệ thống.

Khả năng tương thích - MacOS

MacOS Keychain hỗ trợ MacOS 11 (Big Sur) và sau đó yêu cầu Python 3.8.7 trở lên với nhị phân của Universal Universal2. Xem #525 để biết chi tiết.

Sử dụng Keyring

Việc sử dụng cơ bản của Keyring khá đơn giản: Chỉ cần gọi Keyring.Set_Password và Keyring.Get_Password:keyring.set_password and keyring.get_password:

>>> import keyring
>>> keyring.set_password("system", "username", "password")
>>> keyring.get_password("system", "username")
'password'

Tiện ích dòng lệnh

Keyring cung cấp một lệnh Keyring được cài đặt với gói. Sau khi cài đặt Keyring trong hầu hết các môi trường, lệnh sẽ có sẵn để thiết lập, nhận và xóa mật khẩu. Để biết thêm thông tin sử dụng, hãy gọi không có đối số hoặc với -Help như vậy:keyring command which is installed with the package. After installing keyring in most environments, the command should be available for setting, getting, and deleting passwords. For more usage information, invoke with no arguments or with --help as so:

$ keyring --help
$ keyring set system username
Password for 'username' in 'system':
$ keyring get system username
password

Chức năng dòng lệnh cũng được phơi bày dưới dạng gói thực thi, phù hợp để gọi từ Python như vậy:

$ python -m keyring --help
$ python -m keyring set system username
Password for 'username' in 'system':
$ python -m keyring get system username
password

Cấu hình

Lib Keyring Python chứa các triển khai cho một số phụ trợ. Thư viện sẽ cố gắng tự động chọn phụ trợ phù hợp nhất cho môi trường hiện tại. Người dùng cũng có thể chỉ định khóa ưa thích trong tệp cấu hình hoặc bằng cách gọi hàm set_keyring ().set_keyring() function.

Cấu hình đường dẫn tệp

Cấu hình được lưu trữ trong một tệp có tên là Keyringrc.cfg, được tìm thấy ở một vị trí dành riêng cho nền tảng. Để xác định nơi lưu trữ tệp cấu hình, hãy chạy như sau:

python -c "import keyring.util.platform_; print(keyring.util.platform_.config_root())"

Một số Keyrings cũng lưu trữ dữ liệu Keyring trong hệ thống tệp. Để xác định nơi các tệp dữ liệu được lưu trữ, hãy chạy:

python -c "import keyring.util.platform_; print(keyring.util.platform_.data_root())"

Cấu hình nội dung tệp

Để chỉ định một phụ trợ khóa, đặt tùy chọn Keyring mặc định thành đường dẫn đầy đủ của lớp cho phụ trợ đó, chẳng hạn như keyring.backends.os_x.keyring.default-keyring option to the full path of the class for that backend, such as keyring.backends.OS_X.Keyring.

Nếu Keyring-Path được chỉ định, Keyring sẽ thêm đường dẫn đó vào đường dẫn tìm kiếm mô-đun Python trước khi tải phần phụ trợ.keyring-path is indicated, keyring will add that path to the Python module search path before loading the backend.

Ví dụ: cấu hình này có thể được sử dụng để tải đơn giản từ mô -đun đơn giản trong thư mục ./demo (không được triển khai):SimpleKeyring from the simplekeyring module in the ./demo directory (not implemented):

[backend]
default-keyring=simplekeyring.SimpleKeyring
keyring-path=demo

Phụ trợ của bên thứ ba

Ngoài các phụ trợ được cung cấp bởi gói Keyring Core cho các trường hợp sử dụng phổ biến và an toàn nhất, còn có các triển khai phụ trợ khóa bổ sung có sẵn cho các trường hợp sử dụng khác. Chỉ cần cài đặt chúng để cung cấp chúng:

  • Keyrings.CryptFile - Lưu trữ tệp văn bản được mã hóa.

  • KEYRING_JEEPNEY - Một phụ trợ Python thuần túy bằng cách sử dụng API DBUS của Sở Mật vụ cho máy tính để bàn Linux.

  • Keyrings.alt-Thay thế khác, có thể không an toàn, ban đầu là một phần của gói cốt lõi, nhưng có sẵn cho chọn tham gia.

  • Gsheet -Keyring - Một phụ trợ lưu trữ bí mật trong một tờ Google. Để sử dụng với ipython-secrets.

  • Bitwarden -Keyring - Một phụ trợ lưu trữ các bí mật trong Trình quản lý mật khẩu Bitwarden.

  • SAGECIPHER - Một phụ trợ mã hóa sử dụng hoạt động chữ ký của SSH Agent Protocol để lấy phím mật mã.

  • Keyrings.OSX_KEYChain_Keys - Quản lý khóa Keychain OSX, cho các khóa riêng, công cộng và đối xứng.

Viết phụ trợ Keyring của riêng bạn

Giao diện cho phần phụ trợ được xác định bởi keyring.backend.keyringbackend. Mỗi phụ trợ sẽ xuất phát từ lớp cơ sở đó và xác định thuộc tính ưu tiên và ba hàm: get_password (), set_password () và delete_password (). Hàm get_credential () có thể được xác định nếu muốn.keyring.backend.KeyringBackend. Every backend should derive from that base class and define a priority attribute and three functions: get_password(), set_password(), and delete_password(). The get_credential() function may be defined if desired.

Xem mô -đun phụ trợ để biết thêm chi tiết về giao diện của lớp này.backend module for more detail on the interface of this class.

Keyring sử dụng các điểm nhập cảnh để cho phép bất kỳ gói nào của bên thứ ba thực hiện các phụ trợ mà không cần sửa đổi cho chính Keyring. Những người quan tâm đến việc tạo ra các phụ trợ mới được khuyến khích tạo các gói mới, bên thứ ba trong không gian tên Keyrings, theo cách được mô hình hóa bởi gói Keyrings.alt. Xem tệp setup.cfg trong dự án đó để biết gợi ý về cách tạo các điểm nhập cần thiết. Các phụ trợ chứng minh thiết yếu có thể được xem xét để đưa vào thư viện cốt lõi, mặc dù việc dễ dàng cài đặt các gói bên thứ ba này có nghĩa là các tiện ích mở rộng có thể có sẵn.keyrings namespace, in a manner modeled by the keyrings.alt package. See the setup.cfg file in that project for hints on how to create the requisite entry points. Backends that prove essential may be considered for inclusion in the core library, although the ease of installing these third-party packages should mean that extensions may be readily available.

Để tạo tiện ích mở rộng cho Keyring, vui lòng gửi yêu cầu kéo để mở rộng được đề cập dưới dạng tiện ích mở rộng có sẵn.

Cấu hình thời gian chạy

Ngoài ra, Keyring cho phép cấu hình lập trình của phần phụ trợ gọi API set_keyring (). Các phụ trợ được chỉ định sau đó sẽ được sử dụng để lưu trữ và truy xuất mật khẩu.set_keyring(). The indicated backend will subsequently be used to store and retrieve passwords.

Để gọi set_keyring:set_keyring:

# define a new keyring class which extends the KeyringBackend
import keyring.backend

class TestKeyring(keyring.backend.KeyringBackend):
    """A test keyring which always outputs the same password
    """
    priority = 1

    def set_password(self, servicename, username, password):
        pass

    def get_password(self, servicename, username):
        return "password from TestKeyring"

    def delete_password(self, servicename, username):
        pass

# set the keyring for keyring lib
keyring.set_keyring(TestKeyring())

# invoke the keyring lib
try:
    keyring.set_password("demo-service", "tarek", "passexample")
    print("password stored successfully")
except keyring.errors.PasswordSetError:
    print("failed to store password")
print("password", keyring.get_password("demo-service", "tarek"))

Vô hiệu hóa Keyring

Trong nhiều trường hợp, việc gỡ cài đặt Keyring sẽ không bao giờ cần thiết. Đặc biệt là trên Windows và MacOS, hành vi của Keyring thường bị thoái hóa, có nghĩa là nó sẽ trả lại các giá trị trống cho người gọi, cho phép người gọi quay trở lại với một số hành vi khác.

Trong một số trường hợp, hành vi mặc định của Keyring là không mong muốn và sẽ tốt hơn là vô hiệu hóa hoàn toàn hành vi khóa. Có một số cơ chế để vô hiệu hóa Keyring:

  • Gỡ cài đặt Keyring. Hầu hết các ứng dụng đều có thể lắp đặt Keyring không được cài đặt. Gỡ cài đặt Keyring sẽ khiến các ứng dụng đó quay trở lại hành vi mà không cần khóa. Cách tiếp cận này ảnh hưởng đến môi trường Python nơi Keyring sẽ được cài đặt.

  • Định cấu hình Keyring Null trong môi trường. Đặt python_keyring_backend = keyring.backends.null.keyring trong môi trường và phụ trợ null (thoái hóa) sẽ được sử dụng. Cách tiếp cận này ảnh hưởng đến tất cả các cách sử dụng của Keyring trong đó biến đó được đặt.PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring in the environment, and the Null (degenerate) backend will be used. This approach affects all uses of Keyring where that variable is set.

  • Cấu hình vĩnh viễn KEYRING NULL cho người dùng bằng cách chạy KEYRING -có thể điều chỉnh được hoặc Keython -M Keyring - -bị biến dạng. Cách tiếp cận này ảnh hưởng đến tất cả việc sử dụng Keyring cho người dùng đó.keyring --disable or python -m keyring --disable. This approach affects all uses of keyring for that user.

Thay đổi hành vi khóa

Keyring cung cấp một cơ chế để thay đổi hành vi Keyring, thông qua các biến môi trường. Mỗi phụ trợ thực hiện một KeyringBackend.Set_ProperIES_FROM_ENV, khi được gọi sẽ tìm thấy tất cả các biến môi trường bắt đầu bằng keyring_property_ {name} và sẽ đặt một thuộc tính cho mỗi {name.lower ()} trên Keyring. Phương pháp này được gọi trong khi khởi tạo cho khóa mặc định/được định cấu hình.KeyringBackend.set_properties_from_env, which when invoked will find all environment variables beginning with KEYRING_PROPERTY_{NAME} and will set a property for each {NAME.lower()} on the keyring. This method is invoked during initialization for the default/configured keyring.

Cơ chế này có thể được sử dụng để đặt một số giá trị hữu ích cho các khóa khác nhau, bao gồm:

  • Keychain; macOS, đường dẫn đến một tệp keychain thay thế

  • apid; Linux/SecretService, ID thay thế cho ứng dụng

Sử dụng Keyring trên Ubuntu 16.04

Sau đây là bảng điểm hoàn chỉnh để cài đặt Keyring trong môi trường ảo trên Ubuntu 16.04. Không có tệp cấu hình nào được sử dụng:

$ sudo apt install python3-venv libdbus-glib-1-dev
$ cd /tmp
$ pyvenv py3
$ source py3/bin/activate
$ pip install -U pip
$ pip install secretstorage dbus-python
$ pip install keyring
$ python
>>> import keyring
>>> keyring.get_keyring()

>>> keyring.set_password("system", "username", "password")
>>> keyring.get_password("system", "username")
'password'

Sử dụng Keyring trên các hệ thống Linux không đầu

Có thể sử dụng phụ trợ SecretService trên các hệ thống Linux mà không có máy chủ X11 (chỉ cần D-bus). Trong trường hợp này:

  • Cài đặt trình nền Keyring Gnome.

  • Bắt đầu một phiên D-Bus, ví dụ: Chạy-session chạy DBUS-- SH và chạy các lệnh sau bên trong vỏ đó.dbus-run-session -- sh and run the following commands inside that shell.

  • Chạy Gnome-Keyring-Daemon với tùy chọn --unlock. Mô tả của tùy chọn đó cho biết:gnome-keyring-daemon with --unlock option. The description of that option says:

    Đọc mật khẩu từ Stdin và sử dụng nó để mở khóa Keyring đăng nhập hoặc tạo nó nếu Keyring đăng nhập không tồn tại.

    Khi lệnh đó được bắt đầu, hãy nhập mật khẩu vào Stdin và nhấn Ctrl+D (cuối dữ liệu). Sau đó, Daemon sẽ ngã ba vào nền (sử dụng -tùy chọn trước để chặn).--foreground option to block).

  • Bây giờ bạn có thể sử dụng phần phụ trợ bí mật của Keyring. Hãy nhớ chạy ứng dụng của bạn trong cùng một phiên D-bus với trình nền.

Sử dụng Keyring trên các hệ thống Linux không đầu trong thùng chứa Docker

Có thể sử dụng Keyring với phần phụ trợ bí mật trong các thùng chứa Docker. Tất cả những gì bạn cần làm là cài đặt các phụ thuộc cần thiết và thêm cờ của bạn để tránh mọi hoạt động không được phép lỗi khi cố gắng mở khóa hệ thống Keyring.

Sau đây là bảng điểm hoàn chỉnh để cài đặt Keyring trên container Ubuntu 18:04:

docker run -it -d --privileged ubuntu:18.04

$ apt-get update
$ apt install -y gnome-keyring python3-venv python3-dev
$ python3 -m venv venv
$ source venv/bin/activate # source a virtual environment to avoid polluting your system
$ pip3 install --upgrade pip
$ pip3 install keyring
$ dbus-run-session -- sh # this will drop you into a new D-bus shell
$ echo 'somecredstorepass' | gnome-keyring-daemon --unlock # unlock the system's keyring

$ python
>>> import keyring
>>> keyring.get_keyring()

>>> keyring.set_password("system", "username", "password")
>>> keyring.get_password("system", "username")
'password'

Hội nhập

API

LIB KEYRING có một vài chức năng:

  • get_keyring (): Trả về triển khai Keyring hiện đang được tải.: Return the currently-loaded keyring implementation.

  • get_password (dịch vụ, tên người dùng): Trả về mật khẩu được lưu trữ trong khóa hoạt động. Nếu mật khẩu không tồn tại, nó sẽ không trả về.: Returns the password stored in the active keyring. If the password does not exist, it will return None.

  • get_credential (dịch vụ, tên người dùng): Trả về một đối tượng thông tin xác thực được lưu trữ trong Keyring hoạt động. Đối tượng này chứa ít nhất các thuộc tính tên người dùng và mật khẩu cho dịch vụ được chỉ định, trong đó tên người dùng được trả về có thể khác với đối số.: Return a credential object stored in the active keyring. This object contains at least username and password attributes for the specified service, where the returned username may be different from the argument.

  • set_password (dịch vụ, tên người dùng, mật khẩu): Lưu trữ mật khẩu trong khóa.: Store the password in the keyring.

  • Delete_Password (Dịch vụ, Tên người dùng): Xóa mật khẩu được lưu trữ trong Keyring. Nếu mật khẩu không tồn tại, nó sẽ tăng một ngoại lệ.: Delete the password stored in keyring. If the password does not exist, it will raise an exception.

Trong mọi trường hợp, các tham số (dịch vụ, tên người dùng, mật khẩu) phải là văn bản Unicode.service, username, password) should be Unicode text.

Ngoại lệ

LIB KEYRING làm tăng các trường hợp ngoại lệ sau:

  • Keyring.Errors.KeyRingError: Lớp lỗi cơ sở cho tất cả các ngoại lệ trong Keyring lib.: Base Error class for all exceptions in keyring lib.

  • Keyring.Errors.initerror: Lớn lên khi không thể khởi tạo Keyring.: Raised when the keyring cannot be initialized.

  • Keyring.Errors.PasswordsetError: Được nâng lên khi mật khẩu không thể được đặt trong Keyring.: Raised when the password cannot be set in the keyring.

  • Keyring.Errors.PasswordDeleteError: Được nâng lên khi mật khẩu không thể bị xóa trong Keyring.: Raised when the password cannot be deleted in the keyring.

Tham gia vào

Python Keyring Lib là một dự án cộng đồng mở và háo hức chào đón những người đóng góp.

  • Kho lưu trữ: https://github.com/jaraco/keyring/

  • Trình theo dõi lỗi: https://github.com/jaraco/keyring/issues/

  • Danh sách gửi thư: http://groups.google.com/group/python-keyring

Cho doanh nghiệp

Có sẵn như một phần của đăng ký Tidelift.

Dự án này và người bảo trì hàng ngàn gói khác đang làm việc với Tidelift để cung cấp một đăng ký doanh nghiệp bao gồm tất cả các nguồn mở bạn sử dụng.

Tìm hiểu thêm.

Liên hệ bảo mật

Để báo cáo lỗ hổng bảo mật, vui lòng sử dụng liên hệ bảo mật Tidelift. Tidelift sẽ phối hợp sửa chữa và tiết lộ.

Cân nhắc về Bảo mật

Mỗi phụ trợ tích hợp có thể có những cân nhắc bảo mật để hiểu trước khi sử dụng thư viện này. Các tác giả của các công cụ hoặc thư viện sử dụng Keyring được khuyến khích xem xét những mối quan tâm này.keyring are encouraged to consider these concerns.

Như với bất kỳ danh sách các mối quan tâm bảo mật đã biết, danh sách này không đầy đủ. Các vấn đề bổ sung có thể được thêm vào khi cần thiết.

  • Keychain MacOS
    • Bất kỳ tập lệnh hoặc ứng dụng Python nào cũng có thể truy cập vào các bí mật được tạo bằng cách khóa từ cùng một Python có thể thực thi mà không cần hệ điều hành khiến người dùng đưa ra mật khẩu. Để gây ra bất kỳ bí mật cụ thể nào để nhắc mật khẩu mỗi khi được truy cập, hãy xác định thông tin đăng nhập bằng ứng dụng truy cập Keychain và trong cài đặt điều khiển truy cập, hãy xóa Python khỏi danh sách các ứng dụng được phép.keyring from that same Python executable without the operating system prompting the user for a password. To cause any specific secret to prompt for a password every time it is accessed, locate the credential using the Keychain Access application, and in the Access Control settings, remove Python from the list of allowed applications.

  • Freedesktop Secret Service
    • Không có phân tích nào được thực hiện

  • KDE4 & KDE5 KWALLET
    • Không có phân tích nào được thực hiện

  • KDE4 & KDE5 KWALLET
    • Không có phân tích nào được thực hiện

KDE4 & KDE5 KWALLET

Windows Ch dụng khóa thông tin

Phát hành

  • Dự án này sử dụng các bản phát hành tự động và tích hợp liên tục. Quy trình công việc đơn giản là gắn thẻ một cam kết và đẩy nó vào GitHub. Nếu nó vượt qua các bài kiểm tra trong CI, nó sẽ được tự động triển khai đến PYPI.

Những điều khác cần xem xét khi phát hành:

Kiểm tra xem Changelog là hiện tại cho bản phát hành dự định.

Chạy thử nghiệm

Các thử nghiệm liên tục chạy trong các hành động của GitHub.

Để chạy các bài kiểm tra cục bộ, cài đặt và gọi TOX.