さくらのVPS を改めて使いはじめる 2 – sudo と SSH ポート変更

2012年4月16日 13 開発 , , ,

さくらのVPS(v3) 2GB プランへの環境構築メモ 2。今回は sudo 設定、SSH のポート変更をおこなう。

もくじ

sudo を設定する

サーバーで root 権限が必要になったとき、su コマンドで root になるのは好ましくない。su を実行した場合、明示的にログアウトするまで root が維持されてしまうため、そのままだと通常はアクセスできないファイルなどを操作してしまう可能性があり、非常に危険である。

このような問題への対応として、UNIX 系の OS には sudo コマンドが用意されている。

$ sudo 実行したいコマンド

上記のように指定することで、sudo の後に続けたコマンドを root 権限で実行できる。

sudo の場合、root 権限は一定時間が経つと自動的に失われるため、危険な状態が継続される心配も少ない。さらに実行したコマンドのログが取られるため、root 権限を求めるような重要操作が、いつどのようにおこなわれたのかを後で振り返ることもできる。

というわけで、sudo を設定してみよう。まずはコマンドがインストールされていることを確認する。

$ yum list installed | grep sudo
sudo.x86_64             1.7.4p5-7.el6   @anaconda-CentOS-201112091719.x86_64/6.2

上記のように表示されたら OK。なければ yum install sudo を実行してインストールしておく。

次に、sudo を利用するユーザーを wheel グループに追加する。

wheel とは、root 権限を得られる特別なユーザー グループである。ここにユーザー追加する場合は usermod コマンドを実行する。root 権限が必要なので以下のように実行する。

$ su -
Password:
# usermod -G wheel XXXX

XXXX の部分がユーザー名になる。これで XXXX は wheel に追加されたはず。念のため、id コマンドで所属を確認しておく。下記のように 10(weel) という表記が存在していれば成功。

# id XXXX
uid=500(XXXX) gid=500(XXXX) groups=500(XXXX),10(wheel)

次は、wheel グループに属するユーザに対して sudo コマンドの実行を許可する。root になっている状態で visudo コマンドを実行する。

$ su -
Password:
# visudo

コマンドを実行すると、sudo の設定ファイルを編集するために vi が起動される。その中には、wheel の実行権限がコメントアウトされているので、

## 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 が利用できるようになった。

まだ root になっていると思うので、Ctrl + D を押して root から抜けておくこと。以降、root 権限が必要になった場合は、sudo を通してコマンドを実行するようにする。

コマンドのパスを通す

sudo を通して実行するようなコマンドは、/usr/sbin/usr/local/sbin に置かれていることが多い。

しかし一般ユーザーの場合、これらのディレクトリにパスが通っていないため、コマンド呼び出しにフルパスの指定が必要で、非常に面倒だ。そこで、さきほど sudo を許可したユーザーに対し、パスを通しておく。

まず、ユーザーの HOME に移動して .bash_profile というファイルが存在することを確認する。

$ cd
$ ls -l -a
合計 28
drwx------  3 XXXX XXXX 4096 Apr  1 01:03 .
drwxr-xr-x. 3 root root 4096 Mar 29 23:50 ..
-rw-------  1 XXXX XXXX  354 Apr  1 01:11 .bash_history
-rw-r--r--  1 XXXX XXXX   18 Dec  2 23:27 .bash_logout
-rw-r--r--  1 XXXX XXXX  176 Dec  2 23:27 .bash_profile
-rw-r--r--  1 XXXX XXXX  124 Dec  2 23:27 .bashrc
drwx------  2 XXXX XXXX 4096 Apr  1 01:03 .ssh

次にこのファイルを vi で開く。

$ vi .bash_profile

ファイルを開いたら、以下のようにパス設定を加える。

# User specific environment and startup programs

PATH=$PATH:$HOME/bin
PATH=$PATH:/sbin
PATH=$PATH:/usr/sbin
PATH=$PATH:/usr/local/sbin

4 ~ 6 行目が追加した部分となる。編集が完了したらファイルを保存する。設定は、再ログインするか、以下のコマンドを実行することで反映される。

$ source ~/.bash_profile

SSH のポート変更

sudo を設定できたので、実際に root 権限が必要な操作をおこなってみる。

いままで SSH 接続にポート 22 番を使用してきたが、これは一般的なポートとしてよく知られているため、そのままにしておくと攻撃対象になる。攻撃者は 22 番が空いていることがわかると、ユーザーとパスワードを総当たりで侵入を試みるので、初歩的な対処としてポート番号を変更する。

以下のコマンドで sshd ( SSH デーモン ) の設定ファイルを vi で開く。さっそく sudo の出番がきた。

$ sudo vi /etc/ssh/sshd_config

/etc/ssh の直下には、今回の編集対象となる sshd_config とよく似た ssh_config というファイルがあるので、間違わないように注意する。正しいものは sshd_config である。

ファイルを開くと Port 22 という設定があるので、適当な数値を設定する。値は 0 ~ 65535 を指定できる。攻撃者がポート検索を早々に諦めるよう、あるていど大きな数値にしておくとよい。

#       $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm 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 XXXXX

13 行目が元の設定で、14 行目が新しい値。XXXXX の部分に数値を入れる。この例では元の設定をコメントアウトして残しているが、不要なら消してもよい。

設定してファイルを保存したら、sshd を再起動する。成功すれば、以下のように OK と表示される。

$ sudo /etc/rc.d/init.d/sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]

設定が適切に反映されているならば、TeraTerm や WinSCP などでポート 22 番を指定して SSH 接続するとエラーになるはずである。その場合は、新しいポート番号を指定することで、従来どおり接続できる。

Mac や Linux から SSH コマンドで接続する場合は、以下のようにポート指定する。

$ ssh XXX@YYY.YYY.YYY.YYY -p ZZZZZ

XXX がユーザー名、YYY.YYY.YYY.YYY が接続先の IP アドレス ( またはドメイン )、-p パラメータの ZZZZZ がポート番号の指定となる。いままでは -p を省略するか 22 番にしていたが、今後は新しいポート番号を指定すること。

…今回はここまで。次回は iptables と logwatch などを設定する。


TRACKBACKS

COMMENTS

  • H4tuk0i
    2012年8月21日 11:36 PM 返信

    [root]$ touch /var/log/sudo

    で実行したいところが

    [root]# touch /var/log/sudo

    になってしまいます

    どうしたらいいですか?

  • 2012年8月22日 7:53 AM 返信

    H4tuk0i さん、はじめまして。

    すみません。質問の意図がよく分からないのですが、touch コマンドを実行して sudo のログ出力先を変更したいのでしょうか?

    またその時、ログイン ユーザーで実行したいのに、root で実行されることを問題とされているのでしょうか?

    なお、個人的に sudo のログは標準のままにしておきたい派です。ちょうど次の記事で導入する logwatch が各種プログラムのログを整形して出してくれるので、もし出力を工夫するなら、logwatch 側のスクリプトをいじる方がよいと思います。

  • H4tuk0i
    2012年8月23日 12:57 AM 返信

    すいません

    # と $ の違いについてです・・・mm

  • 2012年8月23日 8:15 AM 返信

    H4tuk0i さん、おはようございます。

    # と $ の違いですが、これはユーザーの権限を表しています。[root] # や [root] $ となっている部分はプロンプトと呼ばれます。

    さくらのVPS 標準の CentOS で採用されている bash というシェルでは、プロンプトの # が root ( スーパー ユーザー )、$ は通常ユーザーとなります。root でログインしている場合は # になります。それ以外のユーザーなら $ です。

    root は万能なので、ちょっとしたミスで重要なファイルを壊してしまう可能性があります。

    そこで root 以外の通常ユーザーを用意して、本当に必要な時だけ root 権限を利用する、というのが前回と今回の記事の主旨となります。

  • H4tuk0i
    2012年8月25日 10:00 AM 返信

    PATH=$PATH:$HOME/bin
    PATH=$PATH:/sbin
    PATH=$PATH:/usr/sbin
    PATH=$PATH:/usr/local/sbin

    編集が完了したらファイルを保存

    どうやってファイル保存すればいいのですか?

  • H4tuk0i
    2012年8月25日 10:08 AM 返信

    すいません
    連投です

    $ sudo vi /etc/ssh/sshd_config
    と入力すると

    ユーザーの名前 is not in the sudoers file. This incident will be reported

    とでるのですが・・・

    どうしたらいいのでしょうか?

  • 2012年8月25日 10:17 AM 返信

    H4tuk0i さん、こんにちは。

    編集に使用している vi というプログラムには、編集とコマンドの 2 種類のモードがあります。ファイルの保存はコマンド モードでおこないます。

    編集モードからコマンド モードに移行するには、キーボードの Esc キーを押します。コマンド モードでは : に続けてコマンドを入力し、Enter キーを押すことで実行されます。編集した内容を保存するコマンド
    は wq となります。

    手順にまとめると以下のようになります。

    1. キーボードの Esc キーを押す
    2. :wq と入力
    3. Enter キーを押す

    vi の詳しい操作方法は、以下のページあたりを参考にしてください。

    viエディタの使い方:
    http://net-newbie.com/linux/commands/vi.html

  • 2012年8月25日 10:38 AM 返信

    sudo 経由でコマンドを実行したとき、

    ユーザー名 is not in the sudoers file. This incident will be reported.

    と表示されるのは、現在のユーザーが sudoers というファイルに設定されていないためです。エラーメッセージそのままですね。

    直前の質問で vi で編集した内容を保存する方法をたずねていることから察するに、この記事で sudoers を編集したものの、それを保存できていないのだと思います。sudoers の内容をご確認ください。

  • maigoofy
    2012年9月11日 3:51 PM 返信

    アカベコさん。こんにちは。maigoofyと申します。私もさくらのVPSを使いたいと思っていたのでとても参考になります。丁寧な説明がとてもわかりやすいです。ありがとうございます。

REPLY

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