Sự khác biệt giữa sudo su - postgres và sudo -u postgres là gì?


36

Theo mặc định, người dùng PostgreQuery xác thực ngang hàng trên các ổ cắm unix, trong đó người dùng unix phải giống với người dùng PostgreQuery. Vì vậy, mọi người thường xuyên sử dụng suhoặc sudođể trở thành postgressiêu người dùng.

Tôi thường thấy mọi người sử dụng các cấu trúc như:

sudo su - postgres

thay vì

sudo -u postgres -i

và tôi đang tự hỏi tại sao. Tương tự, tôi đã thấy:

sudo su - postgres -c psql

thay vì

sudo -u postgres psql

Nếu không có phiên bản hàng đầu sudo, susẽ có ý nghĩa nếu bạn ở trên một nền tảng cũ mà không có sudo. Nhưng tại sao trên UNIX hoặc Linux ít sử dụng hơn bạn sẽ sử dụng sudo su?


Câu trả lời:


40

Quên sudo su

Không có lợi ích gì khi sử dụng sudo su, đó là thói quen lỗi thời từ khi mọi người đã quen sử dụng su. Mọi người bắt đầu giải quyết sudotrước khi các bản phân phối Linux ngừng đặt mật khẩu gốc và thực hiện sudocách duy nhất để truy cập vào tài khoản root. Thay vì thay đổi thói quen của họ, họ chỉ sử dụng sudo su. (Tôi là một trong số họ cho đến gần đây khi sử dụng các hộp có cấu hình sudoersbuộc tôi phải thay đổi thói quen của mình).

Sử dụng sudo -u

Đối với một vỏ đăng nhập, sudo -u postgres -itốt hơn là sudo su - postgres. Nó không yêu cầu người dùng có quyền truy cập root /etc/sudoers, họ chỉ cần quyền trở thành người dùng postgres. Nó cũng cho phép bạn thực thi các điều khiển truy cập tốt hơn.

Để thực hiện lệnh

sudo -u postgres psql -c "SELECT 1"

là vượt trội so với lựa chọn thay thế:

sudo su - postgres -c "psql -c \"SELECT 1\""

trong đó bạn không phải thoát hai dấu ngoặc kép và các siêu ký tự shell khác cũng như các lợi thế bảo mật khác của việc không cần root. Bạn có thể sẽ vô tình viết lên:

sudo su - postgres -c psql -c "SELECT 1"

đôi khi, nó sẽ không hoạt động đúng.

Cuối cùng, cách dễ dàng hơn để đặt các biến môi trường thông qua sudo, ví dụ:

sudo PATH=/usr/pgsql-9.3/bin:$PATH -u postgres /usr/pgsql-9.3/bin/initdb -D /var/lib/pgsql/testcluster

hơn thông qua su. (Ở đây, PATHcài đặt là bắt buộc để initdbcó thể tìm thấy postgrestệp thực thi chính xác ).

Vì thế. Quên sulệnh tồn tại. Bạn không cần nó nữa. Để bỏ thói quen, hãy đặt bí danh cho thứ gì đó sẽ in lỗi. (Tuy nhiên, một số tập lệnh thiết lập gói và init vẫn sử dụng suđể bạn không thể xóa nó).

Xem thêm:

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.