Tại sao hệ thống có /etc/sudoers.d? Tôi nên chỉnh sửa nó như thế nào?


48

Lần trước, tôi đã hỏi về rủi ro của những điều này (trong / etc / sudoers):

    user_name ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
    %group_name ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf

Trong khi tôi đang suy nghĩ về vấn đề này, tôi đã tìm thấy thư mục /etc/sudoers.d . Các tệp trong thư mục phải có chức năng tương tự / etc / sudoers (có nghĩa là các tập lệnh ở trên vẫn có vấn đề ngay cả trong /etc/sudoers.d), tuy nhiên một bài viết cho biết chúng tôi không nên sử dụng thư mục vì chúng tôi không thể sử dụng visudođể chỉnh sửa tệp trong nó Đó là, chúng tôi mất quyền sử dụng sudonếu chúng tôi mắc lỗi trong thư mục.

Nếu đó là sự thật, tại sao chúng ta có /etc/sudoers.d ? Hay chúng ta có một cách tốt để chỉnh sửa các tệp trong /etc/sudoers.d ?

Câu trả lời:


45

Thay đổi được thực hiện cho các tệp /etc/sudoers.dvẫn được giữ nguyên nếu bạn nâng cấp hệ thống. Điều này có thể ngăn chặn khóa người dùng khi hệ thống được nâng cấp. Ubuntu có xu hướng thích hành vi này. Các bản phân phối khác cũng đang sử dụng bố cục này.

Theo kinh nghiệm của tôi, các quy tắc về các tệp trong thư mục này lỏng lẻo hơn so với /etc/sudoers. Điều này đã bao gồm:

  • Những sai lầm trong tập tin không gây ra sudothất bại. Tuy nhiên, các tập tin đã bị bỏ qua.
  • Quy tắc cho phép xuất hiện ít nghiêm ngặt hơn. Nó cho phép nhóm áp dụng hoặc khác để đọc tệp. Tôi không tin rằng điều đó là có thể với /etc/sudoers. Quyền viết phải được giới hạn rootđể duy trì bảo mật. Phiên bản Ubuntu hiện tại của sudo cho phép đọc quyền cho nhóm hoặc khác. (Khả năng này cho phép kiểm tra quyền truy cập sudo mà không yêu cầu quyền truy cập root.)

Các visudolệnh chỉ mặc định /etc/sudoers. Nó sẽ chỉnh sửa và xác minh bất kỳ tập tin nào bạn chỉ định với -ftùy chọn. Tôi sử dụng khả năng này để chỉnh sửa các tệp sẽ được tự động cài đặt thành /etc/sudoershoặc vào /etc/sudoders.d. Tuy nhiên, định nghĩa từ các tập tin khác có thể không được tìm thấy. Tốt nhất là làm cho tập tin độc lập.

Khả năng có các tệp độc lập giúp ứng dụng dễ dàng kích hoạt sudokhả năng cài đặt và gỡ bỏ chúng khi chưa cài đặt. Các công cụ cấu hình tự động cũng có thể sử dụng khả năng này.

Tôi đã sử dụng khả năng này để cô lập các thay đổi cần thiết để cấp quyền truy cập cho các nhóm người dùng cụ thể trên các hệ thống cụ thể.


1
Hai đặc điểm của sudoers.d mà bạn đề cập có vẻ thực sự quan trọng và hữu ích. Cảm ơn bạn!
aob

Xem câu trả lời của tôi và cảnh báo về lý do tại sao những điều đó không thực sự là đặc điểm của sudoers.d.
dragon788

1
Rất không đồng ý với tuyên bố 'Những sai lầm trong tập tin không gây ra sudolỗi'. Tôi đã phá vỡ sudo trên RHEL với cú pháp không chính xác trong một tệp từ /etc/sudoers.d. Điều này cần nỗ lực đáng kể để khắc phục và tôi nghĩ rằng nên luôn luôn sử dụng visudo -fđể chỉnh sửa các tệp đó.
79E09796

@ 79E09796 Tôi có các tệp bị hỏng trong /etc/sudoers.d mà không gây ra sự cố với các quy tắc trong các tệp khác. YMMV. Nếu bạn phá vỡ cấu hình sudo đưa bạn vào hệ thống, bạn sẽ gặp vấn đề. Nếu bạn có quyền truy cập để khởi động lại hệ thống, việc khởi động lại vào chế độ phục hồi và sửa tệp tương đối dễ dàng. Tôi đồng ý rằng cách tốt nhất là sử dụng visodo để chỉnh sửa hoặc ít nhất là xác minh các thay đổi đối với các tệp cấu hình sudo.
BillThor

