Ubuntuが実行を明示的に要求していないデーモンを起動しないようにするにはどうすればよいですか?


8

コンピュータセキュリティの基本原則の1つは、不要なものを実行しないことです。

pgrepUbuntu 9.04(デスクトップ)マシンでgitサーバーデーモンが実行されていることに気付いたとき、私は今日プロセスにpingを送信していました。すばやく誓った後、git-daemon-runパッケージが(おそらく誤って)インストールされていることを発見しました。パッケージを削除すると、そのプロセスが取り除かれました(後で再起動されないことを確認しました)。

しかし、他の場合では、サーバーパッケージをインストールしたいが、サーバーデーモンを実行したくない場合があります。たとえば、私lighttpdは内部テストに使用しています(一部のアプリケーションの特定のテストスクリプトによって開始され、それらの構成ではlocalhostでのみリッスンします)が、ランダムな構成ファイルで外部接続をリッスンしたくありません。(外部接続をリッスンするものを実行したい場合は、自分で構成して実行します。)

インターネットに公開されたマシン上で必要のないあらゆる種類のランダムサーバーを実行するのは本当に嫌いです。また、ファイアウォールをいじくり回す必要はありません。これは、セキュリティホールを開く可能性のあるエラーや設定ミスの原因となる可能性があるためです。管理者から特に要求されない限り、サーバーを起動しないようにUnixマシンを構成することはそれほど難しくありません。NetBSD(そして私が思うにOpenBSDも)はデフォルトでこのようになっています。

どのように私は私のUbuntuシステムを設定します決して、私は特に、私はそれが始めたいことを教えていない限り、サーバー・デーモンのいずれかの種類を起動しないように?

(私の本では、パッケージのインストールを要求することは、サーバーを起動することを要求することではありません。それが想定されている場合、それはひどいユーザーインターフェイスです。自分で行ったことに気付かずにサーバーを誤って起動してしまうのは、あまりにも簡単です。)

編集:明確にするために、問題は既存のサーバーを停止できるようにすることではありません。問題は、明示的な要求なしに新しいサーバーを起動したくないことです。これは、パッケージのインストールなどのsysadminタスクを実行でき、サーバーが起動していないことを確信できることを意味します。ほとんどの応答はこの点に対処していません。


3
.debパッケージの内部を約10分間調べました。これらには、パッケージのインストール後に実行される「postinst」スクリプトが含まれています。彼らが実行する最後のコマンドは、多くの場合、「invoke-rc.d <servicename> start」であり、これによりサービスが自動的に開始されます。通常、invoke-rc.dの呼び出しは、実際にサービスを開始するかどうかを制御するためのグローバル構成変数をチェックせずに組み込まれています。したがって、サービスを開始するかどうかを決定するのは、invoke-rc.dです。私の調査はここで終わりました。
Barry Brown、

2
バリーが説明したように、Ubuntuは明らかにあなたのためではありません。申し訳ありませんが、1)ディストリビューションを変更するか、2)ubuntuが実行していることをすべて監視する必要があります。
elcuco 2009年

Ubuntu / Debianがこの点でFedoraと異なるのは、Debianが要求したものだけをインストールするのに対して、Fedoraはキッチンシンクをインストールするからです。したがって、Fedoraでは、要求していないパッケージがインストールされているのが一般的であるため、デフォルトでは実行されません。Debianでは、パッケージを明示的にインストールしたため、サーバーをすぐに実行する必要があります。
TRS-80

更新。どれを試しましたか?そして何がうまくいったのですか?a
ナンディニアナンド

悲しいことに、「パッケージを変更した後、システムで実行されているソフトウェアを慎重に確認する」以外の解決策はないようですが、明らかにエラーが発生しやすいプロセスです。
cjs 2012年

回答:


12

sysv-rc-confをインストールし、実行したくないサービスをオフにします。

sudo apt-get install sysv-rc-conf
説明:sysv-rc-confは、「/ etc / rc {runlevel} .d /」シンボリックリンクを管理するための使いやすいインターフェースを提供します。

代替テキスト


これにより、パッキングシステムによって新しいサーバーがオンにならないようにするにはどうすればよいですか?
cjs

Barry Brownのコメントを読んでください。この回答が陳腐化している理由が説明されています。
elcuco 2009年

8

同様の問題を抱えている誰かとして、私 はデーモンがユーザーがデフォルトでそれを開始することを望んでいると推測することが合理的でないと強く感じます:これが当てはまらない完全に有効な多くのユースケースがあります。(実際にどのインストールにデーモンが含まれているのかが常に明確であるとは限らないことは言うまでもありません。)デーモンはデフォルトでオフになっている、ユーザーに明示的に照会される、または中央設定がある場合があります。それ以外は、MicrosoftがLinuxにまったく値しないと推論しています。

