Việc truyền thông tin xác thực socket Unix được thực hiện như thế nào trong Python?Chứng chỉ của trình cắm Unix được chuyển bằng Python
8
A
Trả lời
17
Tìm kiếm trên Internet về chủ đề này đã đưa ra một số kết quả đáng ngạc nhiên. Tôi nghĩ tôi sẽ đăng câu hỏi và trả lời ở đây cho những người khác quan tâm đến chủ đề này.
Các ứng dụng khách và máy chủ sau đây trình bày cách thực hiện điều này trên Linux với trình thông dịch chuẩn python. Không có phần mở rộng được yêu cầu nhưng, do việc sử dụng các hằng số được nhúng, mã này là dành riêng cho Linux.
Server:
#!/usr/bin/env python
import struct
from socket import socket, AF_UNIX, SOCK_STREAM, SOL_SOCKET
SO_PEERCRED = 17 # Pulled from /usr/include/asm-generic/socket.h
s = socket(AF_UNIX, SOCK_STREAM)
s.bind('/tmp/pass_cred')
s.listen(1)
conn, addr = s.accept()
creds = conn.getsockopt(SOL_SOCKET, SO_PEERCRED, struct.calcsize('3i'))
pid, uid, gid = struct.unpack('3i',creds)
print 'pid: %d, uid: %d, gid %d' % (pid, uid, gid)
Chủ đầu tư:
#!/usr/bin/env python
from socket import socket, AF_UNIX, SOCK_STREAM, SOL_SOCKET
SO_PASSCRED = 16 # Pulled from /usr/include/asm-generic/socket.h
s = socket(AF_UNIX, SOCK_STREAM)
s.setsockopt(SOL_SOCKET, SO_PASSCRED, 1)
s.connect('/tmp/pass_cred')
s.close()
Thật không may, hằng SO_PEERCRED và SO_PASSCRED chưa được xuất khẩu bởi module ổ cắm python vì vậy họ phải được nhập bằng tay. Mặc dù những giá trị này không có khả năng thay đổi nó là có thể. Điều này cần được xem xét bởi bất kỳ ứng dụng nào sử dụng phương pháp này.
Các vấn đề liên quan
- 1. Cách mở ổ cắm ssl bằng chứng chỉ được lưu trữ trong biến chuỗi trong python
- 2. Khoá chứng chỉ - chuyển đổi
- 3. Force MySQL để chỉ sử dụng unix ổ cắm
- 4. Chuyển chứng chỉ CERT/PEM sang chứng chỉ PFX
- 5. Ký ClickOnce bằng chứng chỉ?
- 6. Gửi tệp qua ổ cắm bằng Python
- 7. Làm cách nào để chuyển chứng chỉ SSL đến máy chủ SOAP bằng SOAPpy/Python
- 8. Chuyển chứng chỉ PKCS # 12 sang PEM bằng OpenSSL
- 9. Haskell: Ổ cắm miền Unix
- 10. Lập trình Tạo Chứng chỉ X509 bằng OpenSSL
- 11. Cách đọc chứng chỉ từ kho chứng chỉ của tôi?
- 12. tạo lại lệnh cat Unix bằng Python
- 13. Ổ cắm miền PostgreSQL UNIX và ổ cắm TCP
- 14. Truy xuất chứng chỉ bằng OpenSSL .Net
- 15. Ổ cắm Unix, SOCK_SEQPACKET và SOCK_DGRAM
- 16. Chứng chỉ - Khi nào chúng được cài đặt trong kho chứng chỉ?
- 17. Tôi làm cách nào để truy cập vào chứng chỉ của cơ quan chứng chỉ gốc Windows bằng Delphi?
- 18. Chuyển đổi thời gian Unix bằng PowerShell
- 19. Ổ cắm miền UNIX trong Java
- 20. nhận được firefox để giải mã bằng phần riêng tư của chứng chỉ ứng dụng khách
- 21. Lỗi chứng chỉ bằng IMAP trong PHP
- 22. Cách thích hợp cho chương trình Python/Twisted để xác thực chứng chỉ SSL trong Windows là gì?
- 23. Làm thế nào để có được IP bên ngoài của một ổ cắm bằng Python?
- 24. chứng chỉ được tạo ngừng hoạt động khi được chuyển đến thư mục tài nguyên
- 25. Ổ cắm UNIX: Có thể giả mạo getockopt() SO_PEERCRED không?
- 26. Thiết lập ổ cắm máy chủ ssl với chứng chỉ đã ký
- 27. Máy chủ Ổ cắm SSL Đơn giản của Python
- 28. Nhận dữ liệu X509 từ chứng chỉ PFX bằng CryptoAPI
- 29. Làm cách nào để tạo chứng chỉ của tổ chức phát hành chứng chỉ với makecert?
- 30. Ổ cắm miền UNIX không thể truy cập được trên người dùng?
Tôi không nghĩ rằng họ có thể thay đổi. Trong trường hợp này, tất cả các ứng dụng hiện có sẽ phải được biên dịch lại ... Nhưng chúng có thể khác nhau giữa một số hệ điều hành hoặc một vài nền tảng. – glglgl
Tôi muốn +1 bạn nhưng một điều, đây thực sự không phải là thông tin xác thực. 'SO_PASSCRED' cho phép nhận (không gửi) thông tin đăng nhập, nhưng chúng được gửi bằng cách sử dụng' sendmsg' và một thông báo an toàn 'SCM_CREDENTIALS'. bạn đang đọc 'SO_PEERCRED' mà không phụ thuộc vào điều này, chỉ có ổ cắm là một ổ cắm miền unix hoặc được tạo bởi' socketpair'. và chỉ nhận được thông tin đăng nhập hiện tại (root có thể gửi thông báo xác thực phù hợp với người dùng khác) – Hasturkun
Tôi nghĩ SO_PEERCRED và SO_PASSCRED nằm trong mô-đun ổ cắm ngay bây giờ (ít nhất là trong 3.3). Không tìm thấy khi chúng được thêm vào. Tôi nhớ là họ không ở đó khi lần đầu tiên tôi tìm thấy bài đăng này một năm trước ... – yuyichao