3月 102011
 
シェアする

ServersMan@VPS SSH rootログインを制限する

で紹介したとおり、ServersManのVPSはなぜか知らないが、/tmp/配下にルートのパスワードがある。
おしゃれな名前の「/tmp/sminitpass」。ServersMan Initial Password の略だろうか。

ServersMan@VPSのサーバをEntry×1、Standard×2で利用しているんだが、Entry×1は検証用な訳で。
今日は初期化をしてみた。初期化もボタンぽちぽちと押すだけで出来てしまうのでとてもドキドキする。

さて、初期化が完了したようです。/tmp/sminitpassの確認を行ないましょう。

1. rootログインし、/tmp/sminitpass を確認します。

/tmp/sminitpassを確認
# ls -la /tmp/sminitpass
-rw-r--r-- 1 root root 9 Mar 10 16:32 /tmp/sminitpass
#
/tmp/sminitpassの中身を確認
# cat /tmp/sminitpass パスワード
#

2. rootユーザで一般ユーザを追加します。

新規ユーザを作成
# useradd testboy #
新規ユーザのパスワード設定
# passwd testboy
Changing password for user testboy.
New UNIX password: パスワード入力(不可視)
Retype new UNIX password: パスワード入力(不可視)
passwd: all authentication tokens updated successfully.
#
作成したユーザの情報を確認
# finger -l testboy
Login: testboy                          Name: (null)
Directory: /home/testboy                Shell: /bin/bash
Never logged in.
No mail.
No Plan.
#
作成したユーザのgroupを確認
# id testboy
uid=500(testboy) gid=500(testboy) groups=500(testboy)
#

3. 追加したユーザでSSHログインし、/tmp/sminitpass を確認出来るか確認します。

現在のユーザを表示
$ whoami
testboy
$
/tmp/sminitpassを確認
$ ls -la /tmp/sminitpass
-rw-r--r-- 1 root root 9 Mar 10 16:32 /tmp/sminitpass
$
/tmp/sminitpassの中身を確認
$ cat /tmp/sminitpass
パスワード
$

4. 追加したユーザで「su -」コマンドを用いてrootに切り替われるか検証。

「su -」でrootに切り替えられるか実験
$ su -
Password: パスワード入力(不可視)
$
現在のユーザを確認
# whoami
root
#

確認できたセキュリティ上の問題点

1. パスワードが記載された /tmp/sminitpassが存在し、一般ユーザで閲覧可能
2. 新規ユーザ追加の際にシェル権限(/bin/bash)が付与される。
3. /etc/pam.d/su の設定が不十分のため誰でもrootになれる

/tmp/sminitpass は644のパーミッションの為、誰でも読むことが出来、新規ユーザを追加した際にシェル権限が付与されるため、/etc/ssh/sshd_configの設定で「AllowUsers」や「DenyUsers」の設定が行なわれていない限り、一般ユーザでSSH接続を行なうことが出来、そして「su -」の実行が可能。

甘いぞセキュリティ

対応策
1. /tmp/sminitpassの削除

/tmp/sminitpassを確認(-i)付きで削除
# rm -i /tmp/sminitpass
rm: remove regular file `/tmp/sminitpass'? yes
#
/tmp/sminitpassの確認
# ls -la /etc/sminitpass
ls: /etc/sminitpass: No such file or directory
#

2. /etc/default/useradd の編集

バックアップを作成
# cp -p /etc/default/useradd /etc/default/useradd.OGRG #
現在の/etc/default/useraddを確認
# cat /etc/default/useradd # useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

viコマンドで編集してもいいが、初心者には面倒くさいので「sed」で変更
「/bin/bash」を「/sbin/nologin」に変更する
# sed -i 's/\/bin\/bash/\/sbin\/nologin/' /etc/default/useradd #編集後の/etc/default/useraddを確認
# cat /etc/default/useradd # useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/sbin/nologin SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

3. /etc/pam.d/su の編集

バックアップを作成
# cp -p /etc/pam.d/su /etc/pam.d/su.ORG #
現在の/etc/pam.d/suを確認
# cat -n /etc/pam.d/su  1  #%PAM-1.0
 2  auth            sufficient      pam_rootok.so
 3  # Uncomment the following line to implicitly trust users in the "wheel" group.
 4  #auth           sufficient      pam_wheel.so trust use_uid
 5  # Uncomment the following line to require a user to be in the "wheel" group.
 6  #auth           required        pam_wheel.so use_uid  7  auth            include         system-auth
 8  account         sufficient      pam_succeed_if.so uid = 0 use_uid quiet
 9  account         include         system-auth
 10  password        include         system-auth
 11  session         include         system-auth
 12  session         optional        pam_xauth.so

ここも「sed」で編集。6行めの行頭(^)の「#」を「」に変更。つまり削除
# sed -i '6 s/^#//' /etc/pam.d/su #
編集後の/etc/pam.d/suを確認
# cat -n /etc/pam.d/su  1  #%PAM-1.0
 2  auth            sufficient      pam_rootok.so
 3  # Uncomment the following line to implicitly trust users in the "wheel" group.
 4  #auth           sufficient      pam_wheel.so trust use_uid
 5  # Uncomment the following line to require a user to be in the "wheel" group.
 auth            required        pam_wheel.so use_uid  7  auth            include         system-auth
 8  account         sufficient      pam_succeed_if.so uid = 0 use_uid quiet
 9  account         include         system-auth
 10  password        include         system-auth
 11  session         include         system-auth
 12  session         optional        pam_xauth.so
#

4 #auth sufficient pam_wheel.so trust use_uid
ここをコメントアウトしてもwheelグループに所属しないユーザはrootになれなくなるが
この条件は「wheelグループに属して居ればOK」という条件でrootパスワードの入力が必要ない

6 #auth required pam_wheel.so use_uid
ここをコメントアウトすると、「wheelグループに属している」というのが条件になるが
それでもrootパスワードは必要。

この違いは sufficient と required の違い。
sufficient は、この条件を満たせば問答無用、その後の制限を受けない。

もしwheelグループに属すユーザのパスワードが割られてもrootパスワードが分からないとログイン
出来ない(10行目「password」の条件)ように、6行目をコメントアウトする。

変更した内容が有効になっているか、再度作成済の新規ユーザでログインしログイン出来ないことを確認。

$ whoami
testboy
$
$ id
uid=500(testboy) gid=500(testboy) groups=500(testboy)
$
$ su -
Password:
su: incorrect password
$

新規ユーザを作成し、シェル権限が付与されないことを確認。

# useradd testgirl
#
# passwd testgirl
Changing password for user testgirl.
New UNIX password: パスワード入力(不可視)
Retype new UNIX password: パスワード入力(不可視)
passwd: all authentication tokens updated successfully.
#
# finger -l testgirl
Login: testgirl                         Name: (null)
Directory: /home/testgirl               Shell: /sbin/nologin
Never logged in.
No mail.
No Plan.
#

ユーザに切り替えられるユーザを作成する方法

シェル(-s)を/bin/bashとし、グループ(-G)をwheelにする
# useradd -s /bin/bash -G wheel testdad
# passwd testdad
Changing password for user testdad.
New UNIX password: パスワード入力(不可視) Retype new UNIX password: パスワード入力(不可視)
passwd: all authentication tokens updated successfully.
#
# finger -l testdad
Login: testdad                          Name: (null)
Directory: /home/testdad                Shell: /bin/bash
Never logged in.
No mail.
No Plan.
#
# id testdad
uid=502(testdad) gid=502(testdad) groups=502(testdad),10(wheel)
#

登録したユーザでログインします。

$ whoami
testdad
$
$ su -
Password: パスワード入力(不可視)
#
# whoami
root
#

Enjoy ServersMan@VPS!!

10  password
このエントリーをはてなブックマークに追加

コメント大歓迎!質問も受け付けておりますヽ(*´∀`)ノ