パスワードは、コンピュータ上のユーザを証明するための方法として、安価に、そして広く使われている認証の手段です。
パスワードを設定することで、安易に関係者以外の人がアクセスすることを防ぐことができます。
しかし、パスワードの管理を怠りますと、関係者以外の人の侵入を受けることになり、個人情報の流出など、さまざまな被害を被る可能性があります。
そのため、パスワードの管理について、以下の点に気を付けなければなりません。
パスワードが他人に知られた場合、そのパスワードは、セキュリティを確保するという使命を失うことになります。
パスワードが他人に知られる機会は、以下のようなことが考えられます。
他にもありますが、多くの場合は上記のような場合に、パスワードの流出があると考えられます。
また、管理者と名前を偽り、調査という名目でパスワードをメールや電話で聞き出す手口があります。
不審に思った場合には、即答をしないで、かならず管理者に確認をとってください。
できる限り、パスワードは頭の中に記憶して、人に知られないようにしてください。
記憶できない場合は、紙に書いてもかまいませんが、その管理はしっかり行ってください。
その際に気を付けることとして、以下のことに注意する必要があります。
上の2点は「パスワードを他人に知られないようにする」と同じ内容になっています。
パスワードは、その保管に際し、なるべく他人の目に触れることが無い場所へ保管する必要があります。
(たとえば、金庫など鍵のかかる場所)
パスワードは、他人から勝手に侵入されないために、推理されにくくする必要があります。
以下のようなパスワードは、推理されやすいので、さけてください。
上記の点に気を付けて、パスワードを決めてください。
特に、ユーザーIDとパスワードが同じというのは、パスワードが無いのに等しいので、必ず避けてください。
上記以外にも、パスワードに関して、以下の点に気を付ける必要があります。
ネットワークでやりとりを行う際、診療所単位のネットワークは、外部のネットワークとの不要なやりとりをできるだけ遮断する必要があります。
それによって、外部からの不正アクセスを減らし、グローバルなインターネットなどからの侵入を防ぐことができます。
そのため、ネットワークについて、以下の点に気を付けなければなりません。
ネットワーク経由の不正侵入は防ぐことができても、物理的にコンピュータにふれることで、個人情報を持ち出すことは可能です。
そのため、コンピュータの利用について、以下の点に気を付けなければなりません。
なお、日医標準レセプトソフトサーバ(DebianLinuxプラットホーム)以外については、ここには記載しません。
診療所へ日医標準レセプトソフトサーバを設置する際に、セキュリティに関して細心の注意を払う必要があります。
ここでは、どのような作業を行うことで、セキュリティを確保するかについて記載します。
診療所内のLANは、プライベートアドレスを使い、ルーターはNATを使ったアドレス変換機能を有効にしてください。
(LAN内において、IPv4のグローバルアドレスは使わないようにします)。
ルーターのNATと同時に行われるIPフィルタリングを有効にすることで、グローバルなインターネット(LANの外側)からの日医標準レセプトソフト端末のアクセスを許可しないようにします。
逆に、LAN内からインターネットへのアクセスは、診療所のポリシーに従い、制御します。
日医標準レセプトソフトとしては、特にこれを規定しないものといたします。
日医標準レセプトソフトのサーバをネットワークに接続する際、不正アクセス等を防ぐために、不要なポートを閉じる必要があります。
そのためには、接続待ちポートを表示する「netstat -l -A inet」「netstat -l -A inet6」コマンドや、ポートスキャンを行うコマンドを使用して、どのポートが開いているかを確認する必要があります。
※※注意!!ポートスキャンのコマンドとしてnmapコマンドがありますが、このコマンドは、他の日医標準レセプトソフトサーバのポートを調べることができてしまいます。
そのため、他の組織の運営するサイトにポートスキャンを実施した場合、不正アクセスとみなされるケースがあるため、このコマンドの使用に際しては、特に注意を払わなければなりません。
そして、他の日医標準レセプトソフトサーバに対して、絶対に実行してはなりません。
実行していいのは「nmap localhost」というように、自分に対してのみです。
(このコマンドで、ポートを調べることができます)
ポートスキャンコマンドを実行した結果、表示される一覧として、以下のようなものが表示されます。
Interesting ports on orca-test (127.0.0.1): Port State Protocol Service 9 open tcp discard 13 open tcp daytime 22 open tcp ssh 37 open tcp time 111 open tcp sunrpc 755 open tcp unknown 1178 open tcp skkserv 5432 open tcp postgres 5680 open tcp canna 6000 open tcp X11 22273 open tcp wnn6
上記の表示を参照して、開いているポートの中で不要なものが何かを探してください。
不要なものについては、「inetd.conf」の設定を変更したり、アンインストールを行ってください。
「ssh」や「postgres」など、必要なポートに関しては、各プログラムごとに、きちんとした設定を行って、セキュリティを確保してください。
ポートスキャンで表示されたものについて、主要な一部のものについて説明します。
port - サービス名 - 機能
7 - echo - 外部から受信したデータを、そのまま送り返すポート
9 - discard - 外部からの受信のみ行い、送信は何も行わないポート
13 - daytime - 日付と時刻を文字で送信するポート
21 - ftp - ftpを使ったファイルの送受信を行うポート
22 - ssh - sshを使った通信を行うポート
23 - telnet - telnetを使った通信を行うポート
25 - smtp - 送信メールの通信を行うポート
37 - time - 1900年1月1日0時0分0秒からの秒数を4バイト整数で返信するポート
53 - DNS - ホスト名とIPアドレスを結びつけるためのポート
79 - finger - アカウント情報の通信を行うポート
80 - www-http - インターネット情報の通信を行うポート
109 - pop2 - 受信メールの通信を行うポート
110 - pop3 - 受信メールの通信を行うポート
111 - sunrpc - RPC(リモート手続き呼び出し)ポート
1178 - skkserv - 漢字変換を行う「skk」のポート
5432 - postgres - PostgreSQLとの通信を行うポート
5680 - canna - 漢字変換を行う「canna」のポート
6000 - X11 - X Windowシステムのポート
22273 - wnn6 - 漢字変換を行う「wnn6」のポート
22 - ssh - センターとのバックアップやリモートメンテナンスなど、暗号化通信に必要です 5432 - postgres - DBとアクセスする場合に必要です
sshは、常時接続する必要がないため、接続する必要が発生した場合のみ接続できるようにすることができるのであれば、sshは通常は停止させることを推奨します。
postgresは、ルーターレベルでインターネットとのやりとりを遮断してください。
1178 - skkserv - 漢字入力を行う場合に必要です 5680 - canna - 漢字入力を行う場合に必要です 6000 - X11 - X Windowを使用する場合に必要です 22273 - wnn6 - 漢字入力を行う場合に必要です
9 - discard
13 - daytime
37 - time
7 - echo - DoS攻撃を受ける可能性があります
19 - chargen - DoS攻撃を受ける可能性があります
21 - ftp - 不正アクセスの原因となります
23 - telnet - 不正アクセスの原因となります
25 - smtp - spamメールの踏み台になる危険性があります
53 - DNS - パスワード盗用の可能性があります
79 - finger - 個人情報が盗まれる可能性があります
80 - www-http - もっともねらわれやすいポートであるため、ちょっとした設定ミスで攻撃を受ける可能性があります
109 - pop2 - パスワード盗用の可能性があります
110 - pop3 - パスワード盗用の可能性があります
111 - sunrpc - 不正アクセスの原因となります
不要なポートで、「/etc/inetd.conf」に記述されているものについては、行頭に「#」を付けて、再起動してください。
ポートが閉じられるようになります。
(対象:echo, chargen, discard, daytime, time, telnet, finger...)
その他の不要なポートについては、デーモンを起動しないようにしてください。
特に、ネットワーク関連のポート(ftp, telnet, smtp, DNS, www-http, pop2, pop3, sunrpc)はねらわれやすいので、かならず停止させてください。
セキュリティパッチの作業は、他のディストリビューションと異なりDebianでの作業はあまり手間をかけずに行うことができます。
(これは、Debianの大きな特徴です)
なお、実作業の手間は省けますが、情報の収集については、日頃気を付けなければなりません。
Debian/GNU Linuxのセキュリティについては、公式サイト(http://www.jp.debian.org/)にて情報を収集を行ってください。
日医標準レセプトソフトのセキュリティパッチにつきましては、ORCAプロジェクトより情報を提供いたします。
セキュリティホールなどの情報が入りましたら、すみやかにアップデートを行ってください。
アップデートを行うことによって、既知のセキュリティホールがふさがれるようになります。
アップデートは「dselect」コマンドや「apt-get」コマンドを使います。
まず、前手順として、以下の記述を「/etc/apt/source.list」に追加する必要があります。
(既に記述されている場合は、追加する必要はありません)
「sudo vi /etc/apt/source.list」コマンドを実行して、以下の行を追加してください。
woody版
deb http://security.debian.org/ woody/updates main contrib non-free
上記の記述を追加しましたら、Debianのセキュリティパッチをあてることができるようになります。
セキュリティパッチをあてる際には、以下のコマンドを実行してください。
sudo apt-get update sudo apt-get upgrade
記述の追加は一度のみですので、実質、コマンドを一回実行するだけで、アップデートが完了します。
以下のユーザについては、パスワードを入れてもログインできないようにしてください。
上記のユーザの権限でコマンドを実行したい場合は、「sudo -u」コマンドを使用してください。
以下のユーザについて、きちんとしたパスワードが設定されているかを確認してください。
上記のユーザは、特に判読しにくいパスワードを指定してください。
たとえば、以下のような規定をすると良いと思います。
関連 : suコマンド
通常のユーザで、普段は必要がなく、重要なファイルについては、実行権限等を考慮して、パーミッションを確認・設定をしてください。
特に、日医標準レセプトソフトシステムのDBやシステムを操作するプログラムについては、扱いに注意してください。
パーミッションの設定については、「chmod」コマンドを使って、パーミッションの設定を行ってください。
また、作成者以外が入れるようにしたい場合には、「chown」コマンドを使ったグループ設定を活用し、通常ユーザとの切り分けを行うことで、セキュリティを確保してください。
通常は、インストール直後の状態で大丈夫です。
確認を行う場合は、「ls -l」コマンド等を実行して、パーミッションを確認し、必要であれば、「chmod」コマンドを実行して、適切にパーミッションを設定してください。
日医標準レセプトソフトシステムが使用するデータベースは、日医標準レセプトソフトシステムを管理・実行するユーザ以外からは使用できないようにしてください。
インストール直後の日医標準レセプトソフトデータベースは、日医標準レセプトソフトを管理・実行するユーザのみ使用が可能になっていますので、データベースを起動して権限の設定を行うことありません。
Postgresのユーザ認証について記入するファイル「/var/lib/postgres/data/pg_hba.conf」についての記述は、以下のように設定してください。
local all ident sameuser host orca 127.0.0.1 255.255.255.255 trust host all 127.0.0.1 255.0.0.0 ident sameuser host all 0.0.0.0 0.0.0.0 reject
他の日医標準レセプトソフトサーバからアクセスする場合、cryptを使用したパスワード認証を行うことでセキュリティを確保します。
これによって、セキュリティを確保しながらの2台運用を可能にします。
例えば、従サーバのアドレスが「192.168.1.12」の場合、下記のように設定します。
local all ident sameuser host orca 127.0.0.1 255.255.255.255 trust host all 127.0.0.1 255.0.0.0 ident sameuser host orca 192.168.1.12 255.255.255.255 crypt host all 0.0.0.0 0.0.0.0 reject
さらにセキュリティを強化したい場合は、書籍等を参照して、「pg_hba.conf」を設定してください。
cryptを使ったセキュリティの確保のためには、MONTSUQI・PostgreSQLの両方に対して、以下の設定が必要となります。
MONTSUQIの設定ファイル「/etc/jma-receipt/dbgroup.inc」については、以下のような設定を行ってください。
db_group {
type "PostgreSQL";
port "localhost";
name "orca";
redirect "log";
};
db_group "log" {
priority 100;
type "PostgreSQL";
port "192.168.1.12";
name "orca";
password "orcapasswd" # <= password
file "/var/lib/jma-receipt/dbredirector/orca.log";
redirect_port "localhost";
};
:
(以下略)
nameとpasswordを、データベースで設定したユーザIDとパスワードで一致させてください。
このユーザIDとパスワードをきちんとしないと、MONTSUQI(aps)の起動時に、接続に失敗するため、異常終了と再起動の繰り返しとなってしまいます。
適切に行いますと、デーモンの起動後、しばらくしますと、すべてのデーモンの起動が完了し、postgresとの接続が可能になります。
cryptはパスワードを暗号化してやりとりする方法です。
パスワードは、パスワードファイルを作るのではなく、psql内で実行するSQLコマンドの「CREATE USER」や「ALTER USER」によって設定します。
cryptでのパスワード設定は、以下の手順で行います。
DB内で実行し、しかもDBの内部に保存されるため、DBに入らない限り、パスワード等は判明しません。
また、パスワードの変更や確認等は、postgresユーザでなければできません。
なので、postgresユーザのパスワードをきちんと行えば、パスワードの盗用については防げるようになっています。
ただし、postgresユーザについても、きちんとパスワードを設定する必要がありますので、注意する必要があります。
上記の設定を行うことで、日医標準レセプトソフトデータベースへの不要なアクセスを防ぐことができます。
sshを使ったリモートでのログインについて、リモートメンテナンスなどで必要なときにRSA認証を行ったログインのみを許可することを推奨します(RSA認証がとれない場合は、アクセスできないようにします)。
sshに関する設定は、「/etc/ssh/sshd_config」に記述するようになっています。
このファイルに記述することで、ログインできるユーザを制限することができます。
例)
「~/」に「identity.pub」をコピーしたものとする
すでに「~/.ssh/」ディレクトリが存在するものとする
例1)まだauthorized_keysが存在しない場合
cp ~/identity.pub ~/.ssh/authorized_keys
例2)すでにauthorized_keysが存在する場合
cat ~/identity.pub >> ~/.ssh/authorized_keys
設定方法の詳細については、書籍やインターネット上などで検索してください。
※上記は、sshプロトコルバージョン1の場合の記述です。sshプロトコルバージョン2の場合、上記の「identity.pub」を「id_rsa.pub」や「id_dsa.pub」に置き換えて読んでください。
suコマンドは、基本的には使わないでください。
ただし、万が一などのために使う可能性はあります。
その際に、一般の人が使えないようにするための配慮が必要となります。
そのため、重要なユーザのパスワードについて、きちんとした設定を行うことによって、セキュリティを確保するものとします。
sudoコマンドは、一部のユーザのみが使えるようにします。
それによって、重要なコマンドを実行する際に、極力rootユーザにならないで、rootユーザのみが使えるコマンドを実行できるようになります。
sudoコマンドを実行するユーザについての制限設定は、「/etc/sudoers」ファイルに記述されています。
このファイルのユーザ設定をきちんと行うことで、sudoコマンドの実行権限を設定することができます。
設定を行う場合、rootユーザで「visudo」コマンドを実行します。
するとviでsudoコマンドのユーザ権限の設定ファイルを開いてくれます。
ファイルを開きますと、以下のようなファイルがviで表示されます。
# sudoers file. # # This file MUST be edited with the 'visudo' command as root. # # See the sudoers man page for the details on how to write a sudoers file. # # Host alias specification # User alias specification # Cmnd alias specification # User privilege specification root ALL=(ALL) ALL apple ALL=(ALL) ALL orange ALL=(ALL) ALL
上記にユーザ「melon」を加えたい場合は、「melon ALL=(ALL) ALL」の行を加えると、「melon」と呼ばれるユーザで、sudoコマンドが実行できるようになります。
なお、上記の場合、sudoコマンドを実行しますと、初めて実行したり、前回実行から5分以上経っていますと、パスワードの入力を求められるので、その場合には、パスワードを入力してから実行してください。
なお、別の記述方法として「lemon ALL=ALL,NOPASSWD:ALL」といった手法があります。
これは、パスワードを入力しないで、管理者権限のコマンドを実行できるようにするものです。
また、sudoコマンドを実行したときのログをとる方法についても存在します。
詳細は、書籍等を参照してください。