sudoers - yêu cầu giải thích đơn giản


24

Bất cứ khi nào tôi muốn có thể chạy một cái gì đó đòi hỏi tôi phải sudoerquá nhiều lần, tôi cần google để định dạng /etc/sudoersđể nhắc lại cho tôi chính xác cách viết chính xác là gì.

Bây giờ tôi thấy các kiểu viết khác nhau trong sudoerstệp của mình , đó là hệ quả của các kết quả google khác nhau qua các tháng. Tôi cũng nhận thấy rằng ví dụ thứ hai (bên dưới) dường như hoạt động trong XFCE, nhưng không phải trong Cinnamon (Gnome 3). Điều này có thể hoàn toàn không liên quan, nhưng tôi không muốn biết một lần và mãi mãi, ngữ pháp chính xác của dòng sudoer là gì và sự khác biệt giữa các ví dụ đã cho là gì?

  1. redsandro ALL=NOPASSWD:/path/to/command
  2. redsandro ALL=(ALL) NOPASSWD:/path/to/command
  3. redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command

Ngoài ra, tất cả những gì ALLđể làm gì? Một người dùng, một lệnh, nhưng tôi cần sử dụng ALLtừ khóa tối đa ba lần? Tôi đang làm điều này sai?

Tất nhiên, bỏ qua NOPASSWD:làm cho bạn nhập mật khẩu của bạn trước khi bạn được phép chạy lệnh, nhưng có một điểm của sự nhầm lẫn là việc sử dụng =:, đối với lệnh cuối cùng mà là đối tượng của các dòng có thể được thêm vào phía trước bởi một trong hai =, :, , hay ), ngữ pháp khó hiểu cho ngữ nghĩa tương tự.


3
Tôi cũng cảm thấy thực sự thất vọng với sudoerscú pháp. Đọc trang người đàn ông thậm chí còn bực bội hơn: nó mô tả cái gọi là ngôn ngữ EBNF ngắn gọn và chính xác, các ví dụ rất dài. Do đó tôi không ngạc nhiên khi tìm thấy rất nhiều chủ đề ở đây liên quan đến tập tin này.
m-ric

1
Cảm ơn vì điều đó. Tôi muốn hỏi câu hỏi này kể từ khi tôi bắt gặp một tập tin sudoers vài năm trước :-)
vahidg

Câu trả lời:


35

Đó không chỉ là người dùng và lệnh:


redsandro host=(user:group) tag:commands
  • hostchỉ định tên máy chủ lưu trữ dòng này là hợp lệ cho. Trừ khi bạn đang chia sẻ tệp asudo giữa các máy chủ khác nhau cần các quy tắc khác nhau bằng cách sử dụng giá trị đặc biệt ALLcó nghĩa là "tất cả máy chủ" là một lựa chọn tốt.

  • userchỉ định người dùng nào bạn có thể sử dụng với các -utùy chọn để chạy lệnh. Nếu bạn bỏ qua điều này, bạn không thể sử dụng -utùy chọn.

  • groupchỉ định những nhóm bạn có thể sử dụng với các -gtùy chọn. Nếu bạn bỏ qua nó, bạn không thể sử dụng -gtùy chọn.

Cả hai usergrouphiểu giá trị đặc biệt ALLlà "tất cả người dùng / nhóm"

Nếu bạn bỏ qua toàn bộ (user:group)thứ bạn không thể sử dụng -u-gchỉ chạy lệnh dưới dạng root.

  • tag cho phép bạn chỉ định một số tùy chọn, như NOPASSWD

Vì vậy, với ví dụ đầu tiên của bạn, bạn có thể chạy lệnh với quyền root nhưng không thể sử dụng -u-gđể chạy nó như bất kỳ người dùng hoặc nhóm nào khác.

Với ví dụ 2. bạn có thể chạy lệnh dưới quyền root hoặc sử dụng -uđể chạy nó như bất kỳ người dùng nào khác.

Với 3. bạn có thể chạy lệnh dưới quyền root hoặc sử dụng -uhoặc -gđể chạy lệnh như bất kỳ người dùng hoặc nhóm nào khác.


Điều này thật đúng với gì mà tôi đã tìm kiếm. Tôi đã chấp nhận câu trả lời của bạn, và cảm ơn bạn cho efford của bạn.
Redsandro

1
Cuối cùng suy nghĩ, tôi có thể sử dụng 127.0.0.1hoặc localhostnhư hosttăng cường bảo mật tầm thường?
Redsandro

5
Trang này cho biết 'Note sudo chỉ kiểm tra các giao diện mạng thực tế; điều này có nghĩa là địa chỉ IP 127.0.0.1 (localhost) sẽ không bao giờ khớp. Ngoài ra, tên máy chủ "localhost" sẽ chỉ khớp nếu đó là tên máy chủ thực tế, thường chỉ xảy ra đối với các hệ thống không nối mạng. '
Florian Diesch

1
Cảm ơn. Không có tên máy chủ cho tôi, đặc biệt là vì tôi muốn có thể sao chép sudoersfile sang nhiều máy. ALLnó là.
Redsandro

9

Chúng ta hãy tách cái này ra:
redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command

redsandro là tên người dùng chúng tôi cho phép. Đặt một% ở phía trước để làm cho nó áp dụng cho một nhóm.

TẤT CẢ là một tên cho quy tắc này. Sudoers có thể làm nhiều hơn là chỉ cấp quyền toàn cầu. Đó là nơi nó trở nên phức tạp.

= không cần giải thích

TẤT CẢ: TẤT CẢ đọc là (who_to_run_it_as: what_group_to_run_it_as). Bằng cách này, bạn có thể cho phép chạy một lệnh, nhưng chỉ trong ngữ cảnh của một người dùng hoặc nhóm cụ thể.

NOPASSWD: bảo nó tắt lời nhắc mật khẩu.

/ path / to / lệnh cho phép bạn chỉ định các lệnh cụ thể path_to_commmand, Another_command

Điều cần nhớ là trong khi sudo chủ yếu được người dùng gia đình sử dụng để nâng cấp lên quyền root, nó có thể và được sử dụng để kiểm soát truy cập vào các lệnh cụ thể theo cách chi tiết hơn nhiều.


1
Cảm ơn đã bổ sung %, another_commandghi chú. Bây giờ tôi hiểu %wheeldòng trong phân phối dựa trên Fedora.
Redsandro
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.