nginxのページをbasic認証にする

apachebasic認証では以下二つの作業がありました。

  1. .htpasswdファイルの作成
  2. apacheの設定ファイルを編集

今回は同じ.htpasswdファイルを使うので、実質的にはnginx設定ファイルの編集のみです。

目次

  • 参考にしたページ
  • nginxの設定ファイルを編集する

nginxの設定ファイルを編集する

$ sudo vim /etc/nginx/conf.d/default.conf

一つ目の参考リンクには『設定ファイル(/etc/nginx/nginx.conf)を編集します』とあります。
しかし、僕は今回『nginx.conf』ではうまくいかず、『default.conf』を編集しました。
『default.conf』の初期全文は以下になります。
(◆マークは僕が改行追記しました)

#
# The default server
#
server {
    listen       80;
    server_name  _;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
◆
◆
    }
    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

上の◆マークがついているところに、以下の二行を挿入します。

        auth_basic    "Shinchan Basic Authentication nginx version"; 
        auth_basic_user_file  "/etc/httpd/.htpasswd"; 

一行目は、basic認証ダイアログに出てくる名前ですね。
二行目は、.htpasswdファイルのパスです。apacheの回に作成したファイルですね。
以上で保存します。
設定を再読み込みします。

$ sudo /etc/rc.d/init.d/nginx reload
nginx を再読み込み中:                                      [  OK  ]

設定ファイルの編集でミスがあれば、ここでエラーが出ます。
OKであれば、ブラウザのページを更新してみましょうb
以上です。お疲れさまでした!

nginxをインストールしてテストページを表示する

目次

  • 参考にしたページ
  • インストール
  • テストページの表示

インストール

yumコマンドでインストールすればいいと思っていましたが、参考ページではrpmコマンドを使って最新版のレポジトリをどうにかしているようです。
yumコマンドとrpmコマンドの違いを調べていましたが、よく分かりませんでした。

元々はrpmがあって、その上にyumが登場した感じは分かります。
ということで、今回は最初からyumコマンドでのインストールを試みました。

$ yum install nginx

インストール後にバージョンを確認しておきます。

$ nginx -v
nginx version: nginx/1.0.15

テストページの表示

それではapacheを停止させ、nginxを起動します。

$ /etc/init.d/httpd stop
httpd を停止中:                                             [  OK  ]
$ /etc/init.d/nginx start
nginx を起動中:                                            [  OK  ]

この段階でブラウザからIPアドレスにアクセスすると、テストページが表示されるはずです。
お疲れさまでした!
そういえば、apacheのウェブサイトのデフォルトディレクトリには何もなかったですが、

$ pwd
/var/www/html
$ ls -a
.  ..  index.html

(index.htmlは後で用意しました)
nginxのデフォルトディレクトリにはいろいろ入っていました。

$ pwd
/usr/share/nginx/html
$ ls -a
.  ..  404.html  50x.html  index.html  nginx-logo.png  poweredby.png

inde.htmlはテストページです。
うーん。

テストページを表示してbasic認証をかけてみる

前回までで、Apacheをインストールして起動させました。
現在、さくらVPSを契約してもらったIPアドレスにアクセスすると、Apacheのテストページが表示されます。
今回は、インデックスページを表示させて、basic認証をかけます。

目次

  • 参考にしたページ
  • インデックスページを表示させる
  • basic認証をかける

インデックスページを表示させる

サーバーにログインして、/var/www/html/に新規で『index.html』を作成します。
こんな感じにしました。

<!DOCTYPE html>
<html lang="ja">
<head>
        <meta charset="utf-8">
        <title>Hello Shinchan World!</title>
</head>
<body>
        <h1>Hello Shinchan World!</h1>
</body>
</html>

ページを作ったら、ブラウザで更新すれば新しいページが表示されるはずです。
簡単ですね。

basic認証をかける

.htpasswdファイルを作成

『htpasswd』コマンドを使います。
『******』には、作成するユーザー名を入れてください。

# htpasswd -c /etc/httpd/.htpasswd ******
New password:
Re-type new password:
Adding password for user ******
Apacheの設定ファイルを変更する

httpd_conf』を編集しましょう。
『sudo vim/etc/httpd/conf/httpd.conf』ですね。
以下を追記します。AuthNameの部分は英数字がいいですよb


    AuthType Basic
    AuthName "Shinchan Basic Authentication"
    AuthUserFile /etc/httpd/.htpasswd
    Require user ******

