さくらの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 番にしていたが今後は新しいポート番号を指定すること。
...今回はここまで。次回は iptables
と logwatch
などを設定する。
Comments from WordPress
- H4tuk0i 2012-08-21T14:36:54Z
[root]$ touch /var/log/sudo
で実行したいところが
[root]# touch /var/log/sudo
になってしまいます
どうしたらいいですか? - akabeko 2012-08-21T22:53:26Z
H4tuk0i さん、はじめまして。
すみません。質問の意図がよく分からないのですが、touch コマンドを実行して sudo のログ出力先を変更したいのでしょうか?
またその時、ログイン ユーザーで実行したいのに、root で実行されることを問題とされているのでしょうか?
なお、個人的に sudo のログは標準のままにしておきたい派です。ちょうど次の記事で導入する logwatch が各種プログラムのログを整形して出してくれるので、もし出力を工夫するなら、logwatch 側のスクリプトをいじる方がよいと思います。
- H4tuk0i 2012-08-22T15:57:29Z
すいません
# と $ の違いについてです・・・mm
- 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 2012-08-25T01:17:22Z
H4tuk0i さん、こんにちは。
編集に使用している vi というプログラムには、編集とコマンドの 2 種類のモードがあります。ファイルの保存はコマンド モードでおこないます。
編集モードからコマンド モードに移行するには、キーボードの Esc キーを押します。コマンド モードでは
:
に続けてコマンドを入力し、Enter キーを押すことで実行されます。編集した内容を保存するコマンドはwq
となります。手順にまとめると以下のようになります。- キーボードの Esc キーを押す
- :wq と入力
- Enter キーを押す
vi の詳しい操作方法は、以下のページあたりを参考にしてください。
viエディタの使い方:
http://net-newbie.com/linux/commands/vi.html - 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を使いたいと思っていたのでとても参考になります。丁寧な説明がとてもわかりやすいです。ありがとうございます。