本記事ではLPIC1(Ver4.0)102試験に合格するため『主題110:セキュリティ』について自分が勉強したことをまとめました。
LPIC1(Ver4.0)102試験の出題範囲はLPICのサイト(102試験範囲)に掲示されており、以下の様になっています。
目次
目次
事前準備
1.Linuxの環境を用意する
LPICを勉強する上でLinuxの環境で実際に動かしてみるとよいです。Windows上でも仮想Linux環境を構築すれば簡単にLinuxを動かすことができます。以下にWindows上でubuntuを構築する方法をまとめました。参考にしてください。
2.テキストを購入する
『Linux教科書 LPICレベル1 Version4.0対応』を参考にしながら勉強しました。このテキストにそって重要なところのみピックアップしてまとめているので大元はこちらのテキストを参照してください。
(110.1)セキュリティ管理業務の実施
SUID/SGIDビットが設定されているファイルを探す
SUIDが設定されているファイルの調査
SGIDが設定されているファイルの調査
所有者がrootのファイルの調査
ユーザのパスワード情報の設定
・ユーザのパスワード情報は「passwdコマンド」で変更できる(スーパユーザ以外は自分のパスワードのみ変更可能)
・パスワード情報は「/etc/passwdファイル」かシャドウパスワードを使った場合は「/etc/shadow」に記載されている
・「chageコマンド」を使うことでパスワードに有効期限を設定することも可能
chageコマンド(パスワードの有効期限を設定)
コマンド詳細
http://www.atmarkit.co.jp/ait/articles/1612/07/news016.html
補足
・引数なしで実行すると対話モードで指定できる
開いているポートの調査
開いているポートを確認するコマンドは以下
・「netstat -atu コマンド」
・「lsof -i コマンド」
ポートスキャンして開いているポートを確認するコマンドは以下
・「nmapコマンド」
ポートを開いているプロセスを確認するコマンドは以下
・「fuserコマンド」
netstat -atu コマンド(ポートを確認)
オプション
-a:全てのソケットを表示する
-t:TCPソケットを表示する
-u:UDPソケットを表示する
コマンド詳細
http://www.atmarkit.co.jp/ait/articles/1412/10/news003.html
lsof -i コマンド(ポートを確認)
オプション
-i:ネットワークソケットファイルを指定する
コマンド詳細
https://qiita.com/hypermkt/items/905139168b0bc5c28ef2
補足
・「lsofコマンド」自体はプロセスが開いているファイルを表示するコマンド
・ポート以外にもIPアドレスやプロセスIDなどを表示できる
nmapコマンド(ポートスキャンを実施)
オプション
詳細を参照
コマンド詳細
http://itpro.nikkeibp.co.jp/atcl/column/14/230520/072800001/
fuserコマンド(ポート使用しているプロセスの特定)
オプション
詳細を参考
コマンド詳細
https://webkaru.net/linux/fuser-command/
ユーザ操作の制限
ユーザ操作の制限する対象としては以下のようなものがある
・ログインの禁止
方法1.「/etc/nologinファイル」を作成
方法2.ユーザのログインシェルを/bin/falseや/sbin/nologinにする
・リソースの制限
「ulimitコマンド」でリソース制限できる
ulimitコマンド(リソース制限)
コマンド詳細
https://webkaru.net/linux/fuser-command/
sudoの設定方法と利用方法
・設定方法
sudoを設定するにはrootユーザが「visudoコマンド」を実行し、「/etc/sudoersファイル」を変更する
・利用方法
以下のsudoコマンドの章を参照
/etc/sudoersファイル(sudoの設定ファイル)
補足
・「NOPASSWD:」を指定するとコマンド実行時にパスワード確認がされなくなる
sudoコマンド(特定ユーザでコマンド実行)
オプション
・「-l」:許可されたコマンドを表示する
・「-u ユーザ名」:指定されたユーザの権限でコマンドを実行
・「-uオプション」がない場合はrootで実行される
コマンド詳細
http://itpro.nikkeibp.co.jp/article/COLUMN/20071205/288862/
suコマンド(ユーザーの切替)
コマンド詳細
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230892/
補足
・「-,-l」でログインシェルを使用してユーザーを切り替える
⇒指定し中れば同じシェル上でユーザを切替えることになる
(110.2)ホストのセキュリティ設定
使用していないネットワークサービスをオフにする
使用していないネットワークサービスをオフにするする方法は「/etc/xinetd.dディレクトリ」配下にあるサービスごとの設定ファイルにdisableを指定する。ファイルのフォーマットは後述
inetdに関するディレクトリ
/etc/inetd.conf(inetdの設定ファイル)
補足
・ソケットタイプはTCPだとstream、UDPだとdgram
・フラグはサービス要求時の処理方法を示し、waitかnowaitのどちらか
waitは処理が完了するまで待機、nowaitは待機せず次の要求を処理
/etc/hosts.allow,etc/hosts.deny(TCP Wrapperの設定ファイル)
補足
・参照順は/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/配下のファイル(サービスごとの設定)
設定ファイルは以下のように幾つかのパラメータを指定する
(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の設定ファイル)
設定ファイルは以下のように幾つかのパラメータを指定する
補足
・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コマンド(リモートマシンにログイン)
コマンド詳細
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の起動)
コマンド詳細
https://qiita.com/Yarimizu14/items/6a4bab703d67ea766ddc
ssh-addコマンド(秘密鍵を登録)
オプション
・引数なしで実行すると、秘密鍵を登録できる
・「-l」で秘密鍵の一覧を表示
コマンド詳細
https://qiita.com/Yarimizu14/items/6a4bab703d67ea766ddc
暗号化に関するコマンド
ファイルを暗号化するにはGnuPG(GNU Privacy Guard)を利用する。
GnuPGは「gpgコマンド」で操作できる。
gpg –gen-key コマンド(公開鍵と秘密鍵を生成)
補足
・対話型で公開鍵と秘密鍵のペアを生成できる
・鍵の種類や長さ、有効期限の選択ができる
・鍵生成時にはパスフレーズを設定する必要がある
・公開鍵は「~/.gnupg/pubring.gpg」、秘密鍵は「~/.gnupg/secring.gpg」に作成
・「gpg –gen-keyコマンド」と「ssh-keygenコマンド」はgenとkeyの順番が逆なので注意
gpg –list-keys コマンド(公開鍵の一覧表示)
gpg –gen-revoke コマンド(鍵の失効証明書作成)
補足
・対話型で鍵の失効証明書を生成できる
共通鍵でのファイル暗号化
ファイル暗号化の方法としては共通鍵を使ったものと公開鍵をつかったものの2種類ある。
共通鍵でファイル暗号化
補足
・暗号化されたファイル名は「ファイル名.gpg」となる
共通鍵でファイル複合化
補足
・複合化時にはパスフレームが必要
公開鍵でのファイル暗号化
ファイル暗号化の方法としては共通鍵を使ったものと公開鍵をつかったものの2種類ある。
公開鍵で暗号化するためには公開鍵を送信側(公開鍵使用元)と受信側(公開鍵発行元)で以下のような手順で共有する必要がある。
1.データ受信側で公開鍵をエクスポート
2.エクスポートした公開鍵ファイルを送信側に転送する
ex)「scpコマンド」など
3.データ送信側で公開鍵をインポート
4.データ送信側で公開鍵に署名する
データ受信側で公開鍵をエクスポート
補足
・公開鍵をエクスポートするファイル名で生成された公開鍵のファイルを「scp」コマンド等で送信側に転送する。
データ送信側で公開鍵をインポート
データ送信側で公開鍵に署名する
補足
・対話型で署名を行う
・パスフレーズを入力する必要がある
公開鍵でのファイル暗号化
補足
・暗号化されたファイル名は「ファイル名.asc」となる
・「-eオプション」は–encryptの略で暗号化を指示
・「-rオプション」は–recipientの略で送り先のメールアドレスを指定
秘密鍵でファイル複合化
補足
・複合化時には(自分の)パスフレームが必要
鍵の管理を対話的に行う
関連するページ
LPIC-1 試験対策のまとめページ
(前の章) 【LPIC1対策(9)】主題109:ネットワークの基礎
以上!!!