Sudoers cho một ngày mỗi tuần?


10

Tôi đã được ông chủ của tôi tình nguyện làm sysadmin cho máy chủ redhat sản xuất của chúng tôi. Anh ấy yêu cầu tôi thắt chặt an ninh để tránh những rủi ro như thế rm -f *xảy ra cách đây không lâu.

Ngay bây giờ, chúng tôi có 53 người dùng sudo-ing vào máy và đó là một cơn ác mộng kiểm toán. Tôi tự hỏi nếu có thể chỉ cho phép người dùng truy cập vào những ngày cụ thể trong tuần.

Ví dụ: tôi có thể cho phép người dùng 'Joe' đăng nhập vào thứ ba và thứ năm chỉ và 'Jane' vào chủ nhật không? Có thể etc/sudoersđược tùy chỉnh để cho phép điều này?

Có cách nào tốt hơn thay vì sử dụng sudoers?


10
Tôi khuyên bạn KHÔNG nên đọc trang hướng dẫn. Xem xkcd # 1343
dùng60684

3
Không, tôi đang bảo anh ta đừng đọc hướng dẫn vì không thể đọc IMHO. OP có thể sẽ tìm thấy câu trả lời trong trang man nếu nó dễ đọc hơn.
dùng60684

10
Bạn có thể làm điều này, nhưng hãy nhớ rằng người dùng có thể tự cung cấp lại cho mình quyền truy cập sudo mọi lúc vào bất cứ ngày nào họ có quyền root.
Nick Matteo

2
@ Mark0978 nếu bạn biết tên của công ty, có lẽ bạn sẽ chết cười vì mất đầu. Đó là một sự ô nhục khi nó được cho phép ... trên một máy chủ sản xuất.
Chris

3
Điều này có vẻ như ngớ ngẩn. Nó chỉ có nghĩa là Bill sẽ phải chờ cho khung giờ sáng thứ Tư của mình chạy rm -rf /.
Michael Hampton

Câu trả lời:


21

sudo thực hiện xác thực thông qua PAM, giống như mọi thứ khác trên hộp Linux.

Vì vậy, bạn sẽ có thể sử dụng pam_time.sođể làm điều này.

Theo mặc định trên Debian ít nhất, mô-đun đó không được kích hoạt. Bạn cần thêm một dòng trông như thế này:

account    requisite  pam_time.so

để /etc/pam.d/sudochỉ bật sudo hoặc để /etc/pam.d/common-account(sau khối cập nhật pam-auth-update) để bật cho tất cả các chương trình trên hệ thống.

Sau đó chỉnh sửa /etc/security/time.confđể đặt giới hạn của bạn. Tên dịch vụ nên được sudo. Ví dụ: để cho phép Fred sudochỉ sử dụng trong khoảng thời gian từ 3 giờ chiều đến 5 giờ chiều vào Thứ Sáu:

sudo;*;fred;Fr1500-1700

(LƯU Ý: Tôi chưa thử nghiệm điều này.)

chỉnh sửa: Để rõ ràng, tôi đồng ý với câu trả lời khác và các bình luận khác nhau, bạn dường như có quá nhiều người chạy quá nhiều lệnh như root và bạn thực sự cần phải sửa nó. Và tất nhiên nếu họ có thể trở thành root, họ có thể chỉnh sửa cấu hình pam ...


PAM có vẻ phức tạp để thực hiện nhưng cũng cho phép kiểm soát chặt chẽ hơn về việc ai làm gì và khi nào. Được chấp nhận và bỏ phiếu lên. Cảm ơn bạn.
Chris

2
Tôi không nghĩ khuyến khích anh ấy là câu trả lời đúng, IMAO câu trả lời chính xác cho câu hỏi này là "CHẠY CHO CÁC HỌ !!!! 1! 1 !! 1! 1"
o0 '.

Điều này thực sự làm việc? Tôi có thể kiểm soát các cơ chế đăng nhập khác nhau như "đăng nhập", "ssh", "gdm", "su" bằng cách sử dụng pam_time.so, nhưng nó không hoạt động cho sudo. Tôi muốn ngăn chặn bất cứ ai trở thành root bằng bất kỳ cơ chế bình thường nào ngoài giờ hành chính. (Tôi nhận ra rằng nó không chống đạn, ai đó có thể chuẩn bị trước vỏ đạn hoặc cửa sau, nhưng tôi không hy vọng điều đó sẽ xảy ra trong tình huống này.)
Sam Watkins

20

Tôi sẽ hỏi tại sao 53 người dùng cần sudo để thực hiện công việc hàng ngày của họ - đối với hầu hết người dùng (thậm chí là nhà phát triển), sudo nên là một ngoại lệ hiếm hoi, không phải là một việc thường xuyên mà ai đó sẽ tình cờ chạy sudo rm -rf *lệnh.

Bạn có thể sử dụng quyền của nhóm (hoặc thậm chí là các ACL nâng cao hơn) để cấp cho mọi người quyền truy cập vào các tệp mà họ cần để hoàn thành công việc của mình không, có thể với một số tập lệnh hoặc nhị phân setuid hoặc sudo'ed để cho phép họ thực hiện các hoạt động như dịch vụ khởi động lại? (lưu ý rằng thật khó để viết một tập lệnh setuid / sudo an toàn, vì vậy sẽ tốt hơn để giữ cho những người trung thực thành thật).

Ngay cả khi bạn có thể giới hạn mọi người một ngày một tuần truy cập sudo, thì đó vẫn là 53 người có quyền truy cập sudo trong một tuần, vì vậy nó không thực sự giúp ích cho vấn đề cốt lõi của bạn.

Đối với vấn đề đó, tôi đặt câu hỏi liệu nhiều người dùng có cần truy cập vào máy chủ sản xuất hay không - bạn có thể gửi nhật ký hoặc bất kỳ dữ liệu / tệp nào họ cần cho một máy không sản xuất không?


Hoặc bạn có thể xuất bản một số loại quyền truy cập vào các tệp nhật ký mà họ có thể cần, một loại thiết lập sftp bị bỏ tù.
thuyền viên

@ John John phần lớn công việc được thực hiện trên máy chủ này là tạo / chỉnh sửa và chạy các kịch bản shell. Người dùng không nên được phép vi/cp/mv/rm. Chỉ cdmore. Không có gì khác.
Chris

@Johnny Nếu tôi đặt ACL trên một thư mục, các tệp trong thư mục đó có kế thừa các thuộc tính của ACL theo mặc định không?
Chris

@Chris Có, nếu bạn đặt ACL mặc định cho thư mục.
Michael Hampton

Đây phải là một bình luận, không phải là một câu trả lời. Bất kể kịch bản của OP có hợp lý hay không, những người khác cũng có nhu cầu tương tự để khóa "sudo" đối với một số người dùng tại một số thời điểm nhất định.
Sam Watkins

7

Cách đơn giản nhất sẽ là sử dụng để sử dụng suders.d (thông qua inludedir) cho cấu hình của bạn. Sau đó, bạn có thể có các công việc định kỳ có thể đặt các quy tắc cho mỗi người dùng vào thư mục đó cho những lần bạn muốn.

Lệnh #includedir có thể được sử dụng trong / etc / sudoers để tạo thư mục sudo.d mà bạn có thể thả các quy tắc sudoers vào như một phần của quy tắc của mình .. Ví dụ: đã cho:

#includedir /etc/sudoers.d

sudo sẽ đọc từng tệp trong /etc/sudoers.d, bỏ qua các tên tệp kết thúc bằng '~' hoặc chứa '.' ký tự để tránh gây ra sự cố với trình quản lý gói hoặc tệp sao lưu tạm thời / trình chỉnh sửa. Các tập tin được phân tích cú pháp theo thứ tự từ vựng được sắp xếp. Đó là, /etc/sudoers.d/01_first sẽ được phân tích cú pháp trước /etc/sudoers.d/10_second. Xin lưu ý rằng vì việc sắp xếp là từ vựng, không phải là số, /etc/sudoers.d/1_whoops sẽ được tải sau /etc/sudoers.d/10_second. Sử dụng một số lượng nhất định các số 0 đứng đầu trong tên tệp có thể được sử dụng để tránh các vấn đề như vậy.

Lưu ý rằng không giống như các tệp được bao gồm thông qua #include, visudo sẽ không chỉnh sửa các tệp trong thư mục #includedir trừ khi một trong số chúng có lỗi cú pháp. Vẫn có thể chạy visudo với cờ ‑f để chỉnh sửa các tệp trực tiếp.

/etc/sudoers.d/joe sẽ có mặt khi bạn muốn joe có quyền truy cập và bạn chỉ cần xóa tệp để lấy đi quyền truy cập.


1
Tôi gặp sự cố với các tệp sudoers cụ thể của người dùng: 'sudoers.user1', v.v. Bạn nhận xét về '~' và '.' nhân vật đã giải quyết vấn đề của tôi. Tôi rất vui vì bạn đã đọc hướng dẫn! Cảm ơn bạn.
Han

0

Bạn có thể thêm một crontab để đưa người dùng vào một nhóm sudo và sau đó là một crontab thứ hai để đưa người dùng đó ra ngoài.

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.