blog/content/post/2010/11/27/2010-11-27-00001431.md

138 lines
6.8 KiB
Markdown

---
title: Ubuntu 10.04 で sshd を xinetd 経由で起動させる設定
author: kazu634
date: 2010-11-27
wordtwit_post_info:
- 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:5393;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}'
categories:
- ubuntu
---
<div class="section">
<h4>
はじめに: Ubuntuの仕様変更
</h4>
<p>
Ubuntu 10.04 だったからか、 service コマンドを用いてデーモンなどの起動を行うような変更がありました。そのため、従来の /etc/init.d/ 経由が deprecated 扱いになりました(はず)。また、OS 起動時の自動起動の設定も仕様変更があり、 /etc/init.d/ 配下ではなく、 /etc/init/ 配下の設定ファイルを参照するように変更されました。
</p>
<p>
これまでであれば、 xinetd を導入した際には、 xinetd 経由で動作させたいデーモンを自動起動しないように設定する必要がありましたが、これらの仕様変更のためにどのように設定を行えば自動起動を解除できるのかがわからなくなっていました。そこらへんを確認して、 xinetd 経由で sshd を起動させるように設定を行いました。
</p>
<p>
なお、すでにsshdが導入済みという前提で説明します。
</p>
<h4>
xinetdの導入
</h4>
<p>
下記のコマンドを実行します:
</p>
<pre class="syntax-highlight">
kazu634@srv634% sudo aptitude <span class="synStatement">install</span> xinetd
</pre>
<h4>
xinetd経由でsshdを起動させる設定
</h4>
<p>
下記のコマンドを実行します。ちなみに、sshのポート番号を 10022 にしています(デフォルトは22)。
</p>
<pre class="syntax-highlight">
kazu634@srv634% sudo vi ssh
kazu634@srv634% cat ssh
service ssh
<span class="synSpecial">{</span>
socket_type <span class="synStatement">=</span> stream
protocol <span class="synStatement">=</span> tcp
instances <span class="synStatement">=</span> <span class="synConstant">3</span>
<span class="synStatement">wait</span> <span class="synStatement">=</span> no
user <span class="synStatement">=</span> root
server <span class="synStatement">=</span> /usr/sbin/sshd
server_args <span class="synStatement">=</span> -i
port <span class="synStatement">=</span> <span class="synConstant">10022</span>
<span class="synSpecial">}</span>
</pre>
<h4>
sshdをOS起動時に自動起動させない
</h4>
<p>
Ubuntu 10.04は/etc/init/ 配下の設定ファイルでOS起動時の制御を設定します。具体的には次のように設定します:
</p>
<pre class="syntax-highlight">
kazu634@srv634% sudo cp <span class="synSpecial">-p</span> ssh.conf ssh.conf.<span class="synConstant">20101126</span>
kazu634@srv634% sudo vi ssh.conf
kazu634@srv634% diff <span class="synSpecial">-u</span> ssh.conf.<span class="synConstant">20101126</span> ssh.conf /etc/init <span class="synStatement">[</span><span class="synConstant">6163</span><span class="synStatement">]</span>
--- ssh.conf.<span class="synConstant">20101126</span> <span class="synConstant">2010-05-20</span> <span class="synConstant">02</span>:<span class="synConstant">30</span>:<span class="synConstant">44</span>.<span class="synConstant">000000000</span> <span class="synSpecial">+0900</span>
+++ ssh.conf <span class="synConstant">2010-11-26</span> <span class="synConstant">23</span>:<span class="synConstant">51</span>:<span class="synConstant">08</span>.<span class="synConstant">982827977</span> <span class="synSpecial">+0900</span>
@@ <span class="synConstant">-4</span>,<span class="synConstant">7</span> <span class="synSpecial">+4</span>,<span class="synConstant">7</span> @@
description <span class="synStatement">&#34;</span><span class="synConstant">OpenSSH server</span><span class="synStatement">&#34;</span>
-<span class="synStatement">start</span> on filesystem
<span class="synComment">+# start on filesystem</span>
<span class="synStatement">stop</span> on runlevel S
expect fork
</pre>
<h4>
xinetdの再起動
</h4>
<p>
xinetd を再起動し、設定ファイルを読み込み直します:
</p>
<pre class="syntax-highlight">
kazu634@srv634% sudo service xinetd <span class="synStatement">restart</span>
</pre>
<p>
動作確認として、 ps コマンドを実行してみます:
</p>
<pre class="syntax-highlight">
kazu634@srv634% ps <span class="synSpecial">-ef</span> <span class="synStatement">|</span> <span class="synStatement">grep</span> xinetd
root <span class="synConstant">1088</span> <span class="synConstant">1</span> <span class="synConstant"></span> <span class="synConstant">00</span>:<span class="synConstant">15</span> ? <span class="synConstant">00</span>:<span class="synConstant">00</span>:<span class="synConstant">00</span> /usr/sbin/xinetd <span class="synSpecial">-pidfile</span> /var/run/xinetd.pid <span class="synSpecial">-stayalive</span> -inetd_compat -inetd_ipv6
kazu634 <span class="synConstant">2102</span> <span class="synConstant">1952</span> <span class="synConstant"></span> <span class="synConstant">23</span>:<span class="synConstant">42</span> pts/<span class="synConstant"></span> <span class="synConstant">00</span>:<span class="synConstant">00</span>:<span class="synConstant">00</span> <span class="synStatement">grep</span> xinetd
</pre>
<p>
/usr/sbin/sshd と表示された場合、OS起動時に sshd が自動起動しています。リスタートしてみてください。
</p>
<h4>
その他
</h4>
<p>
うまくsshで接続できないときは、 /var/log/auth.log を確認します:
</p>
<pre class="syntax-highlight">
kazu634@srv634% cat auth.log <span class="synStatement">|</span> <span class="synStatement">grep</span> sshd
Nov <span class="synConstant">27</span> <span class="synConstant">00</span>:<span class="synConstant">15</span>:<span class="synConstant">12</span> srv634 sshd<span class="synStatement">[</span><span class="synConstant">1090</span><span class="synStatement">]</span>: fatal: Missing privilege separation directory: /var/run/sshd
</pre>
<p>
上記のメッセージが表示されている場合には、/var/run/sshdが存在しないのが原因です。そこで/var/run/sshdを作成します
</p>
<pre class="syntax-highlight">
kazu634@srv634% <span class="synStatement">cd</span> /var/run/
kazu634@srv634% sudo <span class="synStatement">mkdir</span> sshd
</pre>
<p>
上記以外のメッセージの場合には、メッセージに応じた対策を取ってください。
</p>
</div>