さらに、元のポスターに対する上記のコメントのいくつかは、失礼で、ひいきにしており、建設性に欠けていることがわかりました。たとえば、彼がデフォルトの振る舞いを受け入れるか、ディストリビューションを変更すべきかを示唆することは本当に驚くべきことです。まず、どのディストリビューションも完全に適合するわけではなく、追加の作業が関連付けられた新しいディストリビューションにジャンプすることが、この1つの問題に対する現実的な解決策になることはほとんどありません。次に、熟練したLinux / Unixユーザーは、変更可能なすべての動作に慣れています。問題を掘り出すのに2時間かかる可能性がありますが、修正されます。このようなユーザーが行うデフォルトの設定が適切でない場合、自然なことは、回避策の存在を想定して、それが何であるかを見つけることを試みることです。第三に、オープンソースとフリーソフトウェアのエチケットでは、If you don't like it, then patch the source code!'' is an acceptable response; however,...ハイキングに参加してください!」ではありません。


5

パッケージングシステムの期待は、サーバーパッケージをインストールするときに、そのサーバーを実行することです。それは合理的な期待です。

私の場合を除いて、どのような種類のサーバーも起動しないようにUbuntuシステムを構成するにはどうすればよいですか? 
具体的には、サーバーを起動してほしいと伝えますか? 

ロイはあなたのためにこの質問に答えました。新しいサーバーパッケージをインストールするときは、そのサーバーを停止してから、sysv-rc-confなどのツールを使用して、次の再起動時またはランレベルの変更時にそのサーバーが起動しないようにします。はい、いくつかの作業を自分で行う必要があります。Ubuntuを使用するほとんどの人とは異なる方法でシステムを構成しているため、それは合理的です。

たとえば、内部テストにlighttpdを使用します(特定のテストスクリプトによって開始されます) 
一部のアプリケーションでは、ローカルホストでのみリッスンします)が、通常はそれを望みません 
外部接続をリッスンしています。

ローカルホストでのみリッスンするように永続的に設定されるようにlighttpdを設定する方法を学ぶには、少し時間を費やす必要があります。そうすれば、サーバーを起動したときに、サーバーが好みに合わせて既に構成されていることがわかります。


3
まず、私はそれが妥当な期待だとは思いません。lighttpdバイナリをインストールしたからといって、公開サーバーを実行したいという意味ではありません。第二に、サーバーパッケージをインストールしたことを常に知っているとは限りません。彼らは時々私がインストールした他のパッケージに引っ張られてしまいます。
cjs 2009年

1
ああ、私はlighttpdを設定してlocalhostだけをリッスンする方法を知っています。そのため、特定のシステムでプロジェクトのチェックアウトを6通以上行うことがよくあります。
cjs 2009年

5

新しいxenゲストのブートストラップ解除など、chroot環境にUbuntuをインストールするために次の情報が役に立ちました。クレジットは実際に私にこれを教えるためのxen-toolsスクリプトに行きます:

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

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

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