62

Có, bạn có thể sử dụng visudođể chỉnh sửa các tập tin đó. Tất cả những gì bạn phải làm là chỉ định tên của tệp mà bạn muốn chỉnh sửa với -ftùy chọn. Ví dụ:

visudo -f /etc/sudoers.d/somefilename

Hoặc, nếu cần:

sudo visudo -f /etc/sudoers.d/somefilename

Tài liệu

Từ man visudo:

-f sudoers
Chỉ định và thay thế vị trí tệp sudoers. Với tùy chọn này, visudo sẽ chỉnh sửa (hoặc kiểm tra) tệp sudoers bạn chọn, thay vì mặc định, / etc / sudoers. Tệp khóa được sử dụng là tệp sudoers được chỉ định có ".tmp" được gắn vào nó. Chỉ trong chế độ chỉ kiểm tra, đối số thành -f có thể là "-", chỉ ra rằng các sudoers sẽ được đọc từ đầu vào tiêu chuẩn.

Tóm tắt:

  1. Cú pháp: Cả hai visudovisudo -f thực hiện kiểm tra cú pháp giống nhau .

  2. Quyền / Quyền sở hữu: Là một tính năng được thêm vào để hỗ trợ quản trị các hệ thống lớn , các tệp được chỉnh sửa theo visudo -fkhông được kiểm tra quyền sở hữu hoặc quyền: điều này cho phép kiểm tra cú pháp của tệp ngoại tuyến hoặc là một phần của hệ thống kiểm soát sửa đổi.

Tại sao sử dụng /etc/sudoers.d/

Thông thường /etc/sudoerslà dưới sự kiểm soát của người quản lý gói phân phối của bạn. Nếu bạn đã thực hiện các thay đổi cho tệp đó và trình quản lý gói muốn nâng cấp tệp đó, bạn sẽ phải kiểm tra thủ công các thay đổi và phê duyệt cách chúng được hợp nhất vào phiên bản mới. Bằng cách đặt các thay đổi cục bộ của bạn vào một tệp trong /etc/sudoers.d/thư mục, bạn tránh được bước thủ công này và việc nâng cấp có thể tự động tiến hành.

Khi nào sudobỏ qua một tập tin trong /etc/sudoers?

Nếu /etc/sudoerstệp của bạn chứa dòng:

#includedir /etc/sudoers.d

sau đó sudosẽ đọc các tập tin trong thư mục /etc/sudoers.d.

Các ngoại lệ là:

  1. Các tệp có tên kết thúc bằng ~
  2. Các tệp có tên chứa .ký tự

Điều này được thực hiện (a) để thuận tiện cho người quản lý gói và cũng (b) để các tệp sao lưu từ trình chỉnh sửa bị bỏ qua.


Cảm ơn, nhưng tôi có một nghi ngờ. Có visudo -fan toàn không?
aob

5
Vâng, visudo -fchỉnh sửa theo cách an toàn giống như bình thường visudo. Đó là lý do tại sao chúng tôi có visudovà tại sao nó cung cấp -ftùy chọn.
John1024

Lưu ý tuyệt vời về cách các quyền được bỏ qua khi sử dụng -fvì điều này có thể byte một ai đó sau đó sao chép nó vào /etc/sudoers.d/ mà không cần kiểm tra lại chúng.
dragon788

1
CẢM ƠN BẠN cho phần ngoại lệ. Tôi đặt tên cho tập tin của mình một cái gì đó giống như /etc/sudoers.d/mysudorules.sudovà không thể cho cuộc sống của tôi tìm ra lý do tại sao các quy tắc bên trong không được áp dụng trước khi đọc câu trả lời của bạn.
Zaroth

1
Cảm ơn bạn đã đề cập đến các ngoại lệ. Tập tin của tôi /sudoers.d/mysite.co.ukkhông hoạt động và sau khi đổi tên thành mysitenó hoạt động! :)
J86

20

Tại sao chúng ta có /etc/sudoers.d?

Bởi vì các công cụ tự động (như Chef hoặc Puppet) dễ dàng thả các tệp riêng lẻ vào thư mục này hơn là thực hiện các thay đổi /etc/sudoers, có thể dễ hỏng.

Các tập tin trong /etc/sudoers.d(có hiệu lực) được nối. Bạn sẽ thấy một số trường hợp khác của mẫu này /etc, chẳng hạn như /etc/cron.d/etc/logrotate.d.


Tôi không biết có những thư mục tương tự khác. Cảm ơn bạn.
aob

14

