さくらのVPS CentOSでサーバ構築 作業ノート2回目。
まず最初に接続可能なユーザーの設定と制限をします。
rootパスワードの変更
「仮登録完了のお知らせ」メールにも書いてありますが、メールで送られた初期パスワードのままでは危険すぎるので、まずはパスワードを変更しましょう。
[root@ ~]# passwd
Changing password for user root.
New UNIX password: 任意のパスワードを設定
Retype new UNIX password: もう一回入力
passwd: all authentication tokens updated successfully.
新しいパスワードを2回入力すれば変更完了です。
ちなみに後でssh経由でのパスワード認証を無効にしますが、このパスワードはコンソールからの接続で使うので、予測しづらいものがいいと思います。
また、root のパスワードを無効化する方法もあるようですが、コントロールパネルでOSの再インストールする場合に入力できないと面倒なので、ここではちゃんと設定する事にします。
作業ユーザーの作成
UNIX系のOSでは、rootユーザーが全ての権利を持ちます。なんでもできてしまうので、ちょっとしたミスで大事になる可能性があり、日常の作業に使用するのは大変危険です。
なので、通常はある程度の権限を持った管理者アカウントを別に作り、必要な時だけrootを使うのが慣例です。
新しいユーザーを作成するには以下のコマンドを使います。便宜上、ここでは「admin」とします。
[root@ ~]# useradd admin
そしてパスワードを設定します。
[root@ ~]# passwd admin
Changing password for user admin.
New UNIX password: 任意のパスワードを設定
Retype new UNIX password: もう一回入力
passwd: all authentication tokens updated successfully.
新しいパスワードを2回入力すれば設定完了です。
そして「admin」ユーザーを管理者グループに追加します。
[root@ ~]# usermod -G wheel admin
これによって、あとで管理権限を使えるユーザーを制限することができます。
sudoの設定
作業ユーザーでログインした時に、管理者の権限を使う方法としてユーザー変更の su コマンドでroot ユーザーになる方法がありますが、以下のようなセキュリティ上の問題があります。
- rootのパスワードを入力する必要がある。
- 実行したユーザーのログが残らない。
- 権限の範囲が指定できない。
そのため、より安全な sudo コマンドを使う事が推奨されています。
初期状態ではroot以外のユーザーが sudo を実行することができないので、先程設定した wheel グループでsudoができるように設定を変更します。
[root@ ~]# visudo
visudo は vi というテキストエディタでファイルを開くコマンドです。vi はOSに標準でインストールされてるテキストエディタで、慣れないうちは使いづらいですが慣れるとシンプルですし、UNIX系ならほぼインストールされているので、覚えておくと便利です。
詳しい説明はしませんが、次のコマンドだけ知っておくと簡単な編集はできるでしょう。
| 操作 | コマンド |
|---|---|
| 1文字削除 | x |
| 左に文字挿入 | i |
| 右に文字挿入 | a |
| 入力モード終了 | ESC |
| UNDO | u |
| 最終行に移動 | G |
| 保存して終了 | :wq |
| 保存しないで終了 | :q |
ファイル中の下記の部分のコメントアウト文字「#」にカーソル合わせ、 x キーで削除します。
# %wheel ALL=(ALL) ALL
↓
%wheel ALL=(ALL) ALL
そして :wq を入力して保存終了します。これで管理者グループの wheel だけが sudo を使う事が可能になりました。
suの設定
wheel グループが設定されたので、su コマンドもグループ内のユーザーだけが使用できるように設定します。
[root@ ~]# vi /etc/login.defs
先ほどのように vi で設定ファイルが開きます。
そしたら、ファイルの末尾に以下の行を追加して保存してください。
SU_WHEEL_ONLY yes
これで他のユーザは root になれなくなりました。
公開鍵でのログイン
まずはローカルに非公開鍵と公開鍵のペアを作る必要があります。
今まで「ターミナル」使ってサーバにログインして作業していましたが、鍵ペアを作るためにはローカルで作業する必要があるため、一度ログアウトします。
[root@ ~]# exit
Connection to XXX.XXX.XXX.XXX closed.
local:~ name$
これでローカルに戻ったので、続いて鍵ペアの作成コマンドを実行します。
$ ssh-keygen -t rsa
Enter file in which to save the key (/Users/name/.ssh/id_rsa): Enter
Enter passphrase (empty for no passphrase): 任意のパスフレーズを設定
Enter same passphrase again: もう一回入力
これで、 ~/.ssh/ に id_rsa と id_rsa.pub が生成されます。
id_rsa.pub の内容が公開鍵ですが、Finderからは見えないので、viコマンドでファイルを開きます。
$ vi ~/.ssh/id_rsa.pub
内容をコピーしたら、:q コマンドで保存せずに vi を終了します。
公開鍵の登録
続いて公開鍵をサーバに登録するため、「admin」ユーザーとしてログインします。
$ ssh admin@XXX.XXX.XXX.XXX
USERNAMEのホームディレクトリの直下に .ssh ディレクトリを作成して、自分だけ読み書き可能に設定します。
[admin@ ~]$ cd $HOME
[admin@ ~]$ mkdir .ssh
[admin@ ~]$ chmod 700 .ssh
vi コマンドで、authorized_keys ファイルを作成して、先ほどコピーした公開鍵をペーストして保存します。
[admin@ ~]$ vi .ssh/authorized_keys
他のユーザーに見られない為に公開鍵ファイルのパーミッションを変更します。
[admin@ ~]$ chmod 600 .ssh/authorized_keys
これで公開鍵でのログイン設定が完了しました。
最後にrootでのログインとパスワードによるログインを禁止するため、/etc/ssh/sshd_config を編集します。sshd_config ファイルのオーナーは root の為、sudo で実行します。
[admin@ ~]$ sudo vi /etc/ssh/sshd_config
sudo 初回起動時は説明が表示されたあとにパスワードを聞いてきます。
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 admin: adminユーザーのパスワードを入力
viに入ったら、下記項目のコメントを外して yes を no に変更します。項目の詳しい説明は 日本語マニュアルをどうぞ
#PermitRootLogin yes
↓
PermitRootLogin no
#PasswordAuthentication yes
↓
PasswordAuthentication no
UsePAM yes
↓
UsePAM no
SSHを再起動します。
[admin@ ~]$ sudo /etc/init.d/sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
これで、リモートコンソールからと、秘密鍵を持ったPCから作業ユーザーでログインすることしかできなくなりました。
コマンドのパス設定
admin ユーザーでログインした状態でシステム系のコマンドを簡単に実行する為に、バイナリファイルへのパスを設定します。
[admin@ ~]$ vi ~/.bash_profile
PATH=$PATH:$HOME/bin
↓ 上記の下に以下を追加
PATH=$PATH:/sbin
PATH=$PATH:/usr/sbin
PATH=$PATH:/usr/local/sbin
パス設定を反映させます。
[admin@ ~]$ source ~/.bash_profile
root宛メールの転送
いろいろなサービスを起動すると、root宛にメールが送られるようになります。rootでログインして
[root@ ~]# mail
で確認してもいいのですが、rootでのログインを減らす為にも、普段使用しているメールに転送すると楽です。
まず、旧root宛メール転送設定を削除し、
[root@ ~]# sed -i '/^root:/d' /etc/aliases
普段使用しているメールアドレス(例:xxx@xxx.com)宛に転送設定し、
[root@ ~]# echo "root: xxx@xxx.com" >> /etc/aliases
転送設定を反映させます。
[root@ ~]# newaliases
最後にroot宛にテストメールを送信します
[root@ ~]# echo test|mail root
テストメールが転送先に届いていれば完了です。
※ さくらのVPSの場合、試用期間中は外部へのメール送信はできないので、本契約後に確認しましょう。
参考
今日のハマりポイント
- PAM は Pluggable Authentication Modules の略で、様々なアプリケーションから利用可能なパスワード認証モジュールの事。「ChallengeResponseAuthentication yes」だと、鍵認証が失敗した時にPAMのパスワード認証が有効になってしまう。