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/bashSKEL=/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/nologinSKEL=/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. 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 # 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
コメント