计算机安全的基本原则之一是永远不要运行任何不需要的东西。
今天我在pgrep
ping 一个进程时,注意到我的 Ubuntu 9.04(台式机)机器正在运行一个 git 服务器守护进程。经过一番思考后,我发现该git-daemon-run
软件包已被(可能是无意中)安装,删除它可以删除该进程(并确保它以后不会重新启动)。
但在其他情况下,我希望安装服务器包,但不希望运行服务器守护程序。例如,我将其用于lighttpd
内部测试(它由某些应用程序的特定测试脚本启动,并且在那些配置中仅在本地主机上侦听),但我不希望它使用一些随机配置文件侦听外部连接。(如果我想运行一个侦听外部连接的程序,我会自己配置并运行它。)
我真的不喜欢在暴露于互联网的机器上运行各种我不需要的随机服务器,因为谁知道它们会打开什么安全漏洞。而且我更愿意不必费心处理防火墙,因为这是另一个可能出现错误和配置不当的来源,可能会打开安全漏洞。将 Unix 机器配置为不启动任何服务器并不难,除非管理员明确要求这样做;NetBSD(我认为 OpenBSD 也是如此)默认采用这种方式。
如何配置我的 Ubuntu 系统绝不启动任何类型的服务器守护进程,除非我明确告诉它我想要启动它?
(在我看来,要求安装一个软件包并不是要求启动一个服务器。如果是的话,那它是一个糟糕的用户界面,因为许多软件包安装甚至没有要启动的服务器,所以很容易在不经意间启动服务器而没有意识到你已经这样做了。)
编辑:为了说明清楚,问题不在于我希望能够停止现有服务器。问题是我不想在没有明确请求的情况下启动新服务器。这意味着我应该能够执行任何系统管理任务,例如安装软件包,并且确信没有服务器启动。大多数回复都没有提到这一点。
答案1
安装系统配置信息并关闭您不想运行的服务。
sudo apt-get 安装 sysv-rc-conf
描述: sysv-rc-conf 提供了一个易于使用的界面来管理“/etc/rc{runlevel}.d/”符号链接。
答案2
作为一个有类似问题的人,我强烈地感觉到不是 守护进程假设用户希望它默认启动是合理的:有许多完全有效的用例,但情况并非如此。(更不用说并不总是清楚哪些安装实际上包含守护进程。)守护进程可能默认关闭,用户可能被明确询问,或者可能有一个中央设置。其他任何理由都是微软式的推理,完全不配 Linux。
此外,我发现上述对原始发帖人的评论中有几个很粗鲁、傲慢,而且缺乏建设性。例如,建议他要么接受默认行为,要么更改发行版,这确实令人难以置信。首先,没有一个发行版是完美的,而跳到一个新的发行版并进行相关的额外工作不太可能是解决这个问题的现实解决方案。其次,熟练的 Linux/Unix 用户习惯于每个行为都是可以改变的:一个问题可能需要花两个小时来挖掘,但之后它就解决了。当默认设置不合适时,这样的用户自然会假设存在一种解决方法并尝试找出它是什么。第三,在开源和免费软件礼仪中,“ If you don't like it, then patch the source code!'' is an acceptable response; however,
...,然后走开!”不是。
答案3
打包系统的期望是,当您安装服务器软件包时,您希望运行该服务器。这是一个合理的期望。
如何配置我的 Ubuntu 系统,使其永远不会启动任何类型的服务器,除非我 具体告诉它我想要启动一个服务器吗?
Roy 已经为您解答了这个问题。当您安装新的服务器软件包时,您会停止该服务器,然后使用 sysv-rc-conf 之类的工具来阻止该服务器在下次重新启动或运行级别更改时启动。是的,您必须自己做一些工作,这是合理的,因为您配置系统的方式与大多数使用 Ubuntu 的人不同。
例如,我使用lighttpd进行内部测试(它由特定的测试脚本启动 对于某些应用程序,并且仅在本地主机上侦听),但我一般不想要它 监听外部连接。
您应该花一些时间学习如何配置 lighttpd,以便将其永久配置为仅监听本地主机。然后,当您启动服务器时,您知道它已经按照您的喜好进行了配置。
答案4
巴里·布朗 (Barry Brown) 在对这个问题的评论中提供了一个可能的答案的线索。
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
,在 中有更详细的说明/usr/share/doc/sysv-rc/README.policy-rc.d.gz
。
我想,下一步就是对此进行测试。
尚待回答的问题:
[1] 系统的其他部分还使用什么invoke-rc.d
? [2] 这真的有效吗?