追記できたら作業は完了です。
Apacheを再起動しましょう。

# service httpd restart

ブラウザを更新すると、basic認証ダイアログが出てくるはずです。
お疲れさまでした!

Apacheをインストールして設定した

目次

  • 参考にしたページ
  • インストール
  • 不要モジュールの無効化はスキップ
  • Apacheを起動
  • 自動起動の設定

インストール

$ sudo yum -y install httpd

今回はこういうバージョンでした。

$ httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Feb 13 2012 22:31:42

初期設定

まず設定ファイルのバックアップをとります。

$ sudo cp /etc/httpd/conf/httpd.conf $HOME

僕はこのやり方でやったんですが、後で下のケースの方が良いなと思いました。

$ cd
$ mkdir backup
$ sudo cp /etc/httpd/conf/httpd.conf ./backup

では設定ファイルを編集します。

$ sudo vim /etc/httpd/conf/httpd.conf

変更した部分だけ挙げていきます。

Web サーバーにアクセスしたクライアントに返す情報を変更

44行目付近。
vimで指定行に移動する場合は、編集モードで『44G』と入力します。

#
# Don't give away too much information about all the subcomponents
# we are running.  Comment out this line if you don't mind remote sites
# finding out what major optional modules you are running
ServerTokens OS

『OS』となっているところを『Prod』と書き換えます。
理由をまるまる引用します。

初期状態では ServerTokens OS、つまり OS 情報を表示するようになっている。この情報が詳細なほど、攻撃者にサーバー構成のヒントを与えることになる。
Prod を指定すれば、HTTP のレスポンスヘッダには Server: Apache だけ返すようになるので、これを設定しておく。

http://akabeko.me/blog/2012/04/revps-04-apache/
オプション設定

331行目付近。

# The Options directive is both complicated and important.  Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks

『Indexes』の前にハイフンをつけます。

初期状態では Indexes が設定されている。そのため、アクセスされたディレクトリ内に DirectoryIndex で設定されたファイル ( index.htm と index.html ) が見つからない場合、ファイル一覧ページが自動生成される。
これはセキュリティ的によろしくない ( 構成情報を広く公開してしまう )

http://akabeko.me/blog/2012/04/revps-04-apache/
エラーページなどに出力されるサーバー情報を変更
#
# Optionally add a line containing the server version and virtual host
# name to server-generated pages (internal error documents, FTP directory
# listings, mod_status and mod_info output etc., but not CGI generated
# documents or custom error documents).
# Set to "EMail" to also include a mailto: link to the ServerAdmin.
# Set to one of:  On | Off | EMail
#
ServerSignature On

『On』を『Off』に切り替えます。

設定の確認
$ sudo apachectl configtest
Syntax OK

不要モジュールの無効化はスキップ

ここは今回スキップしました。

Apacheを起動

Apacheを起動します。

$ sudo service httpd start

『OK』と表示されるはずです。
ブラウザに『http://IPアドレス』を打ち込んでみましょう。
テストページが表示されます。

自動起動の設定

OSが起動したときに、Apacheも自動起動するように設定します。

$ chkconfig --list httpd
httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off

現在はオフになっています。

『chkconfig』というコマンドで設定します。

$ sudo chkconfig httpd on
$ chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

参照ページの説明はまだ余り理解できなかった…

お疲れさまです!
次はbasic認証をログするつもりです。

sudoコマンドの設定とSSHポートの変更をした

目次

  • 参考にしたページ
  • sudoの設定
    • コマンドがインストールされていることを確認
    • 作業ユーザーをroot権限を得られるグループに追加する
    • wheelグループにsudoを許可する
    • パスを通す
  • SSHポートの変更

sudoの設定

僕が初めて触れたLinuxディストリビューションUbuntuでした。
そのとき、sudoコマンドは初めから使えました。
CentOSはさくらVPSで初めて触れますが、今回はそのsudoの設定からしないといけないみたいですね。
前回、作業ユーザーがroot権限を使う場合には、『su』を入力してrootになると知りました。
root権限の作業を終えたら、『exit』で作業ユーザーに戻ります。
ですが、この形だと作業ユーザーに戻るまでroot状態が続き、危険です。
『sudo』コマンドは、コマンドの頭に『sudo』を据えると、一つのコマンドに限りroot権限となるので、比較的安心です。

