Làm thế nào là sudo dự định sẽ được sử dụng?


24

Tôi đã thử cấu hình sudotrước đó, nhưng tôi đã không gặp quá nhiều may mắn với nó. Nó khác với su -l -c "x"như thế nào? Dường như thông qua tập tin cấu hình, người ta có thể làm cho nó để người dùng chỉ có thể có quyền truy cập vào một số lệnh nhất định và hơn thế nữa. Tôi luôn nghĩ về sudomột cách sắp xếp một lệnh như một người dùng hoặc nhóm khác. Vì các bản phân phối như Ubuntu và Mint làm cho nó dễ dàng bằng cách chủ yếu cho phép người dùng chính dễ dàng truy cập root thông qua mật khẩu, tôi không thực sự chắc chắn mục đích sử dụng của nó là gì.

Làm cách nào để thêm người dùng vào tệp sudo, cho họ quyền chỉ chạy một số lệnh nhất định tại thư mục gốc? Tôi cũng không muốn mở bất kỳ lỗ hổng bảo mật nào.

Câu trả lời:


16

Đối với thao tác cơ bản - chạy các lệnh dưới quyền root - sự khác biệt rõ ràng nhất giữa sudo và su là sudo yêu cầu mật khẩu của người dùng gọi (tức là mật khẩu của bạn) trong khi su yêu cầu mật khẩu của người dùng đích (tức là mật khẩu gốc). Ý nghĩa bảo mật đã được thảo luận rộng rãi trong một câu hỏi trước: Cách an toàn nhất để có được quyền root: sudo, su hoặc đăng nhập là gì? .

Sudo có các tính năng bổ sung ngoài su. Đặc biệt, khi bạn có mật khẩu người dùng, bạn có thể chạy bất kỳ lệnh nào với tư cách là người dùng đó. Mặt khác, sudo có thể được cấu hình để người dùng gọi nó chỉ có thể chạy các lệnh cụ thể như một số người dùng khác. Điều này là có thể bởi vì sudo không yêu cầu bất kỳ xác thực nào (ngoài việc có thể xác nhận rằng bạn là bạn bằng cách nhập mật khẩu của bạn - nhưng điều đó khác biệt một cách tinh tế với việc xác thực người dùng của bạn cho một tác vụ).

Bạn thay đổi cấu hình sudo bằng cách chạy visudolệnh dưới quyền root (không bao giờ chỉnh sửa cấu hình trực tiếp). Đảm bảo biến môi trường EDITORhoặc VISUALđược đặt thành trình chỉnh sửa yêu thích của bạn hoặc bạn có thể nhận được trình chỉnh sửa lạ. Các sudoerstrang người đàn ông là một chút ngắn gọn nhưng có ví dụ. Để cho phép người dùng bobchạy /bin/foo(với bất kỳ số lượng đối số nào) và /bin/bar --safe(nhưng không phải với bất kỳ đối số nào khác) như root, hãy sử dụng các dòng sau:

bob ALL = (root) /bin/foo
bob ALL = (root) /bin/bar --safe

2
sudolà một phát minh tuyệt vời
tshepang

1
Việc sudo yêu cầu mật khẩu root hay mật khẩu root tùy thuộc vào cấu hình. Nó có thể được thiết lập một trong hai cách.
Jonathan M Davis

3
@Tshepang Amen, anh trai. Nếu tôi phải giải phóng mật khẩu gốc và giải thích cho các kỹ thuật viên hỗ trợ về cách SU và không làm / bất cứ điều gì / ngoài apache2ctl gracefultôi nghĩ tôi muốn rạch cổ tay của mình và giải quyết nó.
Shadur

6

Sự khác biệt lớn nhất là với sudobạn không cần mật khẩu gốc để chạy lệnh dưới dạng root, như bạn muốn su. Bạn cần mật khẩu gốc để thêm ai đó vào sudoerstệp nhưng sau đó người đó có thể chạy tất cả hoặc một số (nếu bạn đã giới hạn mật khẩu) dưới dạng root mà không yêu cầu thêm mật khẩu.

Sự khác biệt khác là, như bạn đã lưu ý, sudocho phép kiểm soát tốt hơn nhiều chính xác những lệnh nào có thể chạy.

Để biết chi tiết về định dạng của sudoerstập tin chạy man sudoers. Bạn sẽ tìm thấy các ví dụ ở đó chỉ cho phép một số lệnh nhất định được chạy dưới quyền root. Cấu trúc cơ bản của mỗi dòng là:

user_list host_list = cmd_list

cmd_list có thể bao gồm các chi tiết về người dùng mà người dùng thực sự được phép chuyển sang. Chẳng hạn, bạn có thể cho phép quản trị viên web chuyển sang wwwroot để khởi động lại apache nhưng không phải root. Nó cũng có thể bao gồm các tùy chọn khác như liệu mật khẩu người dùng có được yêu cầu trước khi chuyển đổi hay không (đây là mặc định).

Một dòng ví dụ có thể là:

joe  ALL=(ALL) ALL

có nghĩa là: hãy để joe chạy bất kỳ lệnh nào trên bất kỳ máy chủ nào như bất kỳ người dùng nào. Một dòng chặt chẽ hơn có thể là:

joe  ALL=(operator) /usr/local/ops/

có nghĩa là: hãy để joe chạy bất kỳ lệnh nào trong thư mục / usr / local / ops với tư cách là "toán tử" của người dùng.

Có rất nhiều ví dụ ở cuối trang man sudoers.

Bạn nên chỉnh sửa /etc/sudoersbằng lệnh visudo. Điều này kiểm tra xem các tập tin là hợp pháp và giúp ngăn chặn bạn vô tình phá vỡ nó.


Việc có cần mật khẩu hay không khi sử dụng sudo hoàn toàn phụ thuộc vào cách sudoersthiết lập tệp. Nó có thể được thiết lập để yêu cầu mật khẩu hoặc thiết lập để không yêu cầu mật khẩu.
Jonathan M Davis

Các thực tiễn phổ biến khác để tránh thay đổi tệp chính / etc / sudoers vì IDS xem nó và vì định dạng của nó có thể phá hỏng ngày của bạn: Sử dụng đoạn mã sudo làm các tệp riêng biệt trong /etc/sudoers.d. Sử dụng nhóm bánh xe cho mọi người cho phép bất kỳ lệnh nào.
bbaassssiiee

2

Ngoài các câu trả lời khác, sudo cung cấp các phương tiện ghi nhật ký để bạn có thể theo dõi những lệnh nào đã được chạy và bởi ai. Điều này không nhằm mục đích bảo mật vì người dùng độc hại có quyền truy cập sudo có thể xóa sạch nhật ký. Nó rất hữu ích mặc dù để tìm ra chính xác những gì bạn hoặc một số quản trị viên khác đã làm mờ mắt vào lúc 2 giờ sáng tuần trước.


3
Đó là vì mục đích bảo mật vì sudo hỗ trợ đăng nhập vào syslog mà trong bất kỳ thiết lập chính nào liên quan đến bảo mật sẽ được cấu hình để đăng nhập vào một máy từ xa riêng biệt để nếu một hệ thống bị xâm phạm thì các bản ghi có thể bị ảnh hưởng.
Arrowmaster

Thuộc tính tệp chỉ
chắp
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.