このスクリプトを配置すると、aptはインストール後にサービスを開始しません。ただし、これは問題の半分にすぎません。シンボリックリンクがまだ配置されているため、サービスは次の起動後に開始されます。それを自動的に停止する方法がわかりません:(


1
Ubuntuの/etc/logrotate.d/nginx invoke-rc.d nginx rotateがpostrotateセクションで使用しているため、nginxのログローテーションが壊れる可能性があります。バージョンが少し異なるgist.github.com/hostmaster/7c25ef4e1e47bc3e2d71
hostmaster

また、パッケージがシステムから削除されたときにデーモンが停止するのを防ぎます。これは良くない。
ホストマスター、2014

4

バリーブラウンは、質問に対するコメントで、考えられる答えの手がかりを提供します。

パッケージシステムは、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.dmanageで簡単に文書化され、さらに広範囲で文書化されます/usr/share/doc/sysv-rc/README.policy-rc.d.gz

次のステップは、私がこれをテストすることだと思います。

答えられるべき残りの事柄:

[1]システムの他のどの部分が使用しinvoke-rc.dますか?[2]これは実際に機能しますか?


3

initスクリプトが配置されているディレクトリを監視するのはどうですか?これらのディレクトリは、chatrコマンドを使用して変更できないようにすることができます。


うーん。なぜこれが反対票だったのかしら?これはハックですが、ここでのほとんどの応答とは異なり、少なくとも私の問題を解決します。
cjs 2009

これを支持したのは、これがUbuntuで得られる可能性が最も高いソリューションであるためです。ただし、initディレクトリを変更できないようにするのはひどい考えです(開始したいサービスをインストールしようとしていると想像してください)。findは、ファイルやディレクトリの変更を監視するために使用できることを知っていますが、正確なコマンドを提供するためのツールについてはあまり詳しくありません。私は、gurusの1人に動作するコマンドを要求し、それをbashスクリプトに貼り付け、各インストール後に実行し、sysv-rc-confを使用して不要なサービスを手動で無効にします。
Babu

2

理想的には、これはpost-instスクリプトの問題です。Ubuntuプロジェクトの最初に、意図的にデフォルトのdpkg構成スクリプトを強制するように努力したので、あなたと私は、出てくる可能性のあるすべてのいまいましい質問に答えたり、オプションの調査に時間を浪費したりする必要はありません。Ubuntuがこれを設定したので、多くの人はそれが存在することに気づいていません。デーモンとしてインストールするかどうかについて質問することは可能ですが、チェックしたいくつかのパッケージにはそのような質問はありません。

おそらく、Ubuntu Server Teamや、場合によってはDebianポリシーに関与して、物事を改善する必要があります。


1

インストールされているサービスのリストをチェックし、許可されているサービスのリストに対してそれらを検証するスクリプトを作成してみることができます。サービスがリストにない場合、スクリプトはそれをオフにします。スクリプトは、開始時に共通サービスの前に実行する必要があります。また、デーモンのように実行して、新しくインストールされたサービスをシャットダウンすることもできます。または、可能であれば、インストールのたびに自動的に実行して、新しいサービスを確認します。

PSパッケージのインストール後にサービスが開始する2つの原因が考えられます。それがパッケージ機能、またはパッケージマネージャー機能です。それがパッケージ機能である場合、サービスの動作を変更する方法はないと思います。それがパッケージマネージャーの機能である場合、インストール後にサービスが開始されないようにするいくつかの構成オプションがある可能性があります。今は分からないのでアイデアを投げるだけ。


1

INPUTチェーンに対してDROPのデフォルトポリシーでiptablesを設定する場合、iptablesによってブロックされるため、リスニングポートについてそれほど心配する必要はありません。Ubuntuサーバーには、iptablesを初めて使用する場合に、iptablesのユーザーフレンドリーなインターフェースが付属しています

あなたの投稿から、CentOSなどの別のLinuxディストリビューションの方が幸せなように思えます。CentOSのデフォルトのインストールプロセスでは、さまざまなメタパッケージをインストールできます。何も選択しないことで、ベースインストールの方が便利な場合があります。

また、サーバー上で実行されるものを意味するときに「サーバー」という単語の代わりに「サービス」または「デーモン」を使用すると、質問が少し明確になったと思います。人々は、物理的なボックスまたはVMを指すために「サーバー」を使用する傾向があります。私はそれが技術的に不正確ではないと思いますが。


0

「runlevel」コマンドで現在の実行レベルを確認し、/ etc / rc <runlevel> .d /にあるすべてのシンボリックリンクを削除します。おそらくいくつかのデーモンを実行したいでしょうが、ほとんどはおそらく削除することができます。

/etc/init.d内のスクリプトからシンボリックリンクを使用して、それらを追加し直すことができます。

同じトリックを実行し、すべてのランレベルのすべてのシンボリックリンクを追加するコマンドがあると思いますが、手動で実行するだけです。


問題は、シンボリックリンクがいつ追加されるかわかりません。私は特にシンボリックリンクを追加し、サーバー(主に、パッケージングシステムのように思われます)を追加することによって、特にそうするように要求しない限り、そうしないようにする必要があります。
cjs 2009年

ファイアウォールを設定するだけで、おそらくより簡単で信頼性が高くなります。ファイアウォールルールを追加/削除するための引数としてポートとプロトコルを引数に取るようにスクリプトを記述して、物事を簡単にするかもしれません。
共振器、

または、マシンをシングルユーザーモードで実行します...ただし、節約するよりも多くの問題が発生する可能性があります。
共振器

私はUbuntuに初めて参加し、長年のFedora / RedHatユーザーです。Ubuntuの奇妙な点の1つは、サービスがデフォルトで有効になっていることです。Fedoraでは、サービスはデフォルトでオフになっています。
Barry Brown、

デスクトップマシンまたはサーバーをシングルユーザーモードで実行することは、あまり実用的ではありません。
cjs 2009年

0

または、update-rc.dコマンドを使用することもできます。

apache2サービスを無効にするには

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

編集:

これは、パッケージのインストールなどのsysadminタスクを実行でき、サーバーが起動していないことを確信できることを意味します。

この動作は、.debパッケージ内のスクリプトによって制御されます。パッケージをインストールすると、このスクリプトが自動的に実行されます。IIRC、このスクリプトをバイパスすることはできません。


0

基本的にはできません。

パッケージをインストールしてサービスを開始すると、それが起こります。気に入らない場合は、https: //launchpad.net/でバグを報告してください

debパッケージをいじってはいけません。この種のものは戻ってきて、後でお尻に噛み付く可能性があります。

OpenBSDスタイルの「デフォルトでは何も実行しない」が必要な場合は、OpenBSDを実行します。すべてのディストリビューションがすべての人に適しているわけではありません。Ubuntuには気に入らないものが必ずあるはずです。それでもubuntuを実行したい場合は、実行中のサービスを確認してオフにする必要があります。


-2

GNOMEの[システム]> [サービス]メニューで一部のサービスを有効または無効にできます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.