Làm cách nào để ẩn thông tin nhạy cảm như mật khẩu văn bản gốc khỏi nhật ký?


10

Tôi không có quyền truy cập vào bản cài đặt Postgres, vì vậy tôi không thể kiểm tra.

Tôi là một nhân viên bảo mật và tôi đang nhìn thấy mật khẩu văn bản gốc trong nhật ký:

create user user1 with password 'PLAINTEXT PASSWORD'

Làm thế nào các DBA có thể thay đổi hoặc tạo mật khẩu của họ mà không có mật khẩu rõ ràng trong nhật ký?

Tôi đã thấy điều này , trong đó tuyên bố bạn có thể sử dụng hàm băm md5 của mật khẩu, nhưng sau đó hàm băm cũng rõ ràng. Có cách nào tốt hơn?


1
Nếu bạn tin tưởng các DBA của mình (vì bạn không thể thực thi nó), hãy bảo họ sử dụng \passwordlệnh của psql.
dezso

Câu trả lời:


11

Nghe có vẻ như log_statementđược đặt thành all.

Nếu bạn muốn ngăn mật khẩu xuất hiện trong nhật ký trong khi log_statementđược đặt thành giá trị bắt ALTER USER/ ALTER ROLEsau đó bạn sẽ muốn ghi đè mật khẩu đó khi thay đổi mật khẩu. ví dụ

BEGIN;
SET LOCAL log_statement = 'none';
ALTER USER ... SET PASSWORD ...;
COMMIT;

Bạn phải là một siêu người dùng để làm điều này. Người dùng bình thường không thể ghi đè quy tắc đăng nhập.

Nó sẽ được tốt đẹp nếu PostgreSQL hỗ trợ suy giảm một số thông số để báo cáo (hoặc các chức năng chẵn) như người dùng bảo mật nhạy cảm và được phép yêu cầu rằng họ được che giấu trong nhật ký, pg_stat_statements, pg_stat_activity, vv Không có hiện bất kỳ tính năng như vậy - nhưng hey, bản vá chào mừng Nếu bạn thực sự quan tâm, hãy đăng lên tin tặc pssql trước khi viết bất kỳ mã thực tế nào để bạn có thể nhận được lời khuyên và nhận xét. Thay phiên, nói chuyện với một người làm hợp đồng phát triển.

Nói chung, PostgreSQL hy vọng bạn coi các bản ghi là nhạy cảm.

Có những lĩnh vực khác mà đăng nhập là một mối quan tâm an ninh nghiêm trọng. Ví dụ, một số pgcryptohàm lấy khóa mật mã làm tham số.


3

Câu trả lời hiện được chấp nhận không hoạt động với tôi trên Postgres 9.4, vì đã ngăn mật khẩu văn bản gốc hiển thị trong nhật ký.

Điều làm việc cho tôi thay vào đó là tạo mật khẩu băm cục bộ:

$ username='some_user'; dbpass='some_pass'; echo -n "${dbpass}${username}" | md5sum | awk '{print "md5" $1}'
md5dcca63c0632e24746a19448231cac29c

Sau đó chèn:

ALTER USER some_user WITH UNENCRYPTED PASSWORD 'md5dcca63c0632e24746a19448231cac29c';

(Lưu ý bảo mật: Tùy thuộc vào nơi bạn tạo ở trên, bạn có thể muốn ngăn vỏ của mình đăng nhập vào lịch sử của nó hoặc trên hệ thống dùng chung, bạn có thể muốn sử dụng tiện ích * nix sẽ nhắc mật khẩu so với thực sự bao gồm nó trong lệnh. Tôi tình cờ không ở trên một hệ thống dùng chung, vì vậy đó không phải là vấn đề đáng lo ngại đối với tôi.)


1
Rất tốt. Một điều tôi muốn thêm vào với một số điểm nhấn là đơn giản là không nên đặt mật khẩu ở dạng văn bản rõ ràng.
dezso

2
Vâng, tôi đã xem xét điều này và đề cập đến nó trong câu hỏi. Nó vẫn không đủ cho yêu cầu của tôi.
schroeder
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.