Một lợi ích khác của việc sử dụng visudo -fnhư được đề cập trong một số câu trả lời là có một tùy chọn tương ứng -choặc --checkxác minh rằng bạn không có thông tin không hợp lệ trong tệp sudoers.d hoặc bất kỳ tệp nào khác mà bạn có thể muốn đặt trong sudoers.d. Điều này thực sự tiện dụng trong các trường hợp được đề cập với các công cụ tự động, vì bạn có thể chạy ví dụ

sudo visudo -c -q -f /home/myuser/mysudoers && \
sudo chmod 600 /home/myuser/mysudoers && \
sudo cp /home/myuser/mysudoers /etc/sudoers.d/mysudoers

Điều này âm thầm kiểm tra tệp (không có đầu ra do -q) và chỉ khi điều đó KHÔNG trả về lỗi (thoát 1 có nghĩa là tệp sudoers không hợp lệ) thì nó sẽ sao chép tệp vào sudoers.d, bằng cách này bạn có thể tạo tệp và làm việc với nó mà không phải làm cho đúng ngay lần đầu tiên (sử dụng sudo visudo -f /etc/sudoers.d/myfilephải thành công hoặc loại bỏ nội dung nếu bạn không sửa nó).

Ngoài ra, một lời cảnh báo liên quan đến những tuyên bố này từ các câu trả lời khác.

Theo kinh nghiệm của tôi, các quy tắc về các tệp trong thư mục này lỏng lẻo hơn so với / etc / sudoers. Điều này đã bao gồm:

Những sai lầm trong tập tin không khiến sudo thất bại. Tuy nhiên, các tập tin đã bị bỏ qua. Quy tắc cho phép xuất hiện ít nghiêm ngặt hơn. Tôi cho phép nhóm áp dụng để đọc các tập tin. Tôi không tin rằng có thể với / etc / sudo.

Các tệp trong /etc/sudoers.d được yêu cầu tuân thủ cùng một cú pháp như / etc / sudoers, bởi vì dưới vỏ bọc, hệ thống chỉ đơn giản ghép tất cả các tệp với cái cuối cùng trong "chiến thắng" nếu có nhiều mục nhập giống nhau thiết lập số ít.

Nếu các quyền không chính xác khủng khiếp (có thể ghi thế giới) trên các tệp trong /etc/sudoers.d/ thì chúng bị bỏ qua, đây có thể là nguyên nhân khiến các tệp không hợp lệ bị bỏ qua, nếu không bạn có thể phá vỡ nghiêm trọng sudolệnh bằng cách có một sudoers không hợp lệ. d tập tin với quyền chính xác.

Bạn có thể cho phép các tệp sudoers có thể đọc được trên thế giới, nếu bạn vô tình cho phép 'khác' quyền ghi bạn cần sudo như một người dùng khác hoặc từ thiết bị đầu cuối gốc chạy lệnh này. Điều này cũng có thể phá vỡ nếu tập tin được sở hữu bởi một người khác ngoài root: root.

sudo chmod 644 /etc/sudoers.d/mysudoers
sudo chown root:root /etc/sudoers.d/mysudoers

Tôi chỉ xác nhận rằng nếu tôi chạy chmod o+w /etc/sudoers.d/vagranttôi không còn có thể là người dùng mơ hồ, nó sẽ nhắc tôi nhập mật khẩu và sau đó không thành công.

Khi tôi chạy sudo -lđể xem các quyền lệnh được áp dụng như một người dùng sudo hợp lệ khác, tôi cũng nhận được một cảnh báo về các quyền của tệp. Đây là lệnh tương tự mà tôi đã sử dụng để xác nhận rằng người dùng 'vagrant' bị mất sudo khi tôi áp dụng o+wquyền cho tệp cho người dùng quyền sudo đó.


3

Chỉ là một addon ngắn cho bất kỳ câu trả lời chung chung nào ... không có câu trả lời nào khác khắc phục được vấn đề của tôi, đó là vấn đề đó.

Nếu các dòng của bạn hoạt động trong sudoers nhưng không phải sudoers.d, hãy thử di chuyển #include xung quanh hoặc thay đổi thứ tự các tệp sudoers.d của bạn (bằng cách thêm tiền tố vào một số). Có vẻ như điều cụ thể nhất nên là đầu tiên trong tập tin.

Tôi đã có một cái gì đó như:

somebody ALL=(ALL): somecommand
somebody ALL=(someoneelse) NOPASSWD: somecommand

Và cái thứ 2 không có tác dụng vì cái đầu tiên đã khớp. NOPASSWD không phải là một điều kiện, nhưng một số cách để sửa đổi hành động.

Và nó không rõ ràng vì nó không nằm trong một tệp duy nhất, do thư mục sudoers.d.

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.