アカベコマイリ

HEAR NOTHING SEE NOTHING SAY NOTHING

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

さくらの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 を利用できるようになった。

ここままでの作業では su で 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。デーモンの d がつく。

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 番にしていたが今後は新しいポート番号を指定すること。

...今回はここまで。次回は iptableslogwatch などを設定する。

Comments from WordPress

  • H4tuk0i 2012-08-21T14:36:54Z

    [root]$ touch /var/log/sudo

    で実行したいところが

    [root]# touch /var/log/sudo

    になってしまいます
    どうしたらいいですか?

  • akabeko akabeko 2012-08-21T22:53:26Z

    H4tuk0i さん、はじめまして。

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

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

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

  • H4tuk0i 2012-08-22T15:57:29Z

    すいません

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

  • akabeko akabeko 2012-08-22T23:15:49Z

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

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

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

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

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

  • H4tuk0i 2012-08-25T01:00:35Z

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

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

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

  • H4tuk0i 2012-08-25T01:08:17Z

    すいません
    連投です

    $ sudo vi /etc/ssh/sshd_config

    と入力すると

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

    とでるのですが・・・

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

  • akabeko akabeko 2012-08-25T01:17:22Z

    H4tuk0i さん、こんにちは。

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

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

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

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

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

  • akabeko akabeko 2012-08-25T01:38:12Z

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

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

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

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

  • maigoofy 2012-09-11T06:51:36Z

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