Sử dụng sudo từ Jenkins có tệ không?


11

Tôi sử dụng plugin Publish Over SSH để triển khai các ứng dụng của mình từ Jenkinscác môi trường khác nhau. Một số công việc triển khai thực hiện các giao diện môi trường và những thứ như dừng và khởi động lại dịch vụ hệ thống máy chủ ứng dụng. Một số lệnh yêu cầu sudo.

Tôi chỉ tò mò nếu nó có thể là một thực tiễn bảo mật tồi để yêu cầu sudo trong xuất bản từ xa và thực hiện các công việc Jenkins. Chúng ta có nên thay đổi chính sách bảo mật trên máy chủ đích để cho phép các chức năng cần thiết được thực hiện mà không cần sudo không?

Câu trả lời:


6

Không, thực sự bảo mật thực sự tốt để sudo khi bạn cần đặc quyền cấp cao hơn. Đây là lý do mà hầu hết các bản phân phối đều cấm đăng nhập mặc định và thực sự buộc bạn sudo suthay vì chỉ gõ su- họ muốn khuyến khích bạn sử dụng sudo vì lợi ích bảo mật của nó. Có một vài lý do tại sao:

  • Kiểm toán. Khi bạn sudo, hệ thống sẽ lưu giữ hồ sơ về người đã sudo và lệnh họ đã chạy. Điều này bổ sung rất nhiều về mặt pháp lý khi bạn cần quay lại và tìm hiểu chuyện gì đã xảy ra - để đổ lỗi, bắt các hoạt động bất chính hoặc chỉ cho mục đích khắc phục sự cố (chuyện quái gì xảy ra đêm qua lúc 7 giờ tối trước khi máy chủ này hoạt động AWOL?)

  • Quy tắc Sudo. Chỉ vì người dùng cần chạy một cái gì đó với các cáo buộc leo thang không có nghĩa là họ cần chạy mọi thứ với các cáo buộc leo thang. Sử dụng su hoặc thêm người dùng vào bánh xe cho phép người dùng làm mọi thứ . Tuy nhiên, với sudo, có thể chỉ định những gì người dùng có thể và không thể làm bằng cách sử dụng Command Aliases cho phép sử dụng ký tự đại diện, do đó cho phép các quy tắc linh hoạt cho phép người dùng sử dụng một số lệnh, nhưng không phải cho người khác sử dụng.

  • Cứng lại. Có thể vô hiệu hóa root. Như trong tất cả các mục đích và mục đích, nó không tồn tại và chỉ hữu ích / có thể sử dụng được trong chế độ người dùng duy nhất - yêu cầu khởi động lại máy chủ (và lý do duy nhất được phép này là để khôi phục mật khẩu). sudo sucông việc ngắn hạn. Điều này được thực hiện bằng cách đặt shell của root thành / bin / nologin. đó là một cách tuyệt vời để ngăn chặn nhiều lỗ hổng leo thang gốc. Tất nhiên, điều này giả định rằng bạn đang sử dụng đúng dấu đầu dòng ở trên (và bạn vẫn có thể cấp cho người dùng quản trị cụ thể tất cả các quyền, mặc dù điều này sẽ làm suy yếu lập trường bảo mật của bạn).

Những điều này, tất nhiên, chỉ là một phần của mô hình bảo mật của bạn. Ví dụ: trừ khi bạn không có người dùng có đặc quyền quản trị đầy đủ (và đôi khi ngay cả sau đó), người dùng của bạn có thể (có thể có khả năng) xóa nhật ký và lịch sử - trừ khi bạn sử dụng máy chủ nhật ký và nhật ký hệ thống để gửi nhật ký. Sau đó, không có cách nào để đặt con mèo trở lại trong túi. Tất nhiên, nếu bạn sử dụng cấu trúc thư mục xác thực trung tâm, thì điều này sẽ hoạt động trở lại: Nếu tôi thỏa hiệp một tài khoản, nó sẽ bị xâm phạm trên tất cả các máy chủ trong tổ chức - bao gồm cả máy chủ nhật ký của bạn.

Nói tóm lại, bảo mật rất phức tạp, nhưng sudo là một công cụ tuyệt vời trong việc kiến ​​trúc một môi trường an toàn và nhiều người nên sử dụng nó đến mức tối đa.


7

Cho dù bạn cho phép sudotruy cập từ xa hay từ xa vào thứ gì đó mà SUID rootbạn có bề mặt tấn công khá giống nhau. Tôi sẽ giữ sudochuỗi vì nó cho phép bạn giới hạn các lệnh một cách dễ dàng và ghi nhật ký sẽ rất quan trọng nếu bạn cần kiểm toán mọi thứ sau này. sudocũng có một lịch sử lâu dài hơn trong sản xuất. Làm một cái gì đó khác sẽ có ít lịch sử hơn và thay đổi cao hơn của những bất ngờ khó chịu.

Có một số điều khác bạn có thể làm để làm cho điều này an toàn hơn mặc dù:

  • thắt chặt ssh
  • chỉ cho phép các lệnh khởi động lại đối với một vài người dùng cụ thể, bao gồm một lệnh cho jenkins
  • chỉ cho phép đăng nhập cho những người dùng cụ thể đó từ tất cả các IP nội bộ hoặc chỉ các jenkins và IP của hộp nhảy
  • lưu trữ nhật ký trên các hộp từ xa để chúng không thể bị đánh cắp

Trên thực tế, tôi chỉ định cấu hình công việc SSH của mình và nó không muốn chạy sudo: "sudo: xin lỗi, bạn phải có một tty để chạy sudo"
amphibient

1
Bạn có thể cần phải đưa sshra -ttùy chọn. Hoặc thuyết phục sudo không cần nó như unix.stackexchange.com/questions/122616/NH
gà con

Làm cách nào để cung cấp tùy chọn cho SSH khi nó được gọi từ Jenkins?
lưỡng cư

Tôi không chắc về điều đó. Bạn đã thử điều chỉnh sudonhư các liên kết chứng minh?
gà con

1
Tôi đã quản lý để kích hoạt sudo từ Jenkins bằng cách thay đổi sudoers trên máy chủ từ xa (mục tiêu SSH) để không yêu cầu tty (nhận xét Defaults requiretty)
lưỡng cư
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.