如何阻止Ubuntu启动守护进程,我没有明确要求运行?

计算机安全的基本原理之一是不会运行任何你不需要的东西。

当我注意到我的Ubuntu 9.04(桌面)机器正在运行git服务器守护进程时,我是pgrep ping的一个进程。 在发誓之后,我发现git-daemon-run软件包已经(可能是无意中)被安装了,并且移除了它,并且确保它不会被重新启动。

但在其他情况下,我希望安装服务器软件包,但不希望运行服务器守护程序。 例如,我使用lighttpd进行内部testing(它是由某些应用程序的特定testing脚本启动的,在这些configuration中仅侦听本地主机),但我不希望它使用一些随机configuration文件来侦听外部连接。 (如果我想运行一个监听外部连接,我自己configuration​​并运行它。)

我真的不喜欢在因特网上暴露的机器上运行我不需要的各种随机服务器,因为谁知道他们打开了什么安全漏洞。 而且我宁愿不必去防火墙,因为这是另一个可能导致安全漏洞的错误和错误configuration的潜在来源。 除非pipe理员明确要求,否则configurationUnix机器不会启动任何服务器并不困难。 NetBSD(也是OpenBSD,我想)也是这样默认的。

除非我明确告诉它,我希望它启动,但是如何configuration我的Ubuntu系统永远不会启动任何types的服务器守护进程?

(要求安装一个软件包并不是在我的书中要求启动一个服务器,如果是这样的话,这是一个糟糕的用户界面,因为许多软件包安装甚至没有服务器启动,所以它如果没有意识到你已经这么做了,那么很容易无意中启动服务器。)

编辑:只是要说清楚,问题不是我想能够停止现有的服务器。 问题是我不希望没有明确的请求启动新的服务器。 这意味着我应该可以执行任何系统pipe理任务,比如安装软件包,并且确信没有服务器启动。 大多数答复都没有涉及这一点。

安装sysv-rc-conf ,只需closures你不想运行的服务。

sudo apt-get install sysv-rc-conf
描述:sysv-rc-conf提供了一个易于使用的界面来pipe理“/etc/rc{runlevel}.d/”符号链接。

替代文字

作为一个有类似问题的人,我非常强烈地认为,守护进程假设用户希望默认启动是不合理的:在这种情况下,有许多完全有效的用例。 (更不用说,并不总是清楚哪个安装实际上包含一个守护进程。)守护进程可以是默认closures的,用户可以明确查询,或者可以有一个中央设置。 别的什么都是微软推理完全不配的Linux。

另外,我发现上面对原帖的几点评论是粗鲁的,光顾的,缺乏build设性的。 build议,例如,他应该接受默认的行为或改变分配是真正显着的。 首先,分配不是一个完美的契合,在相关的额外工作中跳跃到一个新的分配方式对于这一件事不太可能是现实的解决scheme。 其次,熟练的Linux / Unix用户习惯每一个行为都是可以改变的:一个问题可能需要两个小时的时间才能被挖掘,但是它是固定的。 对于这样的用户来说,当默认值不合适的时候,自然而然的事情就是假定存在一个变通方法并试图找出它是什么。 第三,在开放源代码和自由软件礼仪中, If you don't like it, then patch the source code!'' is an acceptable response; however, If you don't like it, then patch the source code!'' is an acceptable response; however, …,然后采取加息!“”不是。

包装系统的期望是,当你安装一个服务器包,你想运行该服务器。 这是一个合理的期望。

我如何configuration我的Ubuntu系统永远不会启动任何types的服务器,除非我 
具体告诉它我想要一台服务器启动? 

罗伊已经为你回答了这个问题。 当你安装一个新的服务器软件包时,你停止该服务器,然后使用像sysv-rc-conf这样的工具来防止在下次重启或运行级别更改时启动服务器。 是的,你必须自己做一些工作,这是合理的,因为你configuration系统不同于大多数使用Ubuntu的人。

例如,我使用lighttpd进行内部testing(它是由特定的testing脚本启动的 
对于一些应用程序,只监听本地主机),但我通常不希望它 
听外部连接。

您应该投入一些时间来学习如何configurationlighttpd,以便永久configuration为仅在本地主机上侦听。 然后,当你启动服务器,你知道它已经configuration为你喜欢的。

我发现以下内容对于在chroot环境中安装Ubuntu有帮助,例如debootstrapping新的xen访客。 信用实际上是为了教给我这个xen-tools脚本:

echo'#!/ bin / sh'> /usr/sbin/policy-rc.d

echo'exit 101'>> /usr/sbin/policy-rc.d

chmod 755 /usr/sbin/policyrc.d

有了这个脚本,安装后apt不会启动服务。 但是,这只是你问题的一半,因为符号链接仍然存在,服务将在下次启动后启动。 我不知道如何自动停止:(

巴里布朗在对这个问题的评论中提供了一个可能的答案的线索。

打包系统使用invoke-rc.d程序在安装软件包后启动服务器。[1] 该程序将运行/usr/sbin/policy-rc.d来确定启动该服务器的策略。

程序包policyrcd-script-zg2包含policy-rc.d脚本,该脚本或者运行/etc/policy-rc.d并带有其参数(如果存在),并退出该脚本的错误代码,否则以0(成功)退出。 接口policy-rc.d预计会提供在invoke-rc.d manage中简要地logging,并且在/usr/share/doc/sysv-rc/README.policy-rc.d.gz更为广泛。

我想下一步就是对我进行testing。

还有待回答的事情:

[1]系统的其他部分使用invoke-rc.d ? [2]这实际上是否工作?

如何看待init脚本所在的目录? 您可能会使用chatr命令使这些目录不可修改。

理想情况下,这是post-inst脚本的问题。 在Ubuntu项目开始的时候,我们有意识地努力将默认configuration文件强制为dpkgconfiguration脚本,这样我们就不必回答可能出现的每个该死的问题,或者浪费时间研究这些选项。 现在Ubuntu已经设置好了,很多人都不知道它存在。 应该可以问一个关于是否作为守护进程来安装的问题,但是在我检查的几个包中我没有看到任何这样的问题。

也许你应该与Ubuntu服务器团队,甚至Debian政策,以改善事情。

您可以尝试创build脚本来检查已安装的服务列表,并根据允许的服务列表对其进行validation。 如果服务不在列表中,则脚本将closures它。 脚本必须在公共服务开始之前运行。 也许像守护进程closures新安装的服务。 或者如果可能在每次安装后自动运行以检查新的服务。

PS我可以想到在软件包安装后服务启动的两个可能的原因。 这是包function,或者是包pipe理器function。 如果这是包function我不认为有一些方法来改变服务行为。 如果这是包pipe理器function,可能有一些configuration选项,以防止安装后服务启动。 我现在不知道,所以只是抛出想法。

如果使用INPUT链的默认策略DROP设置iptables,则不必担心监听端口,因为它们将被iptables阻止。 如果您是iptables的新手,Ubuntu服务器为iptables提供了一个友好的用户界面 。

从你的文章来看,对我来说,听起来像你可能会对像CentOS这样不同的Linux发行版更开心。 CentOS的默认安装过程将允许你安装不同的元软件包,通过selectnone,你可能会更喜欢你的基本安装。

另外,如果你的意思是服务器上运行的东西,如果用“服务”或“守护进程”replace“服务器”一词,我认为你的问题可能会更清楚。 人们倾向于使用“服务器”来指代物理盒子或虚拟机。 虽然我猜这在技术上并不正确。

使用“runlevel”命令查看运行级别,然后删除/ etc / rc < runlevel> .d /中的所有符号链接。 你可能会想要运行一些守护进程,但大多数可能会被删除。

您可以使用/etc/init.d中的脚本的符号链接将它们添加回来。

我认为有一个命令会做同样的技巧,并添加所有运行级别的所有符号链接,但我只是手动。

或者,您可以使用update-rc.d命令。

禁用apache2服务

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

编辑:

这意味着我应该可以执行任何系统pipe理任务,比如安装软件包,并且确信没有服务器启动。

此行为由.deb包内的脚本控制。 当你安装一个包时,这个脚本会自动执行。 IIRC,我们不能绕过这个脚本。

基本上,你不能。

如果你安装一个软件包并启动一个服务,那么会发生什么情况。 如果您不喜欢, 请在https://launchpad.net/上提交错误&#x3002;

你不应该使用deb软件包。 这种事情可能会回来,咬你后来的屁股。

如果你想要OpenBSD风格的“没有默认运行”,那么运行OpenBSD。 不是每个发行版都适合每个人。 Ubuntu中肯定会有你不喜欢的东西。 如果你仍然想运行Ubuntu,那么你将不得不检查正在运行的服务并closures它。

您可以在GNOME的“系统”>“服务”菜单中启用和禁用某些服务