Làm cách nào để ngăn Ubuntu khởi động trình tiện ích mà tôi không yêu cầu chạy rõ ràng?


8

Một trong những nguyên tắc cơ bản của bảo mật máy tính là không bao giờ chạy bất cứ thứ gì bạn không cần.

Tôi đã pgrepping cho một quá trình ngày hôm nay khi tôi nhận thấy rằng máy Ubuntu 9.04 (máy tính để bàn) của tôi đang chạy một trình nền máy chủ git. Sau khi thề nhanh chóng, tôi phát hiện ra rằng git-daemon-rungói đã được cài đặt (có thể vô tình) và loại bỏ nó đã thoát khỏi quá trình đó (và đảm bảo rằng nó sẽ không được khởi động lại sau).

Nhưng trong các trường hợp khác, tôi muốn gói máy chủ được cài đặt, nhưng không muốn trình nền máy chủ chạy. Ví dụ: tôi sử dụng lighttpdđể kiểm tra nội bộ (được bắt đầu bằng các tập lệnh kiểm tra cụ thể cho một số ứng dụng và chỉ nghe trên localhost trong các cấu hình đó) nhưng tôi không muốn nó nghe các kết nối bên ngoài với một số tệp cấu hình ngẫu nhiên. (Nếu tôi muốn chạy một nghe cho các kết nối bên ngoài, tôi sẽ tự cấu hình và tự chạy nó.)

Tôi thực sự không thích chạy tất cả các loại máy chủ ngẫu nhiên mà tôi không cần trên các máy tiếp xúc với Internet, vì ai biết được lỗ hổng bảo mật nào mà chúng mở ra. Và tôi không muốn phải loay hoay với tường lửa, vì đó là một nguồn tiềm năng khác của lỗi và cấu hình sai có thể mở ra các lỗ hổng bảo mật. Không quá khó để các máy Unix được cấu hình để không khởi động bất kỳ máy chủ nào trừ khi được quản trị viên yêu cầu cụ thể; NetBSD (và OpenBSD cũng vậy, tôi nghĩ vậy) theo cách này theo mặc định.

Làm cách nào để định cấu hình hệ thống Ubuntu của tôi không bao giờ khởi động bất kỳ loại trình nền máy chủ nào trừ khi tôi nói cụ thể là tôi muốn nó khởi động?

. quá dễ dàng để vô tình khởi động một máy chủ mà không nhận ra bạn đã làm như vậy.)

EDIT: Để làm cho nó rõ ràng, vấn đề không phải là tôi muốn có thể dừng các máy chủ hiện có. Vấn đề là tôi không muốn máy chủ mới bắt đầu mà không có yêu cầu rõ ràng. Điều này có nghĩa là tôi sẽ có thể thực hiện bất kỳ tác vụ sysadmin nào, chẳng hạn như cài đặt gói và tự tin rằng không có máy chủ nào bắt đầu. Hầu hết các câu trả lời không giải quyết điểm này.


3
Tôi đã chọc vào bên trong các gói .deb trong khoảng 10 phút. Chúng bao gồm một tập lệnh "postinst" được chạy sau khi gói được cài đặt. Lệnh cuối cùng mà họ chạy thường là "invoke-rc.d <servicename> start" khiến dịch vụ tự khởi động. Cuộc gọi tới invoke-rc.d thường được kết nối cứng mà không có bất kỳ kiểm tra nào về biến cấu hình toàn cầu để kiểm soát xem có thực sự bắt đầu dịch vụ hay không. Do đó, sẽ tùy thuộc vào invoke-rc.d để đưa ra quyết định về việc có nên bắt đầu dịch vụ hay không. Đó là nơi cuộc điều tra của tôi kết thúc.
Barry Brown

2
như Barry giải thích, Ubuntu rõ ràng không dành cho bạn. Xin lỗi, nhưng bạn phải 1) thay đổi bản phân phối hoặc 2) để mắt đến bất cứ điều gì mà Ubuntu đang làm.
elcuco

Lý do Ubuntu / Debian khác với Fedora về mặt này, là Debian chỉ cài đặt những gì bạn yêu cầu, trong khi Fedora cài đặt bồn rửa trong nhà bếp. Vì vậy, ở Fedora, thông thường có một gói được cài đặt mà bạn không yêu cầu, vì vậy nó mặc định không chạy. Trong Debian, bạn đã cài đặt gói một cách rõ ràng, do đó, bạn muốn máy chủ chạy ngay lập tức.
TRS-80

Bất cứ cập nhật. Bạn đã thử cái nào? và những gì đã làm việc? a
Nandhini Anand

Đáng buồn thay, dường như không có giải pháp nào khác ngoài "kiểm tra cẩn thận phần mềm nào đang chạy trên hệ thống của bạn sau khi có bất kỳ thay đổi gói nào", rõ ràng là một quy trình khá dễ bị lỗi.
cjs

Câu trả lời:


12

Cài đặt sysv-rc-conf và chỉ cần tắt các dịch vụ bạn không muốn chạy.

sudo apt-get install sysv-rc-conf
MÔ TẢ: sysv-rc-conf cung cấp một giao diện dễ sử dụng để quản lý các liên kết sym / ing "/etc/rc đũarunlevel xăng.d /".

văn bản thay thế


Làm thế nào để giữ cho các máy chủ mới không bị bật bởi hệ thống đóng gói?
cjs

Xin vui lòng đọc bình luận của Barry Brown, nó giải thích tại sao câu trả lời này là lỗi thời.
elcuco

8

Là một người có vấn đề tương tự, tôi cảm thấy rất mạnh mẽ rằng không hợp lý khi một daemon cho rằng người dùng muốn nó bắt đầu theo mặc định: Có rất nhiều trường hợp sử dụng hoàn toàn hợp lệ trong trường hợp này không phải là trường hợp. (Không đề cập đến việc không phải lúc nào cũng rõ cài đặt nào thực sự bao gồm một trình nền.) Trình nền có thể bị tắt theo mặc định, người dùng có thể được truy vấn rõ ràng hoặc có thể có cài đặt trung tâm. Bất cứ điều gì khác là lý luận của Microsoft hoàn toàn không xứng đáng với Linux.

Ngoài ra, tôi thấy một số ý kiến ​​trên cho poster ban đầu là thô lỗ, bảo trợ và thiếu tính xây dựng. Để đề xuất, ví dụ, anh ta nên chấp nhận hành vi mặc định hoặc phân phối thay đổi là thực sự đáng chú ý. Thứ nhất, không có phân phối nào sẽ phù hợp hoàn hảo và việc chuyển sang phân phối mới với công việc làm thêm có liên quan dường như không phải là một giải pháp thực tế cho vấn đề này. Thứ hai, người dùng Linux / Unix thành thạo được sử dụng cho mọi hành vi có thể thay đổi: Một vấn đề có thể mất hai giờ để đào, nhưng sau đó nó đã được sửa. Điều tự nhiên mà một người dùng như vậy phải làm, khi các mặc định là không phù hợp, là giả định sự tồn tại của một công việc xung quanh và cố gắng tìm hiểu xem nó là gì. Thứ ba, trong nghi thức nguồn mở và phần mềm miễn phí, If you don't like it, then patch the source code!'' is an acceptable response; however,..., sau đó hãy đi bộ! '' Thì không.


5

Kỳ vọng của hệ thống đóng gói là khi bạn cài đặt gói máy chủ, bạn muốn chạy máy chủ đó. Đó là một kỳ vọng hợp lý.

Làm cách nào để định cấu hình hệ thống Ubuntu của tôi không bao giờ khởi động bất kỳ loại máy chủ nào trừ khi tôi 
Cụ thể nói với tôi rằng tôi muốn một máy chủ bắt đầu? 

Roy đã trả lời câu hỏi này cho bạn. Khi bạn cài đặt gói máy chủ mới, bạn dừng máy chủ đó và sau đó sử dụng một công cụ như sysv-rc-conf để ngăn máy chủ đó được khởi động ở lần khởi động lại hoặc thay đổi runlevel tiếp theo. Có, bạn phải tự mình thực hiện một số công việc và điều đó hợp lý vì bạn định cấu hình hệ thống của mình khác với hầu hết những người sử dụng Ubuntu.

Ví dụ: tôi sử dụng lighttpd để thử nghiệm nội bộ (nó được bắt đầu bởi các tập lệnh thử nghiệm cụ thể 
đối với một số ứng dụng và chỉ nghe trên localhost) nhưng tôi thường không muốn nó 
lắng nghe các kết nối bên ngoài.

Bạn nên đầu tư một chút thời gian để tìm hiểu cách cấu hình lighttpd để nó được cấu hình vĩnh viễn để chỉ nghe trên localhost. Sau đó, khi bạn khởi động máy chủ, bạn sẽ biết nó đã được cấu hình theo ý thích của bạn.


3
Đầu tiên, tôi không nghĩ đó là một kỳ vọng hợp lý; rằng tôi đã cài đặt nhị phân lighttpd không có nghĩa là tôi muốn chạy một máy chủ công cộng. Thứ hai, tôi không phải lúc nào cũng biết rằng tôi đã cài đặt gói máy chủ; đôi khi chúng bị kéo bởi các gói khác mà tôi đã cài đặt.
cjs

1
Ồ, và tôi biết cách cấu hình lighttpd để chỉ nghe trên localhost và tôi thường có một nửa tá hoặc nhiều hơn các kiểm tra dự án trên bất kỳ hệ thống cụ thể nào làm như vậy.
cjs

5

Tôi thấy những điều sau đây hữu ích cho việc cài đặt Ubuntu trong môi trường chroot, như gỡ lỗi cho khách mới. Tín dụng thực sự đi đến các tập lệnh xen-tools để dạy tôi điều này:

tiếng vang '#! / bin / sh'> /usr/sbin/policy-rc.d

tiếng vang 'thoát 101' >> /usr/sbin/policy-rc.d

chmod 755 /usr/sbin/policy-rc.d

Với kịch bản này, apt sẽ không bắt đầu dịch vụ sau khi cài đặt. Tuy nhiên, đây chỉ là một nửa vấn đề của bạn, vì các liên kết tượng trưng vẫn được đặt đúng chỗ, các dịch vụ sẽ bắt đầu sau lần khởi động tiếp theo. Tôi không biết làm thế nào để tự động dừng điều đó :(


1
nó có thể phá vỡ logrotation nginx vì /etc/logrotate.d/nginx của Ubuntu sử dụng invoke-rc.d nginx rotatetrong phần postrotate Tôi đang sử dụng phiên bản hơi khác gist.github.com/hostmaster/7c25ef4e1e47bc3e2d71
hostmaster

Nó cũng ngăn daemon dừng lại khi các gói của nó bị xóa khỏi hệ thống. Điều này không tốt.
nhà

4

Barry Brown, trong một bình luận về câu hỏi, cung cấp manh mối cho một câu trả lời có thể.

Hệ thống đóng gói sử dụng invoke-rc.dchương trình để khởi động máy chủ sau khi gói được cài đặt. [1] Chương trình này sẽ chạy /usr/sbin/policy-rc.dđể xác định chính sách khởi động máy chủ đó.

Gói policyrcd-script-zg2bao gồm policy-rc.dtập lệnh, chạy /etc/policy-rc.dvới tham số của nó nếu có và thoát với mã lỗi của tập lệnh đó hoặc thoát bằng 0 (thành công) nếu không. Giao diện policy-rc.ddự kiến ​​sẽ cung cấp được ghi lại ngắn gọn trong phần invoke-rc.dquản lý và mở rộng hơn nhiều /usr/share/doc/sysv-rc/README.policy-rc.d.gz.

Bước tiếp theo, tôi cho rằng, là để tôi kiểm tra điều này.

Những điều còn lại để được trả lời:

[1] Những phần khác của hệ thống sử dụng invoke-rc.d? [2] Điều này thực sự hoạt động?


3

Làm thế nào về việc xem trên các thư mục nơi tập lệnh init được đặt? Bạn có thể làm cho các thư mục đó không thể thay đổi được bằng lệnh chatr.


Hừm. Tôi tự hỏi tại sao cái này bị hạ cấp? Đó là một hack, nhưng ít nhất nó giải quyết vấn đề của tôi, không giống như hầu hết các phản hồi ở đây.
cjs

Tôi ủng hộ điều này bởi vì đây là giải pháp gần nhất mà bạn có thể có với Ubuntu, mặc dù tôi nghĩ rằng làm cho các thư mục init không thể thay đổi là một ý tưởng tồi tệ (Chỉ cần tưởng tượng thử cài đặt một dịch vụ mà bạn MUỐN bắt đầu). Tôi biết rằng find có thể được sử dụng để theo dõi các thay đổi trong tệp và thư mục, mặc dù tôi không đủ quen thuộc với công cụ để cung cấp cho bạn một lệnh chính xác. Tôi sẽ yêu cầu một trong những bậc thầy về một lệnh làm việc, dán nó vào tập lệnh bash và chạy nó sau mỗi lần cài đặt, sau đó sử dụng sysv-rc-conf để vô hiệu hóa thủ công các dịch vụ bạn không muốn.
Babu

2

Lý tưởng nhất, đây là một vấn đề của post-instkịch bản. Khi bắt đầu dự án Ubuntu, một nỗ lực có chủ ý đã được thực hiện để buộc các mặc định lành mạnh đối với các tập lệnh cấu hình dpkg, để bạn và tôi không phải trả lời mọi câu hỏi chết tiệt có thể xảy ra hoặc lãng phí thời gian nghiên cứu các tùy chọn. Bây giờ Ubuntu đã thiết lập điều này, nhiều người không biết nó tồn tại. Có thể hỏi một câu hỏi về việc có nên cài đặt như một daemon hay không, nhưng tôi không thấy bất kỳ câu hỏi nào như vậy trong một vài gói tôi đã kiểm tra.

Có lẽ bạn nên tham gia với Nhóm máy chủ Ubuntu và có thể cả Chính sách Debian để cải thiện mọi thứ.


1

Bạn có thể thử tạo tập lệnh sẽ kiểm tra danh sách các dịch vụ đã cài đặt và xác minh chúng theo danh sách một số dịch vụ được phép. Nếu dịch vụ không có trong danh sách thì tập lệnh sẽ tắt. Kịch bản phải được chạy khi bắt đầu trước các dịch vụ chung. Và có thể chạy như daemon để đóng các dịch vụ mới cài đặt. Hoặc nếu có thể chạy tự động sau mỗi lần cài đặt để kiểm tra các dịch vụ mới.

PS Tôi có thể nghĩ về hai nguyên nhân có thể của dịch vụ bắt đầu sau khi cài đặt gói. Đó là tính năng gói, hoặc đó là tính năng quản lý gói. Nếu đó là tính năng gói tôi không nghĩ có một số cách để thay đổi hành vi dịch vụ. Nếu đó là tính năng quản lý gói có thể có một số tùy chọn cấu hình để ngăn dịch vụ bắt đầu sau khi cài đặt. Tôi không biết ngay bây giờ vì vậy chỉ cần ném ý tưởng.


1

Nếu bạn thiết lập iptables với chính sách DROP mặc định cho chuỗi INPUT thì bạn không phải lo lắng nhiều về các cổng nghe vì chúng sẽ bị chặn bởi iptables. Máy chủ Ubuntu đi kèm với giao diện thân thiện với người dùng cho iptables nếu bạn chưa quen với iptables.

Từ bài đăng của bạn, có vẻ như tôi có thể hạnh phúc hơn với một bản phân phối Linux khác như CentOS. Quá trình cài đặt mặc định cho CentOS sẽ cho phép bạn cài đặt các gói meta khác nhau và bằng cách chọn không có gói nào bạn có thể hài lòng hơn với cài đặt cơ sở của mình.

Ngoài ra, tôi nghĩ rằng câu hỏi của bạn có thể rõ ràng hơn một chút nếu bạn thay thế 'dịch vụ' hoặc 'daemon' cho từ 'máy chủ' khi bạn muốn nói điều gì đó chạy trên máy chủ. Mọi người có xu hướng sử dụng 'máy chủ' để chỉ một hộp vật lý hoặc VM. Mặc dù tôi đoán nó không đúng về mặt kỹ thuật.


0

Hãy xem mức độ bạn đang chạy với lệnh 'runlevel' và xóa tất cả các liên kết tượng trưng tại / etc / rc <runlevel> .d /. Bạn có thể muốn một số daemon chạy, nhưng hầu hết có thể được gỡ bỏ.

Bạn có thể thêm chúng trở lại bằng một liên kết tượng trưng từ tập lệnh trong /etc/init.d.

Tôi nghĩ rằng có một lệnh sẽ thực hiện cùng một mẹo đó và thêm tất cả các liên kết tượng trưng cho tất cả các đường băng, nhưng tôi chỉ thực hiện thủ công.


Vấn đề là, tôi không biết khi nào có thể thêm liên kết tượng trưng. Tôi cần ngăn không cho bất cứ điều gì thêm vào các liên kết tượng trưng và máy chủ khởi động (hệ thống đóng gói, chủ yếu là dường như) làm như vậy trừ khi tôi thực hiện một số hành động yêu cầu cụ thể làm như vậy.
cjs

Có lẽ dễ dàng hơn và đáng tin cậy hơn để chỉ thiết lập một tường lửa. Có thể kịch bản một cái gì đó lên để lấy một cổng và giao thức làm đối số để thêm / del quy tắc tường lửa để làm cho mọi thứ dễ dàng hơn.
bộ cộng hưởng

hoặc chạy máy của bạn ở chế độ người dùng đơn ... Điều đó có thể gây ra nhiều vấn đề hơn là nó tiết kiệm.
bộ cộng hưởng

Tôi mới sử dụng Ubuntu, là người dùng Fedora / RedHat lâu năm. Đó là một điều về Ubuntu khiến tôi thấy kỳ lạ: các dịch vụ được bật theo mặc định. Theo Fedora, các dịch vụ được tắt theo mặc định.
Barry Brown

Chạy máy tính để bàn hoặc máy chủ ở chế độ một người dùng không thực tế lắm.
cjs

0

Ngoài ra, bạn có thể sử dụng update-rc.dlệnh.

Để vô hiệu hóa apache2dịch vụ

# update-rc.d [-f] apache2 remove

BIÊN TẬP:

Điều này có nghĩa là tôi sẽ có thể thực hiện bất kỳ tác vụ sysadmin nào, chẳng hạn như cài đặt gói và tự tin rằng không có máy chủ nào bắt đầu.

Hành vi này được kiểm soát bởi các tập lệnh bên trong các gói .deb. Khi bạn cài đặt một gói, tập lệnh này được thực thi tự động. IIRC, chúng tôi không thể bỏ qua tập lệnh này.


0

Về cơ bản, bạn không thể.

Nếu bạn cài đặt một gói và nó bắt đầu một dịch vụ thì đó là điều sẽ xảy ra. Nếu bạn không thích thì hãy báo lỗi tại https://launchpad.net/ .

Bạn không nên lẩn quẩn với các gói deb. Loại điều này có thể quay lại và cắn vào mông bạn sau này.

Nếu bạn muốn kiểu OpenBSD 'không có gì chạy theo mặc định', thì hãy chạy OpenBSD. Không phải mọi distro phù hợp với tất cả mọi người. Chắc chắn có những thứ trong Ubuntu mà bạn không thích. Nếu bạn vẫn muốn chạy Ubuntu, thì bạn sẽ phải kiểm tra các dịch vụ đang chạy và tắt mọi thứ.


-2

Bạn có thể bật và tắt một số dịch vụ trong menu System> Services trong Gnome

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.