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
0. Tên của mô-đun là$ ./test.py
Enter password: my-Complex-Passphrase
$ 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à
2$ ./test.py
Enter password: my-Complex-Passphrase
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
3,$ ./test.py
Enter password: my-Complex-Passphrase
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
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$ ./test.py
Enter password: my-Complex-Passphrase
$ python getpass_defaults.py Password: You entered: sekret1
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à
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$ ./test.py
Enter password: my-Complex-Passphrase
Bạn có thể cài đặt cả hai mô-đun với pip
$ python getpass_defaults.py Password: You entered: sekret5
Đâ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: sekret6
Lưu tệp dưới dạng
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$ ./test.py
Enter password: my-Complex-Passphrase
$ python getpass_defaults.py Password: You entered: sekret50 của mình [tôi sử dụng
$ python getpass_defaults.py Password: You entered: sekret51]
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
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$ ./test.py
Enter password: my-Complex-Passphrase
$ python getpass_defaults.py Password: You entered: sekret50 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: sekret56 trong
$ python getpass_defaults.py Password: You entered: sekret50 bằng một lệnh gọi hàm
$ python getpass_defaults.py Password: You entered: sekret58 trong
7$ ./test.py
Enter password: my-Complex-Passphrase
$ 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]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, 2019thẻ
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