カテゴリー
Linux

CentOS6の練習-#6(SSHサーバ)。

 まず,ぼやき。LINUXサーバはCUIで行くって一応決めたんだが,やっぱ慣れない。なんか何十年も時代を遡った気分になる。しかし,使い勝手は別にして,セキュリティの点から言うとあんまりいらないものというか,使わなくてすむものは入れないほうがいいんだろう。例えば,BINDだって,うちのレベルだとなければないですむ。
 それと,もうひとつ悩んでいるのが,パッケージの利用。表題のSSHだってCentOS6.3標準のパッケージだと,openssh-5.3p1。開発元の最新だと,openssh-6.0p1。Apacheは2.2.15だし,PHPは5.3.3と来る。これまでのポリシーに反するから,やはり,自分でビルドすることに馴染むべきなのかなぁ。でも,Winだと最新バージョンを使うからって,ビルドまではやらないから,ホント馴染みがない。どうしよう。

 ところで本題。今のところユーザがrootしかいない。昨今,SSHの接続には,rootを使わないのが主流みたい。というわけで,この際,-gオプション付きでグループ(users)を指定して,一般管理ユーザcentosを作る。ホームディレクトリが一緒に作られるようだ。パスワードも設定しておく。
   # useradd -g users centos
   # passwd centos
 この一般ユーザをsudoで使いたいのだが,Minimalインストールの場合は,sudoそのものがインストールされていないので,これをインストールする。
   # yum install sudo
 あと,sudoersの編集をする。以下を追加。(注:sudoersファイルって,実は行単位で管理されているようで,追加場所は root の直下でなくて,末尾でも構わないようだ。)
   centos ALL=(ALL) ALL
 ひとまずログアウト,centosでログイン。プロンプトが# —->> $に変わる。
   # exit
   login: centos  <<—- 作成したユーザ名
   Password:  <<—- 作成したユーザのパスワードを入力
   $ pwd
   /home/centos と表示され,ログイン直後はユーザのホームディレクトリにいることが分かる。
   $ sudo -l  <<—- このユーザのsudo権限を確認(表示結果は,sudo_-l.txt参照)

 ところで,CentOS6の練習-#5で,SSHデーモンはデフォルトで動いていることが分かっているので,現時点のバージョンと設定を確認。
   $ rpm -q openssh
と問い合わせると,openssh-5.3p1-81.el6.i686が戻ってきた。これは,インストール時と同じである。OpenSSHによれば,現時点の最新バージョンはopenssh-6.0p1なんだが,wikiをうろうろしていたら,Securing OpenSSHの8. Frequently Asked Question (FAQ)にUpstream Vendorが出すセキュリティ・パッチをきっちり当てていれば,無理に最新バージョンにする必要はないと書いてあった。前述のように悩んではいるのだが,独自にビルドしてインストールするのは,もう少しわかってきてからにして,今回はこのままで行くことにした。
 さて,設定を弄るにあたってマニュアルを見たいのだが,installed.txtでわかるとおりMinimalでは,Manもインストールされていない。ここで,インストールする。
   $ sudo yum install man
   $ man sshd_config
で表示されたものを参考にしながら, /etc/ssh/sshd_configを見ていく。これの一番上の方に注釈として,コメントアウトの形で書いてあるのがデフォルトの設定で,アンコメントの分が特別に設定を変えてあるところだと書いてある。ずーっと見ていくと,まず,

  1. #Port 22 になっているのだが,これを Port xxxxx (0 ~ 65535なら何でもよい。)にする。
    ssh のポート22っていうのはWELL KNOWNだから,自分しか使わない接続のポートとしては「変えておいた方が無難だよな」って程度。普通は,0からずっと開いてるポートをなめてくって形だろうから,時間かかったらあきらめてくれることを狙って,大きい数の方がいいのかな。今どき,時間もあんまり関係ないかなぁ。まっ,でも22のままよりはいいだろう。
  2. Protocol 2(つまり,SSH2)になってて,レガシー(つまり,SSH1)は殺されてるから,O.K.
  3. #ServerKeyBits 1024  —>>  ServerKeyBits 2048
  4. #PermitRootLogin yes  —>>  PermitRootLogin no
  5. #RSAAuthentication yes だから,デフォルトで使えることになっているのだが,
    RSAAuthentication yes にして,利用していることを明示しておく。そのほうが,あとで自分が確認するとき,混乱しなくて済む。<<— 設定はデフォルトのままだけど,自分がこれを使うと特に認識したいときは,すべてこの書き方で行く。ということで,
    #PubkeyAuthentication yes  —>>  PubkeyAuthentication yes
    #AuthorizedKeysFile .ssh/authorized_keys  —>>  AuthorizedKeysFile .ssh/authorized_keys
  6. #HostbasedAuthentication no  —>>  HostbasedAuthentication no
  7. PasswordAuthentication yes  —>>  PasswordAuthentication no
    #PermitEmptyPasswords no  —>>  PermitEmptyPasswords no
  8. ChallengeResponseAuthentication no になっているからてるから,O.K.
  9. GSSAPIAuthentication yes  —>>  GSSAPIAuthentication no にもどす。ここは,あとで変えるかもしれない。
  10. X11Forwarding yes  —>>  X11Forwarding no にもどす。ここも後で変えるかもしれない。

 こんな感じかな。これで,

  • SSH2 接続。
  • 2048ビットのRSA公開鍵・秘密鍵
  • 上記鍵ペアのパスフレーズ

を想定した接続になるはず。

   $ sudo vi /etc/ssh/sshd_config
で設定を書き換える。
   $ which sshd
でsshdの場所を調べる。
   $ sudo /usr/sbin/sshd -t
で,テスト。bad configurationが戻ってきたら対処。今回は何も戻ってこないので,次へ進む。
   $ sudo service sshd restart
   Stopping sshd:                  [ OK ]
   Starting sshd:                  [ OK ]
が瞬時で戻ってきた。ハヤッ。

 SSHのポートを変更したので,ファイアーウォールの設定(/etc/sysconfig/iptables)で,ポート22を上で設定したものに変更する。変更を適用するために,サービスをリスタート。
   $ sudo service iptables restart

 「2048ビットのRSA公開鍵・秘密鍵」のつもりなので,鍵を用意しなければいけない。ssh-keygenコマンドで,CentOS6上で生成できるようだが,鍵ペアのパスフレーズにかなり長いものを使うつもりなので,入力が不安。まぁ,出来るまで何度でもやればいいようなもんだが……それに,公開鍵・秘密鍵の性質から考えて,クライアント側で生成して,サーバに送るほうが安全だろう。秘密鍵はメールで送るわけにいかないが,公開鍵ならそれもできるわけだし。
 どうせWin端末からリモートするから,ターミナルエミュレータとしてTera Termを導入することにした。Tera Termには鍵生成の機能もある。Tera TermはかなりあとまでSSH2やUTF-8に対応していなかったらしいが,現在はサポートするようになり,Tera Termプロジェクトが順調に動いているようなので,PuTTYでなくこちらを使うことにした。

  1. リリースファイル一覧から,teraterm-4.74.exeをダウンロード。Windows用定番SSHクライアント「Tera Term」の使い方を参考にしながら,イントラ内のWin端末にインストール。オプションがいろいろあるが,今回は初めてのことなので,「標準インストール」した。自分が使わないオプションは,入れないほうがいいかもしれないが,インストールするのはWin端末で,サーバ上じゃないから,ちょっとお気楽。
  2. Tera Termを起動する。新しい接続の窓は閉じて,鍵を生成する。練習サーバは,自LAN内からだけのアクセスだが,これ(今回のLINUX サーバ構築)を機会に外部からでもリモート出来るようにしてみたいという夢(オーバー ^^,,, )があるので,ガンバ。
    「設定」>>「SSH鍵生成」から,図1の設定で鍵を生成。生成の終わったところでパスフレーズを入力。公開鍵と秘密鍵を保存したら,鍵生成の窓を閉じてTera Termを終了する。
    ところで,
       公開鍵(id_rsa.pub)
         = サーバに登録する鍵(人に見られても問題ない鍵)
       秘密鍵(id_rsa)
         = ローカルマシンに置いておく鍵(人に見られてはいけない鍵)
    なので,公開鍵の方をサーバにコピーしなければいけない。
         参考ページ:秘密鍵と公開鍵
  3. Tera Termで鍵を作ったので,サーバ上にディレクトリ.sshがない。これを作る。場所は,/home/centos/.ssh 。
       $ cd
       $ mkdir .ssh   パーミッション755 ownerはcentos
       $ chmod 700 .ssh
     USBフラッシュメモリに入れたid_rsa.pubをサーバにコピーする。
       $ sudo mount -t vfat /dev/sdb1 /mnt/flash
       $ cp /mnt/flash/id_rsa.pub .ssh/authorized_keys
          パーミッション755 ownerはcentos
       $ sudo umount /mnt/flash
       $ chmod 600 .ssh/authorized_keys
       $ sudo service sshd restart

 さて,Tera Termを起動して,イントラ内から接続してみよう。

  1. 新しい接続のホスト名と,TCPポートだけをデフォルトから変更して[OK]をクリック(図2)。
  2. 1度目は,セキュリティ警告が出る(図3)。ここで,known hostsリストに追加しておくと,次から出なくなる。サーバ情報が何も変わっていないのに,セキュリティ警告が出る場合は,なりすましなどの危険があるので,そういう場合の用心のためにも,この画面は記録しておいた方がいいと思う。
  3. 図4でユーザ名とパスフレーズ,秘密鍵の場所を指定してやると,接続できた(図5)。
図1
図1

図2
図2

図3
図3

図4
図4

図5
図5

 今回の主たる参照先(上記ですでにリンクを貼っているところ以外)。

  1. Red Hat Enterprise Linux 6
  2. 仕事で使える魔法のLAMP
  3. Linuxコマンド百科辞典

「CentOS6の練習-#6(SSHサーバ)。」への2件の返信

もうこの頃からは成長されているかもしれませんが。。
CUIは物凄く柔軟でいいですよww同じく、食わず嫌いしてたのでww

データベースをエクセル(GUI)で扱うか、SQL文(CUI)で扱うかの様な差と思いますよw

通りすがりさん,こんばんは。

いらっしゃいませ。初めまして。

> もうこの頃からは成長されているかもしれませんが。。
そうですね。もう, 2 年たってますから,だいぶましにはなってます(苦笑)。

> 同じく、食わず嫌いしてたのでww
食わず嫌いというよりは,本文にもありますように,「なんか何十年も時代を遡った気分になる」もんですからねぇ。ブラウザも,テキストブラウザに頑固にこだわっていた時代もありますが。

今は, VMWare 上で CentOS6 を弄ってますが, X は入れてます。とはいえ,どうしたって,端末は避けて通れませんね。 CUI でないとできないとか,そのほうが便利ってことも多いですし。

HN からすると,あまりその気はおありでないかもしれませんが,よろしければ,これを機会にちょくちょくおいでください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です