サーバを構築する① 〜OSインストールからSSH接続まで〜
会社のお仕事でサーバ構築を依頼されました。これまではサーバをいじるのは何か怖かったので避けてきましたが、そうも言ってられないし、身につけておいて絶対損ではないので、ちょっとがんばってトライしてみることにする。できるようになれば、RAPIROの外部頭脳も構築できるようになるかもしれない。『ガンダム00』のヴェーダみたいなもんです。そう思えばちょっとがんばれる気がするので、人間てのは不思議なものです。
以下、サーバについては完全にド素人なので、体系だった記事を書く事はまず無理です。ということで、本当に自分のメモとして記録していきます。
(3/15追記:少しだけ整理しました)
<OSの選定>
本屋さんでLinuxのサーバ構築の本を探していたらCentOSを使っているものが多かったので、少しだけCentOSについて調べてみる。
CentOSはLinuxでサーバを構築するときによく名前が挙がるディストリビューション。Red Hat Enterprise LinuxのクローンOSで、安定性に優れる。Red Hatを引き継いだものとしてFedoraがあるが、こちらは先進性を追ったOSなので、サーバ構築には向かない。
Web上のリファレンスも多そうなので、とりあえずCentOSでサーバを構築することにする。
<CentOSのインストール>
2年前に頑張って自作したPCを引っ張り出してきて、さっそくCentOSをインストール…しようと思ったら、PCが立ち上がろうしてはすぐ落ちてを繰り返してしまう。PCの中を開けてみたら、CPUのクーラーが半分外れてた。正しく付け直したら安定して動くようになった。
CentOSは最新の6.5のisoファイルを落として来て、Macのディスクユーティリティで焼き込み。買ってきた入門書に付属のCentOS 6.0のディスクではなぜかインストールに失敗したけれど、自分で焼いたディスクならちゃんといけた。
インストールのときの注意事項は、
- 地域選択のときに、「システムクロックでUTCを使用」のチェックを外す。こうしないと、時間が9時間ずれる。
- 今回はサーバ構築が目的なので、インストールタイプは「Basic Server」を選択
とりあえずこれだけ。細かい設定は後でやる。
<ネットワークの接続>
これでとりあえずrootでログインはできるようになるけど、インストールのときになにも細かい設定をしていないので、このままだとネットワークにも繋がらない。ということで、ネットワークの設定をする。編集するのは以下。
- /etc/sysconfig/network … ネッワークの基本設定。以下を記述。
- NETWORKING=yes
- NETWORKING_IPV6=no
- HOSTNAME=xxxx // 自分で決めたホスト名
- GATEWAY=192.168.xxx.1 // 自分の家のルータに合わせる
- /etc/sysconfig/network-scripts/ifcfg-eth0 … NIC の設定。以下を追記。
- ONBOOT=yes
- BOOTPROTO=static
- IPADDR=192.168.xxx.xxx // 自分で決めた固定IPアドレス
- NETMASK=255.255.255.0
- NETWORK=192.168.xxx.0 // 自分の家のルータが構成するネットワークの指定
- /etc/hosts … 名前解決用ファイル。以下を追記したが、書かなくてもいいかも。
- 192.168.xxx.1 router
- 192.168.xxx.xxx ホスト名
- /etc/resolv.conf … 名前解決用のDNSサーバのアドレス設定。ルータのアドレスを指定。
- nameserver 192.168.xxx.1
- /etc/nsswitch.conf … 名前解決の順番指定。”hosts”の部分が次のようになっているか確認。
- hosts: files dns
全部設定できたら、ネットワークの設定を有効にする。
# service network restart
これでとりあえずpingは通った。
<ユーザとグループの設定>
ユーザの追加は、
# useradd [オプション] ユーザ名
実行にはスーパユーザ権限が必要。ユーザが登録されると同時に、ユーザのホームディレクトリが作成される。オプションは基本的に指定する必要はなさそうなので、とりあえず覚えなくてOK。有効期限を設定できたりする。
useraddを実行しただけではパスワードが設定されていないので、アカウントは無効になっている。passwdコマンドでパスワードを設定すると、アカウントが有効になる。
# passwd [オプション] [ユーザ名]
スーパユーザで実行すれば、ユーザ名を指定することで、任意のユーザのパスワードを変えることができる。オプションを使えばパスワードの有効期限を設定することができる。必要に応じて設定するので、今回はパス。
次に、追加したユーザでsudoコマンドを実行できるように設定する。どのユーザも、rootになるためのパスワードさえ知っていれば、ログインした後にsuでrootになれる(ちなみに通常の”su”でrootになると、昇格前のユーザの設定が引き継がれる。”su -” でrootになると、root専用の環境になる)。ただ、これをやると、rootのパスワードを多くのユーザ共有することになったり、rootになるためにrootのパスワードを頻繁に打ち込むことになり、セキュリティ上よろしくない。ということで、root以外のアカウントでも必要に応じてroot権限でコマンドを実行できるように、sudoの設定をする。このときに打ち込むことになるパスワードはそのユーザのパスワードでOKなので、rootのパスワードがネットワーク上を流れるよりは、セキュリティ的にマシになる。つまりイメージとしては、あらかじめrootさんが「userさんは自分のパスワードさえ打ち込んでくれてたら自分(root)と同じ権限で実行してくれていいよ」という設定をしてくれているので、rootパスワードではなく自分のパスワードでOK、ということ。
sudoの設定をするときは、viではなく専用のコマンドを使って設定ファイルを編集する(実際に開くエディタは通常viになるけれど)。
# visudo
これで開くファイル(/etc/sudoers)の末尾に、以下の書式で追記する。
- ユーザ名 コマンドを実行するホスト名=(sudoされるユーザ名) コマンド
もしくは
- %グループ名 コマンドを実行するホスト名=(sudoされるユーザ名) コマンド
今回は、次のように記述する。
- ユーザ名 ALL=(ALL) ALL
これで、「ユーザ名」は、sudoをつけさえすれば、どのホストで実行されるときも、すべてのコマンドに対して、すべてのユーザの権限(つまりroot権限も含む)で実行することができる。
<SSHの設定>
次にSSH(Secure SHell)の設定。これができればクライアントPCからログインできるので、いちいちCentOS用にPCの画面を切り換えなく済む(<-クライアントPCとサーバPCでディスプレイを兼用していたので)。
SSHには2種類ある。
- SSH1 … RSA公開鍵方式
- SSH2 … 元々はDSA公開鍵方式、現在はRSA公開鍵方式も利用可能
SSHによる通信は常にデータの改竄がないかチェックが行われるが、このチェック方式はSSH2の方がより強固な仕組みが採用されているらしいので、基本はSSH2を使用する。RSAとDSAについては、RSAの方が安全性が高いらしいので、『SSH2のRSA公開鍵方式』で環境を作る。
とりあえず、必要なパッケージがインストールされているかを確認。
# yum list installed | grep openssh
必要なもの(openssh, openssh-server, openssh-clients)は入っているよう。
次に、/etc/ssh/sshd_configを次のように編集。
- Portのコメントアウトを外してPort番号を変更
- ポート番号22はwell-known過ぎるので使いたくない
- PermitRootLoginのコメントアウトを外してnoにする
- rootでログインできると危険
- PermitEmptyPasswordsをnoにして有効化。
- とりあえず通常のパスワードでログインできるように
設定が終われば、
# service sshd restart
で、sshを有効にする。ただし、これだけだとPort番号の変更が有効にならない(後で確認したら接続できなかった)。変更する場合は、以下のファイルも変更が必要。
- /etc/sysconfig/iptables
- “-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT”のポード番号部分を変更
- /etc/services
- 直接すぐに影響するわけではないが、今後の混乱を防ぐために、sshのポート番号部分を変更
iptabesはファイアウェールの設定をしていると思えばよい。変更が終わったら、
# /etc/init.d/iptables restart
をやってから、再度sshdをrestart。これで変更後のポート番号で、パスワードでのssh接続ができるようになった。MacのターミナルやLinuxのシェルから接続する場合は、
$ ssh -p ポート番号 ユーザ名@192.168.xxx.xxx"
< セキュリティの設定>
続いて、セキュリティの設定。TCP Wrapperでホストの制限ができるらしいけれど、今回は省略して、とりあえずPAM(Pluggable Authentication Module)の設定だけする。PAMはユーザ認証を行う部分をモジュールとして切り出したもの。以下の順で設定する。
- /etc/pam.d/sshd
- 末尾に”account required pam_access.so”追加。これで、/etc/security/access.confが有効になり、PAMの制御が行えるようになる。
- /etc/security/access.conf
- 末尾に”-:ALL EXCEPT グループ名:ALL”追加。これで、グループのユーザ以外はログイン不可にする。
- /etc/ssh/sshd_config
- “UsePAM=yes”になっているか確認。
/etc/security/access.confに記載したssh用のグループを作っていない場合は、作成する。
# groupadd グループ名 # gpasswd -a ユーザ名 グループ名
ユーザのグループへの追加は、なぜかgpasswdという名前。なお、-dオプションでユーザの削除。
ついでに、suでrootになれるユーザも制限する。まず、rootユーザになれるユーザをwheelグループに所属させる。wheelグループはUNIX系システム上でroot特権を得ることのできるユーザーの属するグループの名称で、改めて作らずともシステムが勝手に作ってくれているよう(一応、less /etc/groupで確認。なければ作る)。
# gpasswd -a ユーザ名 wheel
あとは、PAM認証の設定のため、以下を設定する。
- /etc/pam.d/su
- “auth required pam_wheel.so use_uid”のコメントアウトを外す
- /etc/login.defs
- 末尾に”SU_WHEEL_ONLY yes”を追加
以上で設定完了。ログインユーザでrootになれることは確認。
<SSHの公開鍵暗号方式設定>
最後に、公開鍵暗号方式でSSH接続できるようにする。そのために、まずクライアント側で公開鍵と秘密鍵を作る。公開鍵はデータの暗号化だけを行う鍵で、秘密鍵はデータの復号化だけを行う鍵。自分の環境はMacなので、ターミナルから以下のコマンドで鍵を生成。
$ ssh-keygen -t rsa
これで、SSH2のRSAの公開鍵鍵暗号方式の鍵が作られる。次に、これをサーバにアップロードする。
$ scp -P 設定したポート番号 .ssh/id_rsa.pub ユーザ名@192.168.xxx.xxx:/home/ユーザ名/.
scpのときのポート指定のオプションは”-p”じゃなくて”-P”になることに注意。
次に、サーバ側で以下の操作を実施。
$ mkdir .ssh //ホームフォルダ直下に作成 $ cat id_rsa.pub > /home/ユーザ名/.ssh/authorized_keys //id_ras.pubを移動させて名前を変更してもよいと思う $ chmod 700 .ssh //そのユーザはディレクトリを自由にできるが、それ以外のユーザは見る事も触ることもできない $ chmod 600 .ssh/authorized_keys //そのユーザのみ読み書き可能.それ以外のユーザは操作は一切不可
あとは、”/etc/ssh/sshd_config”を次のように変更
- “PubKeyAuthentication yes”のコメントアウトを外す
- “PasswordAuthentication”をnoに変更
設定できたら、
# service sshd restart
これで再度Macからログインができることを確認。
とりあえずこれでサーバの基本的な立ち上げは出来たと思うので、ここから色々入れていかなきゃいけない。ApacheとかTomcatとか。
ちなみに、今回のサーバ構築は、本屋さんに置いてあった以下の本を参照しながらやりました。
自分のような「Linuxは触ったことあるけれど、サーバ構築についてはド素人」の人間が、大筋「何を設定していけばいいのか」を知るには役立ちます。が、困ったことに、ちょいちょい間違いがあります。設定の一覧と本文中の説明でyesとnoが真逆だったり、コマンドで”service”とすべきところが”server”になっていたりする。よく読めばどちらが正しいかとかはわかりますが、完全なLinuxの初心者にはちょっとおススメしにくいです。あと、付録のDVDに収録されている(らしい)CentOS6.0は、ウチのPCではインストールできませんでした。
ディスカッション
コメント一覧
まだ、コメントがありません