Tên của trăn được xây dựng trong mô-đun để đọc mật khẩu là gì?

Nhiều chương trình tương tác với người dùng thông qua thiết bị đầu cuối cần hỏi người dùng giá trị mật khẩu mà không hiển thị nội dung người dùng nhập trên màn hình. Mô-đun getpass cung cấp một cách di động để xử lý các lời nhắc mật khẩu đó một cách an toàn

Thí dụ

Hàm getpass[] in lời nhắc sau đó đọc đầu vào từ người dùng cho đến khi họ nhấn phím quay lại. Đầu vào được trả lại dưới dạng một chuỗi cho người gọi

import getpass

p = getpass.getpass[]
print 'You entered:', p

Lời nhắc mặc định, nếu người gọi không chỉ định, là “Mật khẩu. ”

$ python getpass_defaults.py
Password:
You entered: sekret

Lời nhắc có thể được thay đổi thành bất kỳ giá trị nào mà chương trình của bạn cần

import getpass

p = getpass.getpass[prompt='What is your favorite color? ']
if p.lower[] == 'blue':
    print 'Right.  Off you go.'
else:
    print 'Auuuuugh!'

Tôi không khuyên bạn nên sử dụng sơ đồ xác thực không an toàn như vậy, nhưng nó minh họa điểm

$ python getpass_prompt.py
What is your favorite color?
Right.  Off you go.
$ python getpass_prompt.py
What is your favorite color?
Auuuuugh!

Theo mặc định, getpass[] sử dụng thiết bị xuất chuẩn để in chuỗi dấu nhắc. Đối với một chương trình có thể tạo ra đầu ra hữu ích trên sys. thiết bị xuất chuẩn, tốt hơn hết là gửi lời nhắc đến một luồng khác, chẳng hạn như sys. tiêu chuẩn

import getpass
import sys

p = getpass.getpass[stream=sys.stderr]
print 'You entered:', p

Bằng cách này, đầu ra tiêu chuẩn có thể được chuyển hướng [đến một đường ống hoặc tệp] mà không cần nhìn thấy lời nhắc mật khẩu. Giá trị được nhập bởi người dùng vẫn không được lặp lại màn hình

$ python getpass_stream.py >/dev/null
Password:

Sử dụng getpass mà không cần Terminal

Trong Unix, getpass[] luôn yêu cầu một tty mà nó có thể điều khiển thông qua termios, do đó có thể tắt tiếng vang. Điều này có nghĩa là các giá trị sẽ không được đọc từ luồng không phải đầu cuối được chuyển hướng đến đầu vào tiêu chuẩn

$ echo "sekret" | python getpass_defaults.py
Traceback [most recent call last]:
 File "getpass_defaults.py", line 34, in
   p = getpass.getpass[]
 File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/getpass.py", line 32, in unix_getpass
   old = termios.tcgetattr[fd]     # a copy to save
termios.error: [25, 'Inappropriate ioctl for device']

Người gọi có thể phát hiện khi nào luồng đầu vào không phải là tty và sử dụng một phương pháp thay thế để đọc trong trường hợp đó

Mật khẩu đặc biệt có vấn đề đối với các lập trình viên. Bạn không được phép lưu trữ chúng mà không mã hóa chúng và bạn không được tiết lộ những gì đã được nhập khi người dùng của bạn nhập một. Điều này trở nên đặc biệt quan trọng đối với tôi khi tôi quyết định muốn tăng cường bảo mật cho máy tính xách tay của mình. Tôi mã hóa thư mục chính của mình—nhưng khi tôi đăng nhập, bất kỳ mật khẩu nào được lưu dưới dạng văn bản thuần túy trong tệp cấu hình đều có khả năng bị lộ trước những con mắt tò mò

Cụ thể, tôi sử dụng một ứng dụng có tên là Mutt làm ứng dụng email khách của mình. Nó cho phép tôi đọc và soạn email trong thiết bị đầu cuối Linux của mình, nhưng thông thường, nó sẽ yêu cầu mật khẩu trong tệp cấu hình của nó. Tôi đã hạn chế quyền đối với tệp cấu hình Mutt của mình để chỉ tôi có thể xem tệp đó, nhưng tôi là người dùng duy nhất trên máy tính xách tay của mình, vì vậy tôi không thực sự lo lắng về việc người dùng đã xác thực vô tình nhìn vào cấu hình của tôi. Thay vào đó, tôi muốn bảo vệ bản thân khỏi việc đăng cấu hình của mình lên mạng một cách lơ đãng, để khoe khoang quyền hoặc kiểm soát phiên bản, với mật khẩu của tôi bị lộ. Ngoài ra, mặc dù tôi không mong muốn có những vị khách không mời trên hệ thống của mình, nhưng tôi muốn đảm bảo rằng kẻ xâm nhập không thể lấy được mật khẩu của tôi chỉ bằng cách chạy

$ python getpass_prompt.py
What is your favorite color?
Right.  Off you go.
$ python getpass_prompt.py
What is your favorite color?
Auuuuugh!
5 trên cấu hình của tôi

Python GnuPG

Thêm tài nguyên Python

  • IDE là gì?
  • bảng ăn gian. Trăn 3. 7 cho người mới bắt đầu
  • Khung GUI Python hàng đầu
  • Tải xuống. 7 thư viện PyPI thiết yếu
  • Nhà phát triển mũ đỏ
  • Nội dung Python mới nhất

Mô-đun Python

$ python getpass_prompt.py
What is your favorite color?
Right.  Off you go.
$ python getpass_prompt.py
What is your favorite color?
Auuuuugh!
6 là trình bao bọc Python cho ứng dụng

$ ./test.py
Enter password: my-Complex-Passphrase

0. Tên của mô-đun là
$ python getpass_prompt.py
What is your favorite color?
Right.  Off you go.
$ python getpass_prompt.py
What is your favorite color?
Auuuuugh!
6, bạn không được nhầm lẫn với mô-đun có tên là

$ ./test.py
Enter password: my-Complex-Passphrase

2

GnuPG [GPG] là hệ thống mã hóa mặc định cho Linux và tôi đã sử dụng hệ thống này từ năm 2009 trở đi. Tôi cảm thấy thoải mái với nó và có mức độ tin tưởng cao vào tính bảo mật của nó

Tôi quyết định rằng cách tốt nhất để lấy mật khẩu của mình vào Mutt là lưu trữ mật khẩu của mình trong tệp GPG được mã hóa, tạo lời nhắc cho mật khẩu GPG của tôi để mở khóa tệp được mã hóa và giao mật khẩu cho Mutt [thực ra là cho lệnh

$ ./test.py
Enter password: my-Complex-Passphrase

3,

Nhận đầu vào của người dùng bằng Python khá dễ dàng. Bạn thực hiện cuộc gọi tới

$ ./test.py
Enter password: my-Complex-Passphrase

4 và bất kỳ loại nào người dùng nhập đều được lưu trữ dưới dạng biến

$ python getpass_defaults.py
Password:
You entered: sekret
1

Vấn đề của tôi là khi tôi nhập mật khẩu vào thiết bị đầu cuối theo lời nhắc mật khẩu của mình, mọi thứ tôi nhập đều hiển thị cho bất kỳ ai nhìn qua vai tôi hoặc cuộn qua lịch sử thiết bị đầu cuối của tôi

$ ./test.py
Enter password: my-Complex-Passphrase

Nhập mật khẩu vô hình với getpass

Như thường lệ, có một mô-đun Python đã giải quyết được vấn đề của tôi. Mô-đun này là

$ ./test.py
Enter password: my-Complex-Passphrase

5 và theo quan điểm của người dùng, nó hoạt động giống hệt như

$ ./test.py
Enter password: my-Complex-Passphrase

4 ngoại trừ việc không hiển thị những gì người dùng đang nhập

Bạn có thể cài đặt cả hai mô-đun với pip

$ python getpass_defaults.py
Password:
You entered: sekret
5

Đây là tập lệnh Python của tôi để tạo lời nhắc mật khẩu

$ python getpass_defaults.py
Password:
You entered: sekret
6

Lưu tệp dưới dạng

$ ./test.py
Enter password: my-Complex-Passphrase

7 nếu bạn muốn dùng thử. Nếu bạn đang sử dụng

$ ./test.py
Enter password: my-Complex-Passphrase

3 và muốn sử dụng giải pháp này để nhập mật khẩu của riêng mình, thì hãy lưu nó vào một số vị trí mà bạn có thể trỏ

$ ./test.py
Enter password: my-Complex-Passphrase

3 tới trong tệp
$ python getpass_defaults.py
Password:
You entered: sekret
50 của mình [tôi sử dụng
$ python getpass_defaults.py
Password:
You entered: sekret
51]

Kiểm tra lời nhắc mật khẩu

Để xem tập lệnh đang hoạt động, trước tiên bạn phải tạo một tệp được mã hóa [Tôi cho rằng bạn đã thiết lập GPG]

import getpass

p = getpass.getpass[prompt='What is your favorite color? ']
if p.lower[] == 'blue':
    print 'Right.  Off you go.'
else:
    print 'Auuuuugh!'
2

Bây giờ hãy chạy tập lệnh Python

import getpass

p = getpass.getpass[prompt='What is your favorite color? ']
if p.lower[] == 'blue':
    print 'Right.  Off you go.'
else:
    print 'Auuuuugh!'
3

Không có gì hiển thị khi bạn nhập, nhưng miễn là bạn nhập chính xác cụm mật khẩu GPG của mình, bạn sẽ thấy thông báo kiểm tra

Tích hợp lời nhắc mật khẩu với offlineimap

Tôi cần tích hợp lời nhắc mới của mình với lệnh

$ ./test.py
Enter password: my-Complex-Passphrase

3. Tôi đã chọn Python cho tập lệnh này vì tôi biết rằng

$ ./test.py
Enter password: my-Complex-Passphrase

3 có thể gọi các ứng dụng Python. Nếu bạn là người dùng

$ ./test.py
Enter password: my-Complex-Passphrase

3, bạn sẽ đánh giá cao rằng yêu cầu "tích hợp" duy nhất là thay đổi hai dòng trong tệp
$ python getpass_defaults.py
Password:
You entered: sekret
50 của bạn

Đầu tiên, thêm một dòng tham chiếu tệp Python

import getpass

p = getpass.getpass[prompt='What is your favorite color? ']
if p.lower[] == 'blue':
    print 'Right.  Off you go.'
else:
    print 'Auuuuugh!'
8

Và sau đó thay thế dòng

$ python getpass_defaults.py
Password:
You entered: sekret
56 trong
$ python getpass_defaults.py
Password:
You entered: sekret
50 bằng một lệnh gọi hàm
$ python getpass_defaults.py
Password:
You entered: sekret
58 trong

$ ./test.py
Enter password: my-Complex-Passphrase

7

$ python getpass_prompt.py
What is your favorite color?
Right.  Off you go.
$ python getpass_prompt.py
What is your favorite color?
Auuuuugh!
3

Không còn mật khẩu trong tệp cấu hình của bạn

vấn đề an ninh

Đôi khi bạn cảm thấy gần như hoang tưởng khi nghĩ về những chi tiết vụn vặt về bảo mật trên máy tính cá nhân của mình. Cấu hình SSH của bạn có thực sự cần giới hạn ở mức 600 không?

Tuy nhiên, biết rằng tôi không có dữ liệu nhạy cảm được giấu kín trong các tệp cấu hình của mình giúp tôi dễ dàng chuyển các tệp vào kho lưu trữ Git công khai, sao chép và dán các đoạn mã vào các diễn đàn hỗ trợ và chia sẻ kiến ​​thức của mình dưới dạng . Chỉ riêng điều đó, bảo mật được cải thiện đã giúp cuộc sống của tôi dễ dàng hơn. Và với rất nhiều mô-đun Python tuyệt vời có sẵn để trợ giúp, thật dễ dàng để thực hiện

Đọc gì tiếp theo

Không bao giờ quên mật khẩu của bạn với thuật toán mã hóa Python này

Thuật toán độc đáo này sử dụng Python và Chia sẻ bí mật của Shamir bảo vệ mật khẩu chính của bạn khỏi tin tặc và sự lãng quên của chính bạn

Moshe Zadka

[Phóng viên]

11 Tháng Sáu, 2020

Tạo mật khẩu ngẫu nhiên với tập lệnh Bash này

Loại bỏ rắc rối khi chọn mật khẩu với tập lệnh Bash đơn giản này

Greg Pittman

19 Tháng Mười Một, 2019

thẻ

An ninh và sự riêng tư

con trăn

Seth Kenlon

Seth Kenlon là một người đam mê UNIX, người ủng hộ văn hóa tự do, nghệ sĩ đa phương tiện độc lập và mọt sách D&D. Anh ấy đã làm việc trong ngành công nghiệp điện ảnh và máy tính, thường là cùng một lúc

Chủ Đề