tasukentのブログ

Objective-c、PHP、Javaとか色々試してアウトプットしていきます。

サーバーを手に入れたらやるべき5つの初期設定

今回はAPIを作るために、新しくサーバーを立てたので、初めにやるべき初期設定を備忘録としてまとめます。 ミドルウェア等を入れる前のホントの初期設定です。

環境

  • OS:CentOS 6.6 64bit
  • メモリ:512MB
  • CPU:1vCPU

1. rootユーザのパスワード設定

デフォルトはrootにパスワードが設定されていないので今後のためにパスワードを設定します。 passwdコマンドのあとに引数を付けなければrootユーザのパスワードを設定できます。

# passwd
ユーザ root のパスワードを変更。
新しいパスワード:<ここにパスワード>
新しいパスワードを再入力してください:<ここに再度パスワード>
passwd: 全ての認証トークンが正しく更新できました。

2. 新規ユーザの作成

ユーザ作成時のデフォルト設定確認

useraddコマンドに -Dオプションを付ける事でデフォルトの設定を確認できます。

# useradd -D 
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

それぞれの設定項目の説明は以下の通り

設定 説明
GROUP グループIDを100に設定する。Red Hatディストリビューションの場合、 500 から順番に与えられる。
HOME デフォルトのホームディレクトリの場所。この場合、「 /home/ユーザ名 」でホームディレクトリが作成される。
INACTIVE パスワードが無効になった後、そのユーザのアカウントが無効になるまでの期限。「 -1 」は無期限
EXPIRE ユーザアカウントの有効期限。値が無い場合は無期限を意味する
SHELL デフォルトのログインシェル
SKEL 新規ユーザーのホームディレクトリのテンプレート。この場合/etc/skel のコピーが新規ユーザのホームディレクトリに作成される

ユーザを作成して確認する

# useradd <新規作成するユーザ名>
# id -a <新規作成したユーザ名>
uid=500(<新規作成したユーザ名>) gid=500(<新規作成したユーザ名>) 所属グループ=500(<新規作成したユーザ名>)

新規ユーザのパスワード設定

# passwd <新規作成したユーザ名>
ユーザー <新規作成したユーザ名> のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: 全ての認証トークンが正しく更新できました。

wheelグループに追加

ユーザの作成が完了したので追加したユーザの権限を設定する

# usermod -G wheel <新規作成したユーザ名>

sudo許可設定

コレまでの設定で新規ユーザに切り替えて以下のコマンドを打つと

$ sudo ls

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for <新規作成したユーザ> : <新規作成したユーザのパスワード> 
<新規作成したユーザ> は sudoers ファイル内にありません。この事象は記録・報告されます。

ものすごくドキッとするメッセージが返却されます。メッセージ通り、新規に作成したユーザはsudoの権限を持っていません。 なので、sudo権限を付けてあげます。設定するときはvisudoコマンドを使用します。 vi sudo ではなく、visudoです。 visudoコマンドで編集すると保存時にSytaxCheckをしてくれるので、まさかの事態に陥らずに済みます。

# visudo 
## Allows people in group wheel to run all commands
# %wheel ALL=(ALL)       ALL 
# ↑のコメントアウトを外す↓
%wheel ALL=(ALL)       ALL

確認設定画完了したらもう一度sudoを使ってみると、ドキッとするメッセージは表示されません。

$ sudo ls 
bin  boot  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
coffee break①〜そもそもwheelってなに?

WheelグループはSUコマンドでアクセスできるUnixSystemへのコントロール権限をもつスーパーユーザグループのこと。[big wheel]で大物、勢力家、重鎮だとかの意味なのでそれが由来らしいです。新規ユーザを追加したらwheelグループに追加する事で『大物=su権限』を持つ”者”にできるわけですね。 ejje.weblio.jp

3. 公開鍵認証を使って新規ユーザでログインできるようにする

.sshディレクトリ作成

上記まででユーザの設定が完了したのでmacなどのクライアントから新規作成したユーザで接続できるように設定していきます。新規ユーザのホームディレクトリに移動します。デフォルトの設定で作成した場合パスは以下になります。

# pwd
/home/<新規ユーザ名>

上記のディレクト配下に.sshディレクトリを作成してパーミッションを700に設定します。

# mkdir .ssh/
# chmod 700 .ssh/
# ls -la 

公開鍵を配置する

私が利用しているクラウドサービスは初期接続がすでに鍵認証方式のみで、サーバー作成時に公開鍵が設置されます。 秘密鍵は手元にあるものを使い、サーバ側に配置している公開鍵を新規に作成したユーザが使えるように配置します。 サーバー側の公開鍵は以下のディレクトリに配置されていたので、それをコピーして所有者をrootから新規作成したユーザに変更します。

# cp ~/.ssh/authorized_keys /home/<新規作成したユーザ名>/.ssh/
# chown <新規作成したユーザ名> /home/<新規作成したユーザ名>/.ssh/

クライアント側(mac)から接続確認

.ssh/configに設定してもいいですし、コマンドラインで頑張るのもいいと思います。 自分は~/.ssh/configに書きます。

Host <ホスト名をお好きに ():hogehoge >
    Hostname <サーバーのIPアドレスを記述>
    port 22 
    User <新規作成したユーザ> 
    IdentityFile <秘密鍵のフルパス記載>

新規にターミナルを開いて新規に作成したユーザで接続できるか確認する

$ ssh hogehoge 
[<新規作成したユーザ名>@localhost ~]$ 

上記で接続完了。

4.セキュリティを強化する

やるべきこととしては、①rootでのログインを禁止する、②ポートを変更する だけです。パスワード認証はデフォルトで拒否しているので。(してない方は/etc/ssh/sshd_configのPasswordAuthentication noにしてあげてください。※公開鍵でログインできる事が前提です)

rootでのログインを禁止する

rootはユーザ名を必要とせずログインできるので秘密鍵が漏れた際に侵入される危険性が高まります。なので、rootでのログインを禁止します。設定は/etc/ssh/sshd_configに記載されいるので、バックアップを作成後、編集します。 クラウドサービスの場合、デフォルトの設定が弄られていることが多いですが、私の場合以下の様な設定になっていました。

# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       ForceCommand cvs server
PermitRootLogin without-password

以下に変更します。

# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       ForceCommand cvs server
PermitRootLogin no

設定を保存したら、デーモンを再起動させ、設定を反映させます。

# service sshd restart 
sshd を停止中:                                             [  OK  ]
sshd を起動中:                                             [  OK  ]

問題なく再起動できたら、mac等の別ターミナルを開いて『rootでログイン出来ないこと』と『新規作成ユーザでログインできる』ことを確認します。この時サーバーに接続しているターミナルは閉じない方が良いです。新規ユーザで接続出来なかったらrootでもログイン出来ないので。

#以下は接続出来ない。
$ ssh root@hogehoge

#以下は接続できる
$ ssh hogehoge

PermitRootLoginの設定値について

設定 設定値 概要
PermitRootLogin no rootでのログインを禁止する
PermitRootLogin yes rootでのログインを許可する
PermitRootLogin without-password パスワード認証以外でのrootでのログインを禁止する
PermitRootLogin forced-commands-only コマンドオプションが指定されたときのみ、公開鍵認証によるrootでのログインを許可
coffee break②〜sshdや、httpdの"d"ってなに?

httpdは[HyperText Transfer Protocol Daemon]の略で、sshd[Secure Shell daemon]の略なので、DはDaemonのDですね。

デーモン (Daemon) は、UNIXなどのマルチタスクオペレーティングシステム (OS) においてバックグラウンドプロセスとして動作するプログラムを意味する。 ユーザーが直接対話的に制御するプログラムではない。 典型的なデーモンは名前の最後尾に "d" が付く。 例えば、syslogd はシステムログを扱うデーモン、sshd は外からのSSH接続要求を受け付けるデーモンである。

sshのPortを変更する

新規ユーザからの接続が確認できたら、最後にポート番号22番から適当なポートに変更し再起動します。 FWをクラウドサービスで提供されているものを使っている場合、Webコンソールから設定したポートを開ける必要があります。 もちろん、クライアント側の.ssh/configを設定していたらProtの部分を書き換えることもお忘れなく。

#vim /etc/ssh/sshd_config

# Port 22 
Port <適当なポート番号>
# service sshd restart 
sshd を停止中:                                             [  OK  ]
sshd を起動中:                                             [  OK  ]

その他

FWの設定は必須です。必要なポートだけ開けましょう。

5. ホスト名を変更する

初期状態だとターミナルには以下のように表示されていると思います。

[<ユーザ名>@localhost <ディレクトリ>]

これだとターミナルを複数立ち上げて複数のサーバーで作業する際にどのサーバーで作業しているかわからなくなるので変更してあげます。

$ sudo vim /etc/sysconfig/network

NETWORKING=yes
#HOSTNAME=localhost.localdomain
HOSTNAME=<好きなホスト名>.localdomain

編集が完了したらサーバーを再起動して設定を反映させます。

$ sudo reboot 

1分位で再起動が完了するので、接続すると

[<ユーザ名>@<設定したホスト名> <ディレクトリ>]

となっていると思います。

以上で初期設定は完了です! こんなこと設定したほうが良いよ!などありましたら教えて下さい。

参考

kazmax.zpp.jp

changineer.info

Wheel (Unix term) - Wikipedia, the free encyclopedia

sshd の設定(sshd_config)