Help us understand the problem. What is going on with this article?

情報セキュリティの基本 ~セキュアなアカウント管理~

More than 3 years have passed since last update.

 ここでは,セキュリティを重視したアカウント管理を行っていきます.

内容

環境

  • Cent OS 6.8

 より細かい環境については,ブログを参考にしてください.

 また,今回の内容はブログの第14回により詳しく掲載しておりますので参考にしてください.

   【第14回】情報セキュリティの雪山(2) ~セキュアなアカウント管理~

不要になったユーザーアカウント

削除する

 まずは不要になったユーザーアカウントを削除します.ユーザーの削除はuserdelコマンドによって行います.

$ sudo userdel -r USERNAME
# 削除するユーザが使用中の場合,fオプションで強制削除できます
$ sudo userdel -rf USERNAME

ロックする

 もしまたアカウントを使用する可能性がある場合でも,ログインできないようロックしておくことは必要です.アカウントのロックはpasswdコマンドで行うことができます.

$ sudo passwd -l USERNAME

 ロックを解除するときはuコマンドを使います.

$ sudo passwd -u USERNAME

管理者グループwheelから退会させる

 管理者交代など,アカウントは残したままだがアクセス権限を変えたいときは,グループから退会させることで制御できるようにするといいでしょう.ここではwheelグループが管理者権限を有するグループとして設定してありますので,前の管理者をグループから退会させることで管理者権限を返還させます.

$ sudo gpasswd -d USERNAME wheel

アカウントの有効期限

 あらかじめアカウントの有効期限を決めておくことも重要です.アカウントにはEXPIRE_DATEを設定でき,この日付を超えるとログインできなくなります.

既存のアカウント

# 既存のアカウントの有効期限はchage-Eまたはusermod-eで設定します.
# 日付はYYYY-MM-DDの形式か1970-1-1を0日目として数えた日数で指定します.
$ sudo chage -E YYYY-MM-DD USERNAME
または
$ sudo usermod -e YYYY-MM-DD USERNAME
# 確認はchage-lでできます.
$ sudo chage -l USERNAME

新規のアカウント

 アカウントを新規に作る際にオプションで有効期限を設定することができます.

$ sudo useradd USERNAME -e YYYY-MM-DD

 また,ユーザー作成時にオプションで指定されなかった値については,/etc/default/useraddに書かれたデフォルト値を使用します.デフォルト値は,直接ファイルを編集するかコマンドを介して変更することができます.

# -Dオプションのあとにオプションを続けることでデフォルト設定を変更します.
$ sudo useradd -D -e YYYY-MM-DD
# 確認は-Dオプション単独でできます.
$ sudo useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=yyyy-mm-dd    # 設定した値
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

ログインシェルの管理

無効なシェルの設定

 ユーザーがログインしたとき,passwdファイルに書かれたログインシェルを使ってログインします./bin/bash, /bin/shなどが有効なログインシェルで,シェルが起動することでユーザーはシステムの操作を行うことができます.

 アカウントには,ログインを想定していないものもあります.ftpやsshdなどのシステムアカウントがそれです.こうしたアカウントのログインシェルに有効なシェルが設定されてしまうと,それを介して不正ログインが行われる場合もあります.また,ログインを想定しないユーザーアカウントも,ログインシェルに無効なシェルを変更することでログインできなくすることができます.

 システムアカウントやログインを想定しないユーザーアカウントのログインシェルには,/bin/falseという無効なシェルを設定する必要があります.

# ログインシェルの確認はpasswdファイルでできます.
$ getent passwd enryu
enryu:x:500:500:Lost Enryu:/home/enryu:/bin/bash
↑一番末尾に記載されている/bin/bashがログインシェルになります

# 有効なシェルは/etc/shellsファイルで確認できます.chshコマンドを使います.
$ chsh -l
/bin/sh
/bin/bash
/sbin/nologin
    :

# 無効なシェルに変更します
$ sudo chsh /bin/false USERNAME
または
$ sudo usermod -s /bin/false USERNAME
# 新規ユーザーの場合
$ sudo useradd -s /bin/false USERNAME

falseとnologin

 /sbin/nologinというログインできないシェルもあります.これはログインはできませんが,正当なシェルになっているため起動することができます.正当なシェルとは/etc/shellsに定義されたもので,FTPでのログインができてしまいます.nologinは起動すると,ログイン試行のログを残してからメッセージを残してログインを拒否します.

 サイトによって言っていることはまちまちですが,システムアカウントには/bin/false,ログインを想定しないユーザーアカウントには/sbin/nologinを使うのがいいのかなと思います.

/bin/falseと/sbin/nologinの挙動
# /bin/falseへのログイン
$ su user
Password:
$        # パスワードを入力したのち,何も起こらず終了します


# /sbin/nologinへのログイン
$ su user
Password:
This account is currently not available.
$        # シェルは起動し,内部の処理でログインが拒否されます

システムアカウントのログインシェル

 CentOS6.8はデフォルトでシステムアカウントのログインシェルに/sbin/nologinが指定されています.パスワードがロックされているためログインはできませんから,このままでも問題はありませんが,このロックはroot権限で解除できますから,念のために上述の通り/bin/falseに変更します.まとめて変更する場合は直接/etc/passwdを変更する方が効率的でしょう.

$ sudo vi /etc/passwd

 :%s;/sbin/nologin;/bin/false/gcで確認しながらまとめて置換します.

パスワードの有効期限

 万が一パスワードが漏洩してもアカウントが不正利用されるリスクを減らすために,パスワードの有効期限を設定してこまめに変更させるようにしましょう.パスワードに関する設定はこちらをご覧ください.

 今回扱うセキュアなアカウント管理方法は以上となりますが,実際には組織内でどのようにアカウントを運用していくか,誰がどれだけの権限でいつまで管理していくかなどのポリシーを定めておくことが大切です.刻々と変化する運用状況の中で,常にアカウントの管理について考えていくことを忘れないようにしましょう.

---- 以上

参考ページ

こちらもよろしくお願いいたします.

エンリュの迷い森|トップページ

LostEnryu
情報システム,プログラミング,情報セキュリティなど,情報分野のありとあらゆることを勉強している学生です.研究は生物系です(←???).自分の投稿にはそれなりの責任を感じてはいますが,私の記事を参考に実行したことで生じたどんな損害・不利益に対しても責任は取りかねます.ただの迷子ですから.
http://lost-in-forest.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away