2012-08-14 8 views
13

Sau khi tôi cài đặt PostgreSQL 9.1 trên Ubuntu 12.04, tôi đặt mật khẩu cho tài khoản superuser "postgres". Tôi muốn tất cả người dùng phải nhập mật khẩu của họ khi đăng nhập. Đây là lý do tại sao tôi đã định cấu hình pg_hba.conf như sau:Không có nhắc mật khẩu cho postgresql superuser

#Database administrative login by Unix domain socket 
local all    postgres        md5 

# TYPE DATABASE  USER   ADDRESS     METHOD 

# "local" is for Unix domain socket connections only 
local all    all          md5 

Tôi khởi động lại postgresql sau khi thực hiện những thay đổi đó. Khi tôi làm điều này psql -U testuser Tôi được yêu cầu nhập mật khẩu, nhưng khi tôi đăng nhập bằng tài khoản "postgres" như vậy psql -U postgres Tôi không nhận được lời nhắc mật khẩu và đã đăng nhập. Nếu tôi buộc lời nhắc mật khẩu với psql -U postgres -W Tôi có thể đăng nhập bằng nhập mật khẩu chính xác hoặc không nhập gì cả. Nhập sai mật khẩu bị từ chối.

Ai cũng có thể giải thích cho tôi biết tại sao điều này xảy ra?

Trên ghi chú liên quan: Tôi thấy rất nhiều ví dụ khi mọi người sử dụng nhận dạng làm phương thức xác thực cho người dùng "postgres", cho rằng để trở thành người dùng "postgres" cần mật khẩu gốc của máy. Tôi cho rằng lý do là nếu một kẻ tấn công được quyền truy cập root, anyways thực hiện của bạn. Mặc dù vậy, tôi muốn đăng nhập bằng mật khẩu, mật khẩu không giống với mật khẩu gốc. Tôi prefere có mật khẩu khác nhau cho những thứ khác nhau. Điều này có hợp lý không?

Sản lượng grep '^[^#]' pg_hba.conf

local all    postgres        md5 
local all    all          md5 
host all    all    127.0.0.1/32   md5 

Trả lời

13

bạn pg_hba.conf thực sự nên yêu cầu mật khẩu cho các kết nối ổ cắm unix, nhưng vẫn có những cách xung quanh nó mà bạn nên xác minh:

  1. một file .pgpass trong postgres thư mục home chứa mật khẩu (cũng kiểm tra PGPASSFILE biến môi trường cho đường dẫn không chuẩn).

  2. biến môi trường PGPASSWORD có thể được đặt.

Và cũng có khả năng bạn đang chỉnh sửa tệp pg_hba.conf sai. Khi được kết nối dưới dạng đường bưu điện, đường dẫn chính xác có thể được lấy để xác minh bằng lệnh SQL SHOW hba_file.

Ngoài ra, bạn có thể muốn kiểm tra tệp nhật ký, /var/log/postgresql/postgresql-9.1-main.log để xác nhận rằng các tệp cấu hình được tải lại khi bạn yêu cầu và tìm kiếm bất kỳ thông báo nghi ngờ nào trong quá trình xác thực.

Đối với lý do tại sao kết nối mật mã với người dùng postgres là phổ biến, debian PG-9.1 pg_hba.conf có nhận xét này về không cho phép họ:

# DO NOT DISABLE! 
# If you change this first entry you will need to make sure that the 
# database superuser can access the database using some other method. 
# Noninteractive access to all databases is required during automatic 
# maintenance (custom daily cronjobs, replication, and similar tasks). 
# 
# Database administrative login by Unix domain socket 
local all    postgres        peer 

Kể từ Debian và Ubuntu sử dụng postgres gói cùng, điều này áp dụng với Ubuntu.

+0

Đó là tệp .pgpass, cảm ơn! Một phần của tệp pg_hba.conf mà bạn trích dẫn đã gây nhầm lẫn cho tôi một chút. Tôi có thể làm gì để cung cấp truy cập không tương tác mà không cho phép đăng nhập mà không cần mật khẩu? – Basil

+0

Xác thực ngang hàng nên được tìm kiếm cho điều này, giả sử bạn không cho phép mọi người đăng nhập vào máy chủ theo tài khoản postgres. – Andrew

+1

Tôi đã lưu ý hành vi tương tự trong Windows. Sau khi thêm các kết nối mới trong PgAdminIII, tôi không còn được nhắc nhở về mật khẩu bởi psql khi kết nối với postgres. Thủ phạm là pgpass.conf, được tạo tự động bởi PgAdminIII trong thư mục% APPDATA% \ postgresql. Cảm ơn Daniel. –

5

Re hành vi kỳ quặc của mình, tôi nghĩ rằng bạn đã bỏ lỡ một dòng pg_hba.conf đó là cụ thể cho người sử dụng postgres. Vui lòng hiển thị kết quả của:

grep '^[^#]' pg_hba.conf 

Đối với ident so với md5; cá nhân tôi thích nhận dạng để sử dụng tương tác trong phát triển, và nó là tốt cho người dùng bình thường, nhưng tôi không nghĩ rằng việc cấp quyền truy cập cho người dùng postgres qua sudo là một ý tưởng tuyệt vời. Cả hai sudo -u postgres psqlpsql -U postgres -W cấp quyền truy cập vào vai trò superuser postgres và do đó truy cập hệ thống tệp là người dùng cơ sở dữ liệu. Không yêu cầu mật khẩu gốc và sudo có thể dễ dàng bị hạn chế thông qua sudoers để giới hạn người dùng đang gọi để chỉ chạy psql. Tuy nhiên, với sudo -u postgres psql mã số của khách hàng cũng chạy như postgres cũng vậy, do đó, đây là một bề mặt tấn công lớn hơn và luôn có khả năng người dùng tìm cách vượt qua giới hạn sudoer của bạn.

Tôi sử dụng ident trong dev, md5 trong quá trình sản xuất.

+0

Cảm ơn bạn đã làm rõ về các phương thức xác thực.I đã thêm đầu ra cho câu hỏi. – Basil