主題1.10:セキュリティ
1.10.1 セキュリティ管理業務の実施(重要度3)
usermodコマンド
書式
usermod【オプション】ユーザー名
概要
ユーザーの設定を変更
主なオプション(一部紹介)
-e 年-月-日
→アカウントの有効期限を設定
-L
→アカウントをロック(無効化)
-U
→アカウントのロックを解除
使用例
usermod -e 2021-06-30 test01
→アカウントの有効期限を2021/6/30に設定
chageコマンド
書式
chage【オプション】ユーザー名
概要
パスワードの有効期限情報を設定
主なオプション
-l
→有効期限情報を表示
-m 日数
→パスワードを変更できる最短日数を設定
-M 日数
→パスワードの有効期限(使用できる最大日数)を設定
-I 日数(iの大文字)
→パスワードの有効期限が切れてからアカウントを無効化するまでの日数を設定
-W 日数
→パスワードの有効期限切れの警告が何日前から表示されるか設定
-E 年-月-日
→アカウントの有効期限を設定(usermod -eと同じ)
引数
・ユーザー名:設定対象とするユーザーを指定
使用例
chage -l test01
→test01ユーザーの有効期限に関する情報を表示(root以外の一般ユーザーも実行できる)
chage -m 0 user1
→ユーザー「user1」のパスワードをいつでも変更できるようにする
chage -M 90 test01
→test01ユーザーのパスワードの有効期限を90日に設定
chage -W 14 user1
→アカウント「user1」のパスワードの有効期限が切れる2週間前には、期限切れの警告を出す
chage -E 2010-04-20 user1
→「user1」のユーザーアカウントを、2010年4月20日までの期限付きにする
passwdコマンド
書式
passwd【オプション】ユーザー名
概要
パスワードに関する情報を設定(主題1.08で確認しなかったオプションも紹介)
主なオプション
-x 日数
→パスワードの有効期限を設定(chage -Mと同じ)
-l
→アカウントのロック(無効化)(usermod -Lと同じ)
-u
→アカウントのロックを解除(usermod -Uと同じ)
-e
→パスワードを有効期限切れにする
使用例
passwd -x 30 test01
→パスワードの有効期限を30日間に設定
passwd -l test01
→アカウントをロック
suコマンド
書式
su【オプション】【ユーザー名】
概要
ユーザー環境の切り替え
主なオプション
–
→カレントディレクトリや設定されている変数など、ユーザー環境を切り替える
引数
・ユーザー名:切り替え対象とするユーザーを指定。ユーザー名を省略した場合、rootユーザー環境に切り替える
使用例
su
→パスワードを入力してrootユーザー環境に切り替え
su – testuser
→rootユーザーで切り替えるときにはパスワード入力不要
suコマンドの説明
・ログイン中に別のユーザーに切り替わることができる
・rootユーザーから別のユーザーに切り替わる時はパスワードは求められない
・ユーザー名を指定しない場合、rootユーザーへ切り替わる
sudoコマンド
書式
sudo【オプション】コマンド
概要
別のユーザー権限でコマンドを実行
主なオプション
-u ユーザー名
→指定したユーザー権限でコマンドを実行(指定しなかった場合はrootユーザー権限でコマンドを実行)
引数
・コマンド:別のユーザー権限で実行するコマンドを指定
使用例
sudo -l
→自分に権限委譲されているコマンドを調べる
sudo useradd test10
→パスワードを入力するとコマンドが実行される(事前にsudoersファイルの設定が必要)
sudo /sbin/reboot
→管理者から権限を委譲されたrebootコマンドを実行
visudoコマンド
書式
visudo【オプション】
概要
sudoersファイルを編集し、sudoコマンドの実行設定を行う
/etc/sudoersファイル
書式
ユーザー 許可するホスト=(対象ユーザー) 実行可能なコマンド[ ,コマンド・・・]
概要
sudoコマンドに関する設定
備考
許可するホストと対象ユーザーは、設定の必要がないときは[ALL=(ALL)]と記述する。実行するコマンドは、引数やオプションを指定したり、カンマで区切って複数指定したりできる
設定例
visudo →visudoコマンドを実行すると、sudoersファイルを編集できる
testuser ALL=(ALL) /usr/sbin/useradd →testuserでsudoコマンドを利用し、useraddコマンドを実行できるようにする
lsofコマンド
書式
lsof【オプション】【ファイル】
概要
ファイルやポートを開いているプロセスを表示
主なオプション
-i:ポート番号
→指定したポートを開いているプロセスを表示
引数
・ファイル:指定したファイルを開いているプロセスを表示
使用例
lsof /boot
→どのプロセスが指定したファイルやディレクトリを開いているのか確認
lsof -i:25
→25番ポートを開いているプロセスの確認
fuserコマンド
書式
fuser【オプション】【ファイル】
概要
ファイルやポートを開いているプロセスを表示、プロセスを検索し強制終了する
主なオプション
-k
→プロセスにSIGKILLを送信(kill)
-m
→マウントされたファイルシステムを指定(mount)
-n
→検索する領域(名前空間)を指定(namespace)
-u
→検索結果にユーザー名を追加(user)
-v
→詳細な情報を表示(verbose)
引数
・ファイル:指定したファイルを開いているプロセスを表示
使用例
fuser -v /boot
→どのプロセスが指定したファイルやディレクトリを開いているのか確認
fuser -uk /tmp/.keylog
→書き込みしているプログラムのプロセスID、実行ユーザー情報の確認とプロセスの強制終了を同時に行う
fuser -k -n tcp 65432
→不正プログラムのプロセスIDの確認とプロセスの強制終了を同時に行う
nmapコマンド
書式
nmap【オプション】ホスト
概要
指定したホストが待機しているポートを確認(ポートスキャンを実行)
引数
・ホスト:対象とするホストを指定
使用例
nmap 192.168.56.21
→Debian環境で開いているポートを確認
nmapの機能
・リモートホストで開いているポートを確認
・対象とするTCP/UDPポートの範囲が指定できる
・リモートホストのOS識別を試みる
ulimitコマンド
書式
ulimit オプション
概要
利用できるリソース量を制限、制限値を一覧表示
主なオプション
-a
→対象となるリソースと制限値の一覧を表示(all)
-c ブロックサイズ
→コアダンプファイルのサイズを制限(core)
-f
→出力ファイルのサイズを制限(file)
-u
→ユーザー1人が起動できるプロセス数を制限(user process)
-v
→シェルが利用できる仮想メモリを制限(virtual memory)
-n ファイル数
→同時に開くことができるファイル数を制限
使用例
ulimit -a
→対象となるリソースと制限値の一覧を表示
ulimit -f
→出力できるファイルのサイズを制限する
ulimit -u 1024
→ユーザーが使用できるプロセス数を1024に制限
ulimit -v
→利用できる仮想メモリのサイズを制限
whoコマンド
書式
who【オプション】
概要
現在ログイン中のユーザーと端末の情報を表示
参照するファイル
/var/run/utmp
wコマンド
書式
w【オプション】
概要
現在ログイン中のユーザーと端末、実行しているプロセスの情報を表示
参照するファイル
/var/run/utmp
lastコマンド
書式
last【オプション】
概要
最近ログインしたユーザーの一覧を表示
参照するファイル
/var/log/wtmp
SUIDとSGID
SUIDとSGIDの両方が設定されたファイルをすべて把握
find / -perm -6000
SUIDとSGIDのいずれかが設定されたファイルやディレクトリをすべて把握
find / -perm +6000
ルートユーザーの所有権を持ち、かつSUIDが設定されたファイルをすべて把握
find / -perm -4000 -uid 0
find / -perm -u+s -uid 0
ルートグループの所有権を持ち、かつSGIDが設定されたファイルやディレクトリをすべて把握
find / -perm -2000 -gid 0
find / -perm -g+s -gid 0
1.10.2 ホストのセキュリティ設定(重要度3)
chkconfigコマンド
書式
chkconfig【サービス名】【on/off】
概要
init環境における指定したサービスの自動起動の有効化/無効化
*systemdが採用される前のRHEL 6系ディストリビューションにおいて各種サービスの自動起動の設定を行う
引数
・サービス名:制御するサービスの名前を指定
・on/off:自動起動の有効/無効化
使用例
chkconfig httpd off
→自動起動の無効化
serviceコマンド
書式
service サービス名 操作
概要
init環境における指定したサービスの制御
*systemdが採用される前のRHEL 6系ディストリビューションにおいて、各種サービスをその場で起動・停止したり、ステータスの確認を行う
引数
・サービス名:制御するサービスの名前を指定
・操作:start、stop、statusなどのコマンドを指定
使用例
service httpd stop
→httpdを停止
service httpd status
→httpdの状態を確認
xinetd
概要
スーパーサーバーと呼ばれ、登録された利用頻度の低いサーバーを監視し、リクエストが来た場合にだけ、該当のサービスを実行する
*telnetサーバーを有効にしたい場合、歴史的な経緯からxinetd経由で管理を行う
*inetdより新しく作られ、より詳細な設定がサービス毎にできる
xinetdで利用する設定ファイル
/etc/xinetd.conf:xinetd全般の設定(inetdからxinetdに変更した時に編集を検討する)
/etc/xinetd.d/:xinetdで管理するプログラムの設定(サービスごとの設定ファイルを置くディレクトリ)
xinetdの設定ファイルで設定できる内容
bind/interface:サービスを提供するインターフェイスのIPアドレス
disable:サービスを無効化するかの設定(yes:無効化、no:有効化)
instances:サーバープログラムの最大起動プロセス数
log_type:ログの記録先指定。syslogや記録するログファイルの絶対パスを指定する
no_access:サービスへのアクセスを拒否する接続元
only_from:サービスへのアクセスを許可する接続元
server:サーバープログラムの絶対パス
server_args:サーバープログラム起動時に指定する引数
socket_type:ストリーム型、データグラム型といったサービスの接続タイプ
user:サーバープログラムを起動するユーザー
wait:サーバープログラムへの接続処理を待ち合わせるかの設定
設定例
yum -y install xinetd →xinetdパッケージをインストール
cat /etc/xinetd.d/telnet →disableがnoなので利用可能
systemctl start xinetd →xinetdを起動して動作を確認
lsof -i:23 →xinetdが23番ポートを待機していることを確認
telnet 192.168.56.11 →別の環境からリモート接続できる
inetd
概要
スーパーサーバーと呼ばれ、登録された利用頻度の低いサーバーを監視し、リクエストが来た場合にだけ、該当のサービスを実行する
*システムの資源の節約のため、TELNETやFTPなど利用頻度の低いサービスを必要に応じて起動する
inetdで利用する設定ファイル
/etc/inetd.conf:inetd全般の設定
/etc/inetd.confファイルの変更内容を反映させるコマンド
kill -HUP inetdのPID
killall -HUP inetd
/etc/init.d/inetd restart
記述形式
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
→行の先頭に#を入れることでその行をコメントアウトしinetdで該当のサービスを起動しないようにできる
telnetコマンド
書式
telnet ホスト【ポート番号】
概要
telnetサーバーもしくは指定したポート宛てに接続
引数
・ホスト:指定したホストに接続
・ポート番号:指定したポートに接続。省略すると23番(telnet)ポートに接続
使用例
vi /etc/xinetd.d/telnet
only_from = 192.168.56.0/24 →192.168.56.0/24ネットワークからのみ接続可能(保存終了)
systemctl restart xinetd →xinetdを再起動し、設定を有効化
telnet localhost →localhostからの接続は拒否されるようになる
firewall-cmdコマンド
書式
firewall-cmd オプション
概要
firewalldを介したNetfilterの制御(firewalldはCentOS 7からデフォルトとして実装された)
主なオプション
ーーgetーdefaultーzone
→デフォルトゾーンの表示
ーーsetーdefaultーzone=ゾーン
→デフォルトゾーンの設定
ーーzone=ゾーン
→制御対象とするゾーンの指定
ーーaddーservice=サービス
→指定したサービスを許可対象に追加
ーーremoveーservice=サービス
→指定したサービスを許可対象から削除
ーーaddーinterface=インターフェイス
→インターフェイスをゾーンに追加
ーーremoveーinterface=インターフェイス
→インターフェイスをゾーンから削除
ーーlistーallーzones
→すべてのゾーンの情報を表示
ーーlistーall
→ゾーンの情報をすべて表示
ーーlistーservices
→許可対象となっているサービスを表示
ーーlistーinterfaces
→ゾーンに含まれるインターフェイスを表示
ーーpermanent
→永続的な設定にする(設定ファイルに書き込む)
主なゾーン
public
→パブリックエリア用(デフォルト)
work
→業務での利用
home
→家庭での利用
internal
→ファイアウォールの内部ネットワーク側での利用
external
→ファイルウォールの外部ネットワーク側での利用
dmz
→DMZネットワーク用
block
→受信パケットを拒否。外部への通信と戻りパケットだけを許可
drop
→受信パケットを廃棄。外部への通信と戻りパケットだけを許可
trusted
→すべての通信を許可
iptablesコマンド
書式
iptables オプション
概要
Netfilterの制御
主なオプション
-L [チェイン]
→ルールの表示
-A [チェイン] ルール
→ルールを末尾に追加
-D [チェイン] ルール
→ルールの削除
-P チェイン ターゲット
→チェインに対して、ポリシー設定を行う
主なターゲット
ACCEPT:パケットを許可
DROP:パケットを破棄
使用例
iptables -L
→firewall-cmdコマンドで行った設定も確認できる
1.10.3 暗号化によるデータの保護(重要度3)
sshコマンド
書式
ssh【オプション】【ユーザー@】ホスト【コマンド】
概要
sshによるリモート接続を行う
主なオプション
-L
→ポート転送を行う
-A
→ssh-agentによる鍵転送を行う
-X
→DISPLAY環境変数が自動で設定される
-l ユーザー
→ユーザー名を指定
-i
→秘密鍵ファイルを指定
-p
→接続先ポート番号の指定
-o
→ssh_configで設定できるオプションの指定。以下のように指定できる
-o User=ユーザー名:ユーザー名を指定
-o IdentityFile=秘密鍵ファイル:秘密鍵ファイルを指定
-o Port=ポート番号:接続先ポート番号の指定
引数
・ユーザー:接続に使用するユーザーを指定
・ホスト:接続先のホストの名前もしくはIPアドレスを指定
・コマンド:指定した場合、接続先でコマンドを実行して切断
使用例
ssh 192.168.56.11
→Debian環境からCentOS環境にSSH接続
ssh -L 2323:192.168.56.11:23 192.168.56.11
→sshポート転送を有効化
OpenSSHに関する主なファイル(SSHクライアント)
・設定ファイル:/etc/ssh/ssh_config
・秘密鍵:~/.ssh/id_rsa(「rsa」の部分は暗号方式により異なる)
・公開鍵:~/.ssh/id_rsa.pub(「rsa」の部分は暗号方式により異なる)
・認証鍵リスト:~/.ssh/known_hosts(SSH接続先のホスト名やIPアドレス、公開鍵が格納)
OpenSSHに関する主なファイル(SSHサーバー(sshd))
・設定ファイル:/etc/ssh/sshd_config
・秘密鍵:/etc/ssh/ssh_host_rsa_key(「rsa」の部分は暗号方式により異なる)
・公開鍵:/etc/ssh/ssh_host_rsa_key.pub(「rsa」の部分は暗号方式により異なる)
・認証鍵リスト:~/.ssh/authorized_keys(SSHクライアントのユーザーの公開鍵が格納)
ホスト認証
・ホスト認証は、SSHクライアントが接続先のリモートホスト(SSHサーバー)が正しいホストかどうかを確認する(なりすましを防ぐ)ために行う
・クライアントからの接続時に、リモートホストは自身の公開鍵をSSHクライアントに送信する。SSHクライアントは受け取った公開鍵と、SSHクライアントの「~/.ssh/known_hosts」ファイルに格納されているSSHサーバーの公開鍵を比べることで正しいホストかどうかを確認する
ユーザー認証
・ユーザー認証は、SSHクライアントで接続してくるユーザーが正当なユーザーかどうかを確認するために行う。ユーザー認証にはパスワード方式と公開鍵方式の2種類がある
・パスワード方式・・・ローカルでのログインと同様に、接続ユーザーのID/パスワードで認証する
・公開鍵方式・・・公開鍵と秘密鍵の組み合わせで認証する。パスワードを使用せず、鍵を持つ者がログインできる
ユーザー認証の公開鍵方式
・公開鍵方式を使用する場合は、ユーザーごとに一対の公開鍵と秘密鍵を作成して、公開鍵の方をSSHサーバーの「~/.ssh/authorized_keys」に登録しておく
・サーバーはSSH接続を受け付けた際、登録されている公開鍵とユーザーの秘密鍵のペアが一致するかどうかを確認する。一致しなければログインさせない。これによりパスワード方式よりもセキュリティ上強固なユーザー認証を実現する
SSHにおける認証の流れ
ホスト認証:接続先のサーバーを認証 → ユーザー認証:接続元のユーザーを認証(パスワード認証か公開鍵認証のどちらか)
/etc/ssh/sshd_configの設定項目
PermitRootLogin no
→rootユーザーでのSSHログインを禁止する
ssh-keygenコマンド
書式
ssh-keygen【オプション】
概要
SSH接続で利用する公開鍵ペアを生成する
主なオプション
-t アルゴリズム
→公開鍵ペアを生成する際に利用するアルゴリズムを指定。rsa(デフォルト)、ecdsa、ed25519を指定できる
-b ビット数
→生成する鍵のビット数を指定
-a ラウンド数
→ed25519で鍵を生成する際のKDFラウンド数を指定
-C “コメント”
→鍵データに付属するコメントを指定
ssh-keygenコマンドで指定できる暗号化アルゴリズムと鍵のビット数
rsa(デフォルト):1024、2048(デフォルト)、4096
ecdsa:256、384、521
ed25519:256
使用例
ssh-keygen
→規定ではrsaの鍵ペアが生成
ssh-keygen -t ecdsa -b 521 -C “”
→アルゴリズムの他、コメントが付かないように指定
暗号方式
rsa
・大きい数の素因数分解が困難であることに基づいた仕組み
・公開鍵暗号として最初に実用化された
ecdsa
・楕円曲線DSA
・RSAよりも処理が速く同じ安全性のため、公開鍵暗号の主流となりつつある
ed25519
・エドワーズ曲線デジタル署名アルゴリズム
・安全性が高く暗号化処理が速い
scpコマンド
書式
scp【オプション】コピー元 コピー先
概要
SSHによりリモートホスト上に、もしくはリモートホスト上からファイルをコピー
主なオプション
-i
→秘密鍵ファイルを指定
引数
・コピー元、コピー先:コピー元、コピー先となるファイルを指定。「[ユーザー@]ホスト:ファイルパス」でリモートホスト上のパスを指定できる
使用例
scp .ssh/*.pub 192.168.56.11:~
→.ssh/~.pubというファイルをCentOSに転送
scp -i .ssh/id_ecdsa scptest1.txt 192.168.56.11:~
→iオプションで秘密鍵ファイルを指定して転送
ssh-agentコマンド
書式
ssh-agent【オプション】コマンド
概要
SSH用の認証エージェントを起動し、秘密鍵情報を保持
引数
・コマンド:エージェントの子プロセスとしてコマンドを実行
使用例
ssh-agent bash
→認証エージェントを起動
ssh-agentコマンドの説明
・ssh-agentによって起動されたシェルでssh-addやsshコマンドを実行する
・バックグラウンドで動作する
・公開鍵認証のSSH接続の際、パスフレーズを求められないようにしたい場合に使用する
ssh-addコマンド
書式
ssh-add【オプション】ファイル
概要
ssh-agentに秘密鍵を追加
主なオプション
-l
→登録されている秘密鍵情報を表示
引数
・ファイル:登録する秘密鍵のパスを指定
使用例
ssh-add .ssh/id_ecdsa
→秘密鍵をエージェントに追加
ssh-add -l
→上記のコマンドにより鍵が登録されたことを確認
gpgコマンド
書式
gpg【オプション】
概要
GnuPGによる公開鍵ペアの管理、暗号化の実装
主なオプション
ーーgenーkey
→鍵ペアの作成
ーーlistーkeys
→キーリングの内容を表示
-a
→インポート、エクスポートの際、ASCII情報で扱う(規定ではバイナリ情報)
-o ファイル名
→出力するファイルを指定
ーーexport メールアドレス
→指定したアドレスの鍵をエクスポート
ーーimport ファイル名
→指定したファイルに含まれる鍵をインポート
ーーsign
→ファイルに署名する
ーーsignーkey メールアドレス
→鍵に署名を行う
-e
→指定したファイルを暗号化
-r メールアドレス
→暗号化の際に使用する鍵のアドレスを指定
-b
→署名ファイルを生成(分離署名)
ーーverify
→署名ファイルを検証
使用例
gpg hogehoge.txt.gpg
→送られてきた暗号化ファイル「hogehoge.txt.gpg」を自分の秘密鍵を使用して複号
GnuPGに関連するファイルの置かれるディレクトリ
~/.gnupg/
GnuPGを使用した暗号化
・公開鍵暗号方式では受信者の公開鍵で暗号化し、受信者が自身の秘密鍵で複合する
・共通鍵暗号方式ではデータを送信する相手ごとに鍵を作成した方がよい
gpg-agentコマンド
書式
gpg-agent【オプション】
概要
GnuPGで利用する秘密鍵を管理し、パスフレーズによる認証状態を一定時間キャッシュする
主なオプション
ーーdaemon
→デーモンモード(バックグラウンド)で動作
ーーuseーstandardーsocket
→ソケットファイルを標準の場所に配置
1.10.4 クラウドセキュリティの基礎(重要度3)
クラウドサービス
クラウドサービスの主な分類
SaaS(Software as a Service)
・ソフトウェアをサービスとして提供
・ユーザーはインフラも開発環境も意識することなく、単純にソフトウェアを利用する
・ユーザーの責任範囲はデータの保護のみである
PaaS(Platform as s Service)
・ソフトウェアの開発、実行環境をサービスとして提供
・ユーザーは環境構築や保守を意識することなく、開発に専念できる
・ユーザーの責任範囲はデータの保護やアプリケーションの管理
IaaS(Infrastructure as a Service)
・サーバー、ストレージ、ネットワーク等、仮想化されたインフラ環境をサービスとして提供するサービスモデル
・システムの規模をあらかじめ把握できなくても、仮想化により柔軟にリソースを増減できるメリットがある
・ユーザーの責任範囲は、データの保護、ファイアウォールの設定、アプリケーションの管理、ゲストOSの管理など、インフラ環境以外の部分である
代表的なIaaSのサービス
・AWS(Amazon Web Service)
・GCP(Google Cloud Platform)
・Microsoft Azure
・さくらのクラウド
・GMOクラウド
・ニフクラ
クラウドの種類
・パブリッククラウド:不特定多数の企業や個人が利用する
・プライベートクラウド:自社専用に環境を構築する
パブリッククラウドのサービス事業者が提供している機能
・管理コンソール
・ファイアウォール
・ルーティング
管理コンソール
・Webブラウザから操作する
・多要素認証は、ID/パスワードとトークンのワンタイムパスワードなど、異なる要素の認証の組み合わせ
・多段階認証は、同じ認証要素で複数回認証を行う
・多段階認証より多要素認証の方が安全性が高い
パブリッククラウドの特徴
・リージョン
・揮発性ストレージ
・クラウドサービス事業者の制約による管理
リージョン
・データセンターが配置されている、地理的に分離された地域のこと
・リージョンによって法律や制限が異なる場合がある
・リソースやインスタンスごとに複数のリージョンを選択できる
・災害やハードウェア障害に備えて複数のリージョンを利用するとよい
揮発性ストレージ
・揮発性ストレージはインスタンスを停止するとデータは消失する
・揮発性ストレージは不揮発性ストレージよりもI/Oパフォーマンスが良い
・不揮発性ストレージはインスタンスを停止しても永続的にデータを保持する