【LPIC1対策(10)】主題110:セキュリティ

スポンサーリンク


本記事ではLPIC1(Ver4.0)102試験に合格するため『主題110:セキュリティ』について自分が勉強したことをまとめました。

LPIC1(Ver4.0)102試験の出題範囲はLPICのサイト(102試験範囲)に掲示されており、以下の様になっています。




目次

目次



事前準備

1.Linuxの環境を用意する


LPICを勉強する上でLinuxの環境で実際に動かしてみるとよいです。Windows上でも仮想Linux環境を構築すれば簡単にLinuxを動かすことができます。以下にWindows上でubuntuを構築する方法をまとめました。参考にしてください。


Windows上でubuntuを構築する方法

2.テキストを購入する


Linux教科書 LPICレベル1 Version4.0対応』を参考にしながら勉強しました。このテキストにそって重要なところのみピックアップしてまとめているので大元はこちらのテキストを参照してください。



(110.1)セキュリティ管理業務の実施



SUID/SGIDビットが設定されているファイルを探す


SUIDが設定されているファイルの調査

【SUIDの調査】
> find / -perm -u+s -ls


SGIDが設定されているファイルの調査

【SGIDの調査】
> find / -perm -g+s -ls


所有者がrootのファイルの調査

【所有者がrootのファイルの調査】
> find / -uid 0 -ls
> find / -user 0 -ls
> find / -user root -ls



ユーザのパスワード情報の設定

・ユーザのパスワード情報は「passwdコマンド」で変更できる(スーパユーザ以外は自分のパスワードのみ変更可能)
・パスワード情報は「/etc/passwdファイル」かシャドウパスワードを使った場合は「/etc/shadow」に記載されている
・「chageコマンド」を使うことでパスワードに有効期限を設定することも可能


chageコマンド(パスワードの有効期限を設定)

【パスワードの有効期限を設定】
> chage [オプション] [ユーザ名]

オプション

コマンド詳細
http://www.atmarkit.co.jp/ait/articles/1612/07/news016.html

補足
・引数なしで実行すると対話モードで指定できる



開いているポートの調査

開いているポートを確認するコマンドは以下
・「netstat -atu コマンド」
・「lsof -i コマンド」

ポートスキャンして開いているポートを確認するコマンドは以下
・「nmapコマンド」

ポートを開いているプロセスを確認するコマンドは以下
・「fuserコマンド」


netstat -atu コマンド(ポートを確認)

【ポートを確認】
> netstat -atu

オプション
-a:全てのソケットを表示する
-t:TCPソケットを表示する
-u:UDPソケットを表示する

コマンド詳細
http://www.atmarkit.co.jp/ait/articles/1412/10/news003.html


lsof -i コマンド(ポートを確認)

【ポートを確認】
> lsof -i

オプション
-i:ネットワークソケットファイルを指定する

コマンド詳細
https://qiita.com/hypermkt/items/905139168b0bc5c28ef2

補足
・「lsofコマンド」自体はプロセスが開いているファイルを表示するコマンド
・ポート以外にもIPアドレスやプロセスIDなどを表示できる


nmapコマンド(ポートスキャンを実施)

【ポートスキャンを実施】
> nmap [オプション] ターゲット

オプション
詳細を参照

コマンド詳細
http://itpro.nikkeibp.co.jp/atcl/column/14/230520/072800001/


fuserコマンド(ポート使用しているプロセスの特定)

【ポート使用しているプロセスの特定】
> fuser [オプション]

オプション
詳細を参考

コマンド詳細
https://webkaru.net/linux/fuser-command/



ユーザ操作の制限

ユーザ操作の制限する対象としては以下のようなものがある
・ログインの禁止
方法1.「/etc/nologinファイル」を作成
方法2.ユーザのログインシェルを/bin/falseや/sbin/nologinにする

・リソースの制限
「ulimitコマンド」でリソース制限できる


ulimitコマンド(リソース制限)

【リソース制限】
> ulimit [オプション]

オプション

コマンド詳細
https://webkaru.net/linux/fuser-command/



sudoの設定方法と利用方法

・設定方法
sudoを設定するにはrootユーザが「visudoコマンド」を実行し、「/etc/sudoersファイル」を変更する

・利用方法
以下のsudoコマンドの章を参照


/etc/sudoersファイル(sudoの設定ファイル)

【/etc/sudoersファイル書式】
ユーザ名  ホスト名=(実行ユーザ名)  [NOPASSWD:]コマンド
%グループ名  ホスト名=(実行ユーザ名)  [NOPASSWD:]コマンド

補足
・「NOPASSWD:」を指定するとコマンド実行時にパスワード確認がされなくなる


sudoコマンド(特定ユーザでコマンド実行)

【特定ユーザでコマンド実行】
> sudo [オプション] [-u ユーザ名]コマンド

オプション
・「-l」:許可されたコマンドを表示する
・「-u ユーザ名」:指定されたユーザの権限でコマンドを実行
・「-uオプション」がない場合はrootで実行される

コマンド詳細
http://itpro.nikkeibp.co.jp/article/COLUMN/20071205/288862/


suコマンド(ユーザーの切替)

【ユーザーの切替】
> su [オプション] コマンド

コマンド詳細
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230892/

補足
・「-,-l」でログインシェルを使用してユーザーを切り替える
⇒指定し中れば同じシェル上でユーザを切替えることになる



(110.2)ホストのセキュリティ設定



使用していないネットワークサービスをオフにする

使用していないネットワークサービスをオフにするする方法は「/etc/xinetd.dディレクトリ」配下にあるサービスごとの設定ファイルにdisableを指定する。ファイルのフォーマットは後述



inetdに関するディレクトリ


/etc/inetd.conf(inetdの設定ファイル)

【/etc/inetd.confの書式】
サービス名  ソケットタイプ  プロトコル  フラグ  ユーザ名  サーバプログラムへのフルパス  引数

補足
・ソケットタイプはTCPだとstream、UDPだとdgram
・フラグはサービス要求時の処理方法を示し、waitかnowaitのどちらか
 waitは処理が完了するまで待機、nowaitは待機せず次の要求を処理


/etc/hosts.allow,etc/hosts.deny(TCP Wrapperの設定ファイル)

【/etc/hosts.の書式】
サービス名 : アクセス許可/禁止するホスト
(例)
in.telnetd:ALL
ALL:ALL

補足
・参照順は/etc/hosts.allow⇒/etc/hosts.denyで、どちらも指定していない場合はアクセス許可になる
・TCP Wrapperでアクセス制御を行うデーモンはtcpd



xinetdに関するディレクトリ

xinetdはinetdの後継でセキュリティ面が強化された。
inetdのxinetdでは設定ファイルの書式が異なるため互換性がない。
xinetdを使用するときはSIGHUPシグナルで再読み込みする必要がある。
xinetdの設定は全体的な設定を行う/etc/xinetd.confファイルと各サービスごとの/etc/xinetd.d/配下にある設定ファイルから設定される。


/etc/xinetd.confファイル(xinetdの全体的な設定)

/etc/xinetd.confファイルで指定する主なパラメータは以下

詳細
https://www.express.nec.co.jp/linux/distributions/knowledge/network/xinetd.html


/etc/xinetd.d/配下のファイル(サービスごとの設定)

設定ファイルは以下のように幾つかのパラメータを指定する

【/etc/xinetd.d/配下のファイルの書式(例)】
service サービス名
{
    disable    = サービスの有効(yes)/無効(no)
    socket_type    = ソケットのタイプ(TCP/UDP)
    wait    = ウェイトタイム
    user    = ユーザ名
    server    = デーモンへのフルパス
    log_on_failure    += 接続拒否時のログ記録先
    only_from    = 接続を許可する接続元
    noaccess    = 接続を拒否する接続元
    access_times    = アクセス許可する時間帯
}



(110.3)暗号化によるデータの保護



SSHサーバ(sshd)の設定方法


公開鍵と秘密鍵のファイル名

OpenSSHをインストールすると、ホストの公開鍵と秘密鍵が生成される。
・公開鍵のファイル名
/etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/ssh_host_rsa_key.pub
※SSHバージョン2を想定

・秘密鍵のファイル名
/etc/ssh/ssh_host_dsa_key
/etc/ssh/ssh_host_rsa_key
※SSHバージョン2を想定


/etc/ssh/sshd_configファイル(SSHの設定ファイル)

設定ファイルは以下のように幾つかのパラメータを指定する

【/etc/ssh/sshd_configファイルの書式(例)】
#### SSHに関する設定 ####
# SSHで使うポート番号(デフォは22)
Port 22
# SSHのバージョン(バージョン1 or 2)
Protocol 2

#### 鍵の格納場所 ####
# ホストの秘密鍵ファイル(バージョン2想定)
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key

# 公開鍵が格納されるファイル名
AuthorixedKeysFile .ssh/authorixed_keys

#### 認証に関する設定 ####
# 公開鍵認証を使用するか(SSHバージョン2)
PubkeyAuthentication yes
# パスワード認証を許可するか
PasswordAuthentication yes
# X11転送を許可するか
X11Forwarding yes

# rootでのログイン許可
PermitRootLogin no
# 空のパスワードの許可
PermitEmptyPasswords no

補足
・SSHのバージョンのバージョン1は安全でないのでバージョン2を使う
・rootでのログインは許可しない方がいい
・空パスワードは禁止にした方がいい
・ユーザごとの設定ファイルは~/.ssh/configファイル
・X転送を行う時には
1.サーバのsshd_configファイルに「X11Forwarding yes」と設定
2.クライアントのsshd_configファイルに「ForwardX11 yes」と設定



ホスト認証とユーザ認証

認証にはホスト(サーバ)を認証するホスト認証とユーザ(クライアント)を認証するユーザ認証がある。
ホスト認証ではホストの公開鍵をクライアント側で保持し、クライアントが以前接続したことがあるホストかどうかを確認する。
ユーザ認証ではパスワード認証や公開鍵認証を用いて、サーバへのアクセス管理をする。


ホスト認証について

・クライアント側にサーバの公開鍵を登録し、これまで接続したことがあるかどうかをチェックする。
⇒ホストのなりすましを検出できる。
・サーバの公開鍵はクライアント側の~/.ssh/known_hostsファイルに登録される。
・~/.ssh/known_hostsファイルにはsshサーバのホスト名、IPアドレス、公開鍵が登録される。
・初めてのホストへアクセスるときは、「このホストを信用するか?」の確認が行われ「yes」しないとアクセスできない。
etc/ssh/ssh-known_hostsファイルには全ユーザが使用可能なサーバを設定する


公開鍵認証(ユーザ認証)について

・サーバへのアクセス管理をする仕組みの一つ
・公開鍵認証をするには、事前にクライアントの公開鍵をサーバに登録が必要
・サーバへの公開鍵登録方法は後述
・公開鍵認証では接続時にパスワードではなくパスフレームが尋ねられる
・クライアント側で「ssh-agent」を設定することでパスフレームを登録し、毎回入力しなくて済むことができる


サーバへの公開鍵登録方法

1.クライアント側で公開鍵と秘密鍵を作成する
・「ssh-keygenコマンド」で公開鍵と秘密鍵のペアを作成できる。
・秘密鍵を利用するためのパスフレーズを設定する必要がある
・公開鍵は「~/.ssh/id_rsa.pubファイル」、「~/.ssh/id_dsa.pubファイル」に生成
・秘密鍵は「~/.ssh/id_rsaファイル」、「~/.ssh/id_dsaファイル」に生成

2.サーバにクライアントの公開鍵を登録する
・サーバの「~/.ssh/authorized_keysファイル」にクライアント側の公開鍵(id_rsa.pub,id_dsa.pub)を追加する
・サーバへのクライアント公開鍵の転送は「scpコマンド」を使うとよい
・「~/.ssh/authorized_keysファイル」には所有者のみ読み書きできるようにする(chmodで644とする)



SSHに関するコマンド


sshコマンド(リモートマシンにログイン)

【リモートマシンにログイン】
> ssh [オプション] [ログインユーザ名@]ホスト名 [コマンド]

オプション

コマンド詳細
https://webkaru.net/linux/ssh-command/

http://www.atmarkit.co.jp/ait/articles/1701/26/news015.html

補足
・sshコマンドとscpコマンドは通信が公開鍵で暗号化される
・sshで特定サーバ1を経由して特定サーバ2にアクセスしたい時は「ssh -o ProxyCommand=xxxx」を使用する


ssh-agentコマンド(ssh-agentの起動)

【ssh-agentの起動】
> ssh-agent bash

コマンド詳細
https://qiita.com/Yarimizu14/items/6a4bab703d67ea766ddc


ssh-addコマンド(秘密鍵を登録)

【秘密鍵を登録】
> ssh-add [オプション]

オプション
・引数なしで実行すると、秘密鍵を登録できる
・「-l」で秘密鍵の一覧を表示

コマンド詳細
https://qiita.com/Yarimizu14/items/6a4bab703d67ea766ddc



暗号化に関するコマンド

ファイルを暗号化するにはGnuPG(GNU Privacy Guard)を利用する。
GnuPGは「gpgコマンド」で操作できる。


gpg –gen-key コマンド(公開鍵と秘密鍵を生成)

【公開鍵と秘密鍵を生成】
> gpg –gen-key

補足
・対話型で公開鍵と秘密鍵のペアを生成できる
・鍵の種類や長さ、有効期限の選択ができる
・鍵生成時にはパスフレーズを設定する必要がある
・公開鍵は「~/.gnupg/pubring.gpg」、秘密鍵は「~/.gnupg/secring.gpg」に作成
・「gpg –gen-keyコマンド」と「ssh-keygenコマンド」はgenとkeyの順番が逆なので注意


gpg –list-keys コマンド(公開鍵の一覧表示)

【公開鍵の一覧表示】
> gpg –list-keys


gpg –gen-revoke コマンド(鍵の失効証明書作成)

【鍵の失効証明書作成】
> gpg -o 失効証明書ファイル名 –gen-revoke メールアドレス

補足
・対話型で鍵の失効証明書を生成できる



共通鍵でのファイル暗号化

ファイル暗号化の方法としては共通鍵を使ったものと公開鍵をつかったものの2種類ある。


共通鍵でファイル暗号化

【共通鍵で暗号化】
> gpg -c 暗号化するファイル名

補足
・暗号化されたファイル名は「ファイル名.gpg」となる


共通鍵でファイル複合化

【共通鍵で複合化】
> gpg 暗号化されたファイル名

補足
・複合化時にはパスフレームが必要



公開鍵でのファイル暗号化

ファイル暗号化の方法としては共通鍵を使ったものと公開鍵をつかったものの2種類ある。

公開鍵で暗号化するためには公開鍵を送信側(公開鍵使用元)と受信側(公開鍵発行元)で以下のような手順で共有する必要がある。
1.データ受信側で公開鍵をエクスポート
2.エクスポートした公開鍵ファイルを送信側に転送する
ex)「scpコマンド」など
3.データ送信側で公開鍵をインポート
4.データ送信側で公開鍵に署名する


データ受信側で公開鍵をエクスポート

【公開鍵をエクスポート】
> gpg -o 公開鍵をエクスポートするファイル名 -a –export データ受信側のメールアドレス

補足
・公開鍵をエクスポートするファイル名で生成された公開鍵のファイルを「scp」コマンド等で送信側に転送する。


データ送信側で公開鍵をインポート

【公開鍵をインポート】
> gpg –import データ受信側でエクスポートされた公開鍵ファイル名


データ送信側で公開鍵に署名する

【公開鍵に署名】
> gpg –sign-key データ送信側のメールアドレス

補足
・対話型で署名を行う
・パスフレーズを入力する必要がある


公開鍵でのファイル暗号化

【共通鍵で暗号化】
> gpg -e -a -r データ送り先のメールアドレス 暗号化するファイル名

補足
・暗号化されたファイル名は「ファイル名.asc」となる
・「-eオプション」は–encryptの略で暗号化を指示
・「-rオプション」は–recipientの略で送り先のメールアドレスを指定


秘密鍵でファイル複合化

【秘密鍵で複合化】
> gpg 暗号化されたファイル名
> gpg –output 暗号化されたファイル名 –decrypt 秘密鍵のファイル名

補足
・複合化時には(自分の)パスフレームが必要


鍵の管理を対話的に行う

【鍵の管理を対話的に行う】
> gpg –edit-key



関連するページ


LPIC-1 試験対策のまとめページ

【LPIC1対策】LPIC-1試験対策 まとめ
LPICレベル1の出題範囲について自分が勉強したことをまとめました。


(前の章) 【LPIC1対策(9)】主題109:ネットワークの基礎

【LPIC1対策(10)】主題110:セキュリティ
本記事ではLPIC1(Ver4.0)102試験に合格するため『主題110:セキュリティ』について自分が勉強したことをまとめました。







以上!!!

スポンサーリンク

フォローする

スポンサーリンク