コマンドがインストールされていることを確認
$ yum list installed | grep sudo
sudo.x86_64          1.7.4p5-12.el6_3   @updates   

grep』が検索のコマンドみたいですね。
『@updates』となっていて参照ページと表示が違いますが、インストールされているものとして先に進みます。

作業ユーザーにroot権限を得られるグループに追加する
$ su -
Password:
# usermod -G wheel ******(作業ユーザー名)

『su』でrootになる。
『usermod -G wheel (作業ユーザー名)』で、作業ユーザーをsudoが使えるグループに追加する。
ちなみに、コマンドを打つ行の左端が『$』となっているのが作業ユーザー、『#』となっているのがrootだと知りました。

rootのままidコマンドを使うと、ユーザーの権限がどうなっているか確認できます。

# id ******(作業ユーザー名)
uid=500(******) gid=500(******) groups=500(******),10(wheel)
wheelグループにsudoを許可する

『visudo』でエディタを起動する。

## Allows people in group wheel to run all commands
# %wheel  ALL=(ALL)       ALL

上の部分を、下の用にコメントアウトを外す。

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
パスを通す

上の作業でsudoが使えるようになるようですが、そのままだとフルパスが必要なようです。
ホームディレクトリにある/.bash_profileを編集します。

# User specific environment and startup programs
 
PATH=$PATH:$HOME/bin
PATH=$PATH:/sbin
PATH=$PATH:/usr/sbin
PATH=$PATH:/usr/local/sbin

この部分の、下部三行を追記します。
その後、『source ~/.bash_profile』コマンドで反映させます。

これでsudoが使えるようになった〜ひゃっほ〜

SSHポートの変更

SSHポートはデフォルトでは22に設定されています。
前回、公開鍵認証の作業の際、ローカルの/.ssh/configを設定するときに、出てきましたね。
この番号を変えます。さっそくsudoを使いましょう。
『sudo vim /etc/ssh/sshd_config』

#       $OpenBSD: sshd_config,v 1.73 2005/12/06 22:38:28 reyk Exp $
 
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
 
# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin
 
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options change a
# default value.
 
#Port 22
Port *******

この部分ですね。値は 0 〜 65535 を指定できるみたいです。
設定したら、sshデーモンを再起動します。
『sudo /etc/rc.d/init.d/sshd restart』

あと、公開鍵認証に関して、ローカルにあるconfigも編集しておかないと、入れなくなります。
ローカルのホームから/.ssh/にあるconfigでしたね。

Host sakuranewuser(sshを入力する時に使う名前)
	HostName ***.***.***.***(サーバーのIPアドレス)
	User newuser(サーバーの作業ユーザー名)
	Port *****(ここを変えます)
	IdentityFile ********(秘密鍵のパス)

以上っ!

さくらのVPS(1G)を契約し公開鍵認証を設定した

さくらのVPS(1G)を契約しました。
これから活用していければいいなと思います。
このエントリは、契約後にした公開鍵認証の作業ログです。
もうかなり忘れている…
これだけ見ると分からないと思うので、参考リンクも同時に目を通してください。

目次

  • 参考にしたページ
  • ローカルとサーバーの環境
  • サーバーの起動
  • rootパスワードの変更
  • 作業用ユーザーの作成
  • 公開鍵認証の設定
  • SSHログイン設定で公開鍵認証以外禁止

ローカルとサーバーの環境

サーバーの起動

コントロールパネルから、サーバーを起動させます。
さくらインターネットVPSコントロールパネル
『仮想サーバ操作』という欄の右にある、起動ボタンを押します。
一つ上の『ステータス』の更新ボタンを押し、右に『稼働中』と表示されればOKです。

rootパスワードの変更や作業用ユーザーの作成

サーバーにログインします。
以下のような形でさくらから送られたメールに情報が乗っています。
そこに記載されているIPアドレスを利用します。
ターミナルを立ち上げ、『ssh root@(IPアドレス)』と入力します。

《VPSコントロールパネル ログイン情報》

  VPSコントロールパネルでは、仮想サーバのリセットやリモート
  コンソールでの接続、OSの再インストールなどを行うことができます。

     URL       : https://secure.sakura.ad.jp/vpscontrol/
     IPアドレス: *********
     パスワード: **********

入力後にパスワードを求められます。
これでログインできるはずです。

rootパスワードの変更

rootのパスワードはメールに記載された初期のものですが、これを変更します。
『passwd』コマンドを使います。

# passwd
Changing password for user root.
New UNIX password:
Retype new UNIX password:
(ここで辞書的な単語を入力すると『Bad Password〜』と出ることがありますが、進めることはできます)
passwd: all authentication tokens updated successfully.

これでrootのパスワードが変わりました。
次に、新しく作業用ユーザーを作成します。
これから、通常は作業用ユーザーを使うことになります。
rootユーザーは権限が強すぎるので、深刻な作業ミスが起きるのを防ぐためです。
では『adduser』コマンドを使います。

# useradd testuser
# passwd testuser
Changing password for user testuser.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

これで新ユーザーの作成と、パスワードの設定ができます。
この段階で、ターミナルから『ssh testuser@ip (-p 22)』というログインができるようになるかと思います。
『-p 22』はポート番号の指定です。
今回は前回同様、指定しなくてもログインできます。
しかしこのデフォルトのポート番号は今後変更するため、ポート指定のログイン方法を知っておきます。

公開鍵認証の設定

これまでのログイン方法(パスワード認証)だとセキュリティが弱いため、新しい認証方式を設定します。
ここなんですが、今回は以前作成した鍵を利用したので、鍵の作成自体は飛ばします。
よって、既に以下の二つがあることにします。
 公開鍵 … id_rsa.pub
 秘密鍵 … id_rsa

このうち、公開鍵をサーバーの作業用ユーザーの/.ssh/に置きます。
ディレクトリは無いと思うので作成し、ファイル名は『authorized_keys』として置きます。
その後、.sshディレクトリのパーミッションを『chmod 700』に、authorized_keysファイルは、『chmod 600』に変更します。
もう一つの秘密鍵は、ローカル端末の/.ssh/の中に置きます。

今回、この公開鍵を移してパーミッションを変更する作業を、作業ユーザーではなくrootでやってしまった可能性があります…
しかも、『rootで作業ユーザーのディレクトリに移した』というちょっと面倒くさい感じの…
ですが、その辺りでやっと、rootと他のユーザーの関係、ディレクトリの関係が分かってきました。
気をつけます。

次に、ローカルの/.ssh/に新規ファイルでconfigを用意します。

Host sakuranewuser(sshを入力する時に使う名前)
	HostName ***.***.***.***(サーバーのIPアドレス)
	User newuser(サーバーの作業ユーザー名)
	Port *****(デフォルトなら22。しかし変更が望ましい)
	IdentityFile ********(秘密鍵のパス)

こう入力し保存します。
すると、『ssh sakuranewuser』と入力するだけで、サーバーにログインできます。
これが公開鍵認証です。
この確認をしないまま下の作業をすると、サーバーに入れなくなる可能性があります。

SSHログイン設定で公開鍵認証以外禁止

『rootでのログイン』や、他のユーザーでのパスワード認証を禁止します。
SSHの設定変更には、管理者権限が必要です。
公開鍵認証すると、作業ユーザーになっているはずです。
『su』コマンドでrootになり、sshd_configファイルを編集します。
(『exit』で作業ユーザーに戻れます)
vim /etc/ssh/sshd_config』

  • PermitRootLogin ( root のログイン ) をnoにします。
  • PasswordAuthentication ( パスワード認証 ) を no にします。

編集し保存をしたら、SSHデーモンを再起動します。
『service sshd restart』

この段階で、rootでのログインや、他のユーザーでもパスワード認証などができなくなります。
ssh root@ip』や『ssh 作業ユーザー@ip』などの、これまでのパスワード認証ですね。
公開鍵認証を確認していないと、サーバーにログインできなくなる可能性があります。

  • 公開鍵認証可能を事前に確認しておく
  • サーバーにログインしているターミナルは残したまま、別のターミナルで公開鍵認証を試してみる
  • 上に失敗したら、ログインしているターミナルで、一度パスワード認証を可能に戻し、公開鍵認証をやり直す

などいずれかの注意が必要です。
ここは特に問題なくできました。
「ここで失敗するとログインできなくなるな」というのは直感できました。

以上です。お疲れ様でした。

次回以降は、sudoの設定や、apacheのインストールとhtml表示、basic認証などの作業ログを書くつもりです。