Product SiteDocumentation Site

3.5. 必要最小限のサービスを走らせる

サービスとは ftp サーバや web サーバなどのプログラムのことです。これらは サービスを要求する外部からの接続を待ちうけなければならないので、 外部のコンピュータがあなたのコンピュータに接続することができます。サービスが 脆弱なことがあるので (すなわち、攻撃で破られる可能性があるので)、 セキュリティリスクになります。
必要のないサービスをあなたのマシンにインストールするべきではありません。 インストールされたどのサービスもあなたのマシンに新しい、明らかでは ないかもしれないが確かなセキュリティホールを作るかもしれません。
As you may already know, when you install a given service the default behavior is to activate it. In a default Debian installation, with no services installed, the number of running services is quite low and the number of network-oriented services is even lower. In a default Debian 3.1 standard installation you will end up with OpenSSH, Exim (depending on how you configured it) and the RPC portmapper available as network services[4]. If you did not go through a standard installation but selected an expert installation you can end up with no active network services. The RPC portmapper is installed by default because it is needed for many services, for example NFS, to run on a given system. However, it can be easily removed, see 第 5.13 節「Securing RPC services」 for more information on how to secure or disable RPC services.
ネットワーク関連の新サービス (デーモン) を Debian GNU/Linux にインストール するときに、2 通りの方法で有効にすることができます。inetd スーパーデーモンを 通して有効にするか (つまり、/etc/inetd.conf に一行加える わけです)、自分自身をネットワークインターフェイスにバインドする独立した プログラムとして有効にするかです。独立型のプログラムは /etc/init.d 中のファイルを通じて制御されます。これはブート時に SysV 機構 (またはその代替物) を通じて /etc/rc?.d/* 中の シンボリックリンクを使って 呼びだされます (これがどのように行われるかに ついてくわしくは /usr/share/doc/sysvinit/README.runlevels.gz をごらんください)。
If you want to keep some services but use them rarely, use the update-* commands, e.g. update-inetd and update-rc.d to remove them from the startup process. For more information on how to disable network services read 第 3.5.1 節「デーモンサービスを停止する」. If you want to change the default behaviour of starting up services on installation of their associated packages[5] use policy-rc.d, please read /usr/share/doc/sysv-rc/README.policy-rc.d.gz for more information.
invoke-rc.d support is mandatory in Debian, which means that for Debian 4.0 etch and later releases you can write a policy-rc.d file that forbids starting new daemons before you configure them. Although no such scripts are packaged yet, they are quite simple to write. See policyrcd-script-zg2.

3.5.1. デーモンサービスを停止する

Disabling a daemon service is quite simple. You either remove the package providing the program for that service or you remove or rename the startup links under /etc/rc${runlevel}.d/. If you rename them make sure they do not begin with 'S' so that they don't get started by /etc/init.d/rc. Do not remove all the available links or the package management system will regenerate them on package upgrades, make sure you leave at least one link (typically a 'K', i.e. kill, link). For more information read http://www.debian.org/doc/manuals/reference/ch-system.en.html#s-custombootscripts section of the Debian Reference (Chapter 2 - Debian fundamentals).
You can remove these links manually or using update-rc.d (see update-rc.d(8)). For example, you can disable a service from executing in the multi-user runlevels by doing:
  # update-rc.d name stop XX 2 3 4 5 .
file-rc を使っていないなら、 update-rc.d -f _service_ remove はうまくいかないことに 注意してください。すべてのリンクが削除されるので、その パッケージを再インストールまたはアップグレードするときにリンクが再度 生成されます (これはたぶんあなたが望んでいることではないでしょう)。 これが直観的でないと思うなら、それはたぶん正しいでしょう (http://bugs.debian.org/67095 をごらんください)。 マニュアルページによると:
ファイル /etc/rcrunlevel.d/[SK]??name がすでに存在する場合には、
update-rc.d は何もしない。これは、システム管理者が
ひとつでもリンクを残していた場合に、その設定を上書きされる
ことがなく、別の場所に移動させることができるようにするためである。
file-rc を使っているなら、サービス起動に関するすべての 情報は共通の設定ファイルで扱われ、たとえパッケージがシステムから削除されても 維持されます。
You can use the TUI (Text User Interface) provided by sysv-rc-conf to do all these changes easily (sysv-rc-conf works both for file-rc and normal System V runlevels). You will also find similar GUIs for desktop systems. You can also use the command line interface of sysv-rc-conf:
  # sysv-rc-conf foobar off
The advantage of using this utility is that the rc.d links are returned to the status they had before the 'off' call if you re-enable the service with:
  # sysv-rc-conf foobar on
Other (less recommended) methods of disabling services are:
  • Removing the /etc/init.d/service_name script and removing the startup links using:
      # update-rc.d name remove
  • Move the script file (/etc/init.d/service_name) to another name (for example /etc/init.d/OFF.service_name). This will leave dangling symlinks under /etc/rc${runlevel}.d/ and will generate error messages when booting up the system.
  • Remove the execute permission from the /etc/init.d/service_name file. That will also generate error messages when booting.
  • Edit the /etc/init.d/service_name script to have it stop immediately once it is executed (by adding an exit 0 line at the beginning or commenting out the start-stop-daemon part in it). If you do this, you will not be able to use the script to startup the service manually later on.
Nevertheless, the files under /etc/init.d are configuration files and should not get overwritten due to package upgrades if you have made local changes to them.
残念ながら、他の (UNIX) オペレーティングシステムとは異なり、Debian の サービスを /etc/default/_servicename_ 中のファイルを変更する ことによって停止することはできません。
FIXME: file-rc を使ってデーモンを制御することについてさらに多くの 情報を加える。

3.5.2. Disabling inetd or its services

You should check if you really need the inetd daemon nowadays. Inetd was always a way to compensate for kernel deficiencies, but those have been taken care of in modern Linux kernels. Denial of Service possibilities exist against inetd (which can increase the machine's load tremendously), and many people always preferred using stand-alone daemons instead of calling services via inetd. If you still want to run some kind of inetd service, then at least switch to a more configurable Inet daemon like xinetd, rlinetd or openbsd-inetd.
You should stop all unneeded Inetd services on your system, like echo, chargen, discard, daytime, time, talk, ntalk and r-services (rsh, rlogin and rcp) which are considered HIGHLY insecure (use ssh instead).
/etc/inetd.conf を直接編集することによってサービスを停止する ことができますが、Debian にはこれを行うよりよい他の方法があります: update-inetd です (これはサービスを再び有効にしやすい形でコメントに します)。たとえば、設定ファイルを変更するためにこの コマンドを実行して telnet デーモンを削除し、inet デーモンを再起動する ことができます。(この場合、telnet サービスが停止されます。)
  /usr/sbin/update-inetd --disable telnet
サービスが要求を受けつけるようにはしたいが、すべての IP アドレスからの 要求を受けつけることは望まない場合は、文書に書かれていない inetd の機能を 使いたくなるかもしれません。 あるいは、xinetd のようなかわりの inetd デーモンを使いましょう。


[4] The footprint in Debian 3.0 and earlier releases wasn't as tight, since some inetd services were enabled by default. Also standard installations of Debian 2.2 installed the NFS server as well as the telnet server.
[5] This is desirable if you are setting up a development chroot, for example.