不惑にしてまだ何者でもない者のブログ

Arduino関連、Raspberry Pi関連、プログラミング学習

LinuCレベル1取得に向け勉強中:第10章 セキュリティ

2020-10-14 22:51:11 | LinuC
LinuCレベル1合格教本で、勉強を進める。
いよいよ大詰め。
残すは、10章と11章だけであるが、11章は読み物だけだったので、先に読んでしまったので、また、後でまとめようと思う。
今回は、『第10章 セキュリティ』である。
難しそうだが、気になってた部分だな。😏 

 

10.1 セキュリティ管理業務の実施

10.1.1 SUID/SGIDが有効になっているファイルの検索

  • SUIDやSGIDビットが不要な実行ファイルに設定されていると、セキュリティ上の問題となる可能性がある。
  • SUIDビットの有効化
    • chmod u+s `which touch`
  • SUIDが有効になっている実行ファイルの検索
    • find /usr -perm -4000 -ls
  • SUIDビットの無効化
    • chmod u-s /bin/touch

10.1.2 shadowファイルの特徴とユーザー/パスワードの有効期限

  • shadowファイルは、passwdやgroupファイルと異なり、rootユーザーしか参照できない。
  • ユーザーアカウントやパスワードには有効期限を設定できる。
    • usermod -e 日付 アカウント名
      usermod -e 2020-10-15 test01
  • usermodコマンドのうち、アカウントの有効期限、無効化にかんするオプションの確認
    • usermod [オプション] ユーザー名:ユーザーの設定を変更
      -e 年−月−日:アカウントの有効期限を設定
      -L:アカウントをロック(無効化)
      -U:アカウントのロックを解除
  • パスワードの有効期限は、chageコマンドやpasswdコマンドで設定できる。
    • chage [オプション] ユーザー名:パスワードの有効期限情報を設定
      -l(エル):有効期限情報を表示
      -m 日数:パスワードを変更できる最短日数を設定
      -M 日数:パスワードの有効期限(使用できる最大日数)を設定
      -I(アイ) 日数:パスワードの有効期限が切れてからアカウントを無効化するまでの日数を設定
      -W 日数:パスワードの有効期限切れの警告が何日前から表示されるか設定
      -E 年-月-日:アカウントの有効期限を設定
      ※ オプションなしの場合、対話式で設定
    • passwd オプション ユーザー名:パスワードに関する情報を設定
      -x 日数:パスワードの有効期限を設定
      -l:アカウントをロック(無効化)
      -u:アカウントのロックを解除
      -e:パスワードを有効期限切れにする
  • ログインシェルを以下のものにすると、bashなどの通常シェルを開くことができず、通常の対話式シェルができなくなる。
    • /bin/false
    • /sbin/nologin
  • 以下のように/etc/nologinファイルを作成すると、一般ユーザーによるログインをすべて禁止できる。
    • touch /etc/nologin

10.1.3 ユーザー環境の切り替え

  • su [オプション] [ユーザー名]:ユーザー環境の入れ替え
    -:カレントディレクトリや設定されている変数など、ユーザー環境を切り替える
  • sudo [オプション] コマンド:別のユーザー権限でコマンドを実行
    -u ユーザー名:指定したユーザー権限でコマンドを実行(指定しなかった場合はrootユーザー権限でコマンドを実行)
    • sudoコマンドを利用するには、/etc/sudoersファイルにsudoコマンドを実行できるユーザーと実行できる操作を設定しておく必要がある。
    • sudoersファイルの編集は、visudoコマンドで行う。
  • visudo [オプション]:sudoersファイルを編集し、sudoコマンドの実行設定を行う。

10.1.4 ファイルやポートを開いているプロセスの確認

  • lsof [オプション] [ファイル]:ファイルやポートを開いているプロセスを表示
    -i:ポート番号:指定したポートを開いているプロセスを表示
  • fuser [オプション] [ファイル]:ファイルやポートを開いているプロセスを表示
  • nmap [オプション] ホスト:指定したホストが待機しているポートを確認(ポートスキャンを実行)

10.1.5 使用するリソースの制限

  • ulimit オプション:利用できるリソース量を制限
    -a:対象となるリソースと制限値の一覧を表示
    -c ブロックサイズ:コアダンプファイルのサイズを制限
    -n ファイル数:同時に開くことができるファイル数を制限

10.1.6 ユーザーのログイン情報の調査

  • who [オプション]:現在ログイン中のユーザーと端末の情報を表示
  • w [オプション]:現在ログイン中のユーザーと端末、実行しているプロセスの情報を表示
  • last [オプション]:ホスト上でのログイン履歴
  • これらの情報の元になっているのは、/var/run/utmpファイル、/var/log/wtmpファイル(表10.1)
    →これらはバイナリファイル

表10.1 whoコマンド、wコマンド、lastコマンドが参照するファイル
ファイル
参照するコマンド
/var/run/utmpwho, w
/var/log/wtmplast

10.1.7 自動ログアウト

  • TMOUT変数を利用すると、一定時間操作がされていない場合に自動ログアウトするように設定できる。
    • export TMOUT=60

10.2 ホストのセキュリティ設定

10.2.1 不要なネットワークサービスの停止

  • sytemdを使用した方法
    • 停止:systemctl stop httpd
    • 無効化:systemctl diable httpd
    • 確認:systemctl status httpd
  • systemdが導入される前の環境では、initがプロセスの自動実行を管理しているため、以下の構文でサービスを停止することができる。
    • 無効化:chkconfig httpd off
    • 停止:service httpd stop
    • 確認:service httpd status
  • chkconfig [サービス名] [on/off]:init環境における指定したサービスの自動起動の有効化/無効化
  • service サービス名 操作:init環境における指定したサービスの制御
    • serviceコマンドは、/etc/init.d/ディレクトリに格納されているスクリプトを動作させるコマンド

10.2.2 スーパーサーバーの利用

  • スタンドアロンサーバー:サーバーアプリケーションを常駐させる場合に個々のサーバープロセスが起動する手法。
  • スーパーサーバー:以前は、すべてのサーバーを個々に常駐させず、inetd, xinetdといったスーパーサーバーを常駐させ、あるポートにユーザーが接続してきたら対応するアプリケーションを起動するという手法が取られていた。
  • inetdの設定ファイルは、/etc/inetd.conf
    • もし、inetd経由で不要なサービスが起動するようになっていた場合、以下のように該当箇所をコメントにすることでサービスを停止する。
      vi /etc/inetd.conf
      system restart inetd
  • Linuxホストにリモート接続してシェルを起動するコマンドとして、以前はtelnetを使用していた。
    • telnetは既定で通信経路の暗号化を行わないなど、SSHのほうがセキュリティ的にも優れている。
    • 何らかの理由でtelnetサーバーを有効にしたい場合は、歴史的な経緯からxinetd経由で管理を行うことがある。
表10.2 xinetdで利用する設定ファイル
ファイル
内容
/etc/xinetd.confxinetd全般の設定
/etc/xinetd.d/ディレクトリ内のファイルxinetdで管理するプログラムの設定

表10.3 xinetdの設定ファイルで設定できる内容
設定項目
説明
diablexinetd経由での接続の有効/無効化(noで有効化)
only_fromxinetd経由での接続を許可するホスト/ネットワーク
no_accessxinetd経由での接続を拒否するホスト/ネットワーク

telnetのインストール
  • Debian:
    apt-get install telnetd
  • CentOS:
    yum -y install xinetd
    cat /etc/xinetd.d/telnet // 確認
    systemctl start xinetd
    lsof -i:23 // 確認
  • telnet ホスト [ポート番号]:telnetサーバーもしくは指定したポート宛に接続

10.2.3 firewalldによるパケットフィルタリング

  • LinuxカーネルにはNetfilterというカーネルモジュールが用意されており、パケットフィルタリングやアドレス変換を実現する。
    • その設定のためのユーティリティとして、firewalldやiptablesが用意されている。
  • パケットフィルタリング:パケットに対して、サービスやポート番号などによる許可/拒否のルール設定を行い、ルールに従ったパケットの送受信を行うことで想定外の送受信が成立しないように構成する仕組みのことである。
  • firewall-cmd オプション:firewalldを介してNetfilterの制御
    • 主なオプション
      --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:パブリックエリア用(デフォルト)
      dmz:DMZネットワーク用
      trusted:すべての接続を許可
      drop:すべての接続を拒否
  • iptables オプション:Netfilterの制御(firewalld以前)
    • 主なオプション
      -L [チェイン]:ルールの表示
      -A [チェイン] ルール:ルールを末尾に追加
      -D [チェイン] ルール:ルールの削除
      -P チェイン ターゲット:チェインに対して、ポリシー設定を行う
    • 主なターゲット
      ACCEPT:パケットを許可
      DROP:パケットを破棄

10.3 暗号化によるデータの保護

10.3.1 暗号化技術の概要

  • 暗号方式と使用する鍵の違い
    • 共通鍵暗号方式:
      • 暗号化と復号を同じ鍵で行う
      • 何らかの形で、事前に鍵を共有する必要がある
      • 公開鍵暗号方式に比べて処理が早い
    • 公開鍵暗号方式:
      • 暗号化と復号で異なる鍵を使う。
        暗号化:受信者の公開鍵、復号:受信者の秘密鍵
      • 事前に鍵を共有する必要がない
      • 共通鍵暗号方式に比べて処理に時間がかかる
    • 共通鍵暗号方式に分類されるアルゴリズムに、DESやAESがある。
      • DESは1976年にNIST(米国標準技術研究所)によりFIPS(公式連邦情報処理標準)として採用されたが、現在ではアルゴリズムに脆弱性が発見されており、その位置をAESに取って変わられた。
      • AESは、2000年にFIPSとして採用されたアルゴリズムであり、無線LAN通信の暗号化などで現在も利用されている。
    • 公開鍵暗号方式に分類されるアルゴリズムに、RSAがある。
      • RSAは、発明者であるRon Rivest, Adi Shamir, Leonard Adelmannの頭文字から名前が付けられたアルゴリズムで、大きな数の素因数分解が困難であることを利用して暗号化処理を行う。

10.3.2 OpanSSH

  • SSHにおける認証の流れ
    • ① ホスト認証:接続先のサーバーを認証
    • ② ユーザー認証:接続元のユーザーを認証
      • ②-1 公開鍵認証
      • ②-2 パスワード認証
  • ssh [オプション] [ユーザー@]ホスト [コマンド]:sshにリモート接続を行う。
    -L:ポート転送を行う
    -A:ssh-agentによる鍵転送を行う
    -l ユーザー:ユーザー名を指定
    -i:秘密鍵ファイルを指定

10.3.3 ユーザー認証における公開鍵の利用

  • ユーザー認証における公開鍵の利用の流れ
    • ① ssh-keygenコマンドで生成
    • ② ~/.ssh/authorized_keysに登録
    • ③ SSH接続時、接続先の公開鍵と接続元の秘密鍵により認証
  • ssh-keygen [オプション]:SSH接続で利用する公開鍵ペアを生成する
    -t アルゴリズム:公開鍵ペアを生成する際に利用するアルゴリズムを指定。rsa(デフォルト)、dsa、ecdsaもしくはed25519を指定できる。
    -s ビット数:生成する鍵のビット数を指定
    -a ラウンド数:ed25519で鍵を生成する際のKDFラウンド数を指定
    -C "コメント":鍵データに付属するコメントを指定

表10.4 ssh-keygenコマンドで指定できる暗号化アルゴリズムと鍵のビット数
鍵の種類(アルゴリズム)
説明
ビット数
RSA大きな数の素因数分解の困難さを利用したアルゴリズム1024
2048(デフォルト)
4096
dsa1993年にNISTによりFIPSとして採用されたアルゴリズムで、離散対数問題の困難さを利用1024
ecdsa2009年にNISTによりFIPSとして採用(dsaのものを改定)されたアルゴリズムで、楕円曲線上の離散対数問題の困難さを利用256, 384, 521
ed25519楕円曲線Curve25519上の離散対数問題の困難さを利用256

公開鍵をホスト側に転送するには、scpコマンドを使う。
  • scp [オプション] コピー元 コピー先:SSHによりリモートホスト上に、もしくはリモートホスト上からファイルをコピー
    -i:秘密鍵ファイルを指定
実行のたびにパスフレーズの入力を要求しないようにする
  • ssh-agent [オプション] コマンド:SSH用の認証エージェントを起動し、秘密鍵情報を保持
  • ssh-add [オプション] ファイル:ssh-agentに秘密鍵を追加
    -l:登録されている秘密鍵情報を表示

10.3.4 SSHによるポート転送

  • sshコマンドを-Lオプションを指定した実行すると、SSH通信を介して通常は暗号化されない通信を暗号化するため、ポート転送を実装できる。
    • ssh -L 2323:192.168.56.11:23 192.168.56.11

10.3.5 GnuPGによるデータの暗号化と復号

GnuPGは公開鍵暗号方式を利用し、メールやファイルに電子署名を付けたり、暗号化したりできるプログラム。
  • gpg [オプション]:GnuPGによる公開鍵ペアの管理、暗号化の実行
    --gen-key:鍵ペアの作成
    --list-keys:キーリングの内容を表示
    -a:インポート、エクスポートの際、ASCII情報で扱う(既定ではバイナリ情報)
    -o ファイル名:出力するファイルを指定
    --export メールアドレス:指定したアドレスの鍵をエクスポート
    --import ファイル名:指定したファイルに含まれる鍵をインポート
    --sign-key メールアドレス:鍵に署名を行う
    -e:指定したファイルを暗号化
    -r メールアドレス:暗号化の際に使用する鍵のアドレスを指定
    -b:署名ファイルを生成(分離署名)
    --verify:署名ファイルを検証
CentOS環境では既定でgpg-agentコマンドが動作しており、利用した秘密鍵情報を保持するようになっている。
  • gpg-agent [オプション]:GnuPGで利用する秘密鍵を管理
    --daemon:デーモンモード(バックグラウンド)で動作
    --use-standard-socket:ソケットファイルを標準の場所に配置

10.3.6 GnuPGによるデジタル署名

  • デジタル署名は、秘密鍵で暗号化したファイル(署名ファイル)を生成し、公開鍵で復号する。
  • 以下の手順は、testuserが作成したファイルをrootユーザーの環境で検証している例
    • $ echo sign test > signtest.txt
      $ gpg -b -a signtest.txt
      $ cp sign* /tmp/
    • 署名が正しいことを確認する例:
      # cp /tmp/sign* .
      # gpg --verify signtest.txt.asc signtest.txt
      gpg: 2020年10月15日 06時53分54秒 JSTにRSA鍵ID DBD07E89で施された署名
      gpg: "Naomi Inoue "からの正しい署名
    • 署名が正しく検証されないことを確認する例:
      # echo test >> signtest.txt
      # gpg --verify signtest.txt.asc signtest.txt
      gpg: 2020年10月15日 06時53分54秒 JSTにRSA鍵ID DBD07E89で施された署名
      gpg: "Naomi Inoue "からの*不正な*署名

10.4 クラウドセキュリティの基礎

10.4.1 クラウドサービス

  • クラウドサービスはインターネット上で提供されているサービスで、利用者(カスタマー)はサーバーやソフトウェアなどを所有することなく、さまざまな機能・サービス・アプリケーションを利用できるという特徴がある。
表10.5 クラウドサービスの主な分類
分類
概要
SaaS(Software as a Service)ソフトウェアをクラウドサービス上で提供
PaaS(Platform as a Service)開発プラットフォームをクラウドサービス上で提供
IaaS(Infrastructure as a Service)インフラ環境をクラウドサービス上で提供

  • IaaS:仮想マシンやネットワーク環境といったインフラ環境をクラウドサービス上で提供するもので、代表的なものは以下の通り。
    • AWS(Amazon Web Service)
    • GCP(Google Cloud Platform)
    • Microsoft Azure
    • さくらのクラウド
    • GMOのクラウド
    • ニフクラ

10.4.2 オンプレミス環境とパブリッククラウド環境

  • オンプレミス環境
    Linuxホストを構成する際、自社の施設内やデータセンターに物理サーバなどのハードウェアやネットワーク回線を用意して構成する環境のこと。
  • パブリッククラウド環境
    クラウド環境でLinuxホストを構成し、不特定多数のユーザーに対してサービスを提供する形態のクラウドサービス環境のこと。


10.4.3 パブリッククラウド環境における認証構成

  • パブリッククラウド環境を利用する場合、管理コンソール(管理用のWebページ)に接続して設定を行う。
  • そのため、接続時の認証処理はとくに厳密に管理する必要がある。
    • 通常のパスワード認証の他、ワンタイムパスワード、バックアップコードなどを用いた多要素認証(MFA:Multi-Factor Authentication)を有効にすることが推奨される。
  • Linuxインスタンスには、SSHで接続して操作するのが一般的。
    • 管理コンソールは、クラウドサービスの管理に利用。
  • インスタンスにはプライベートアドレスが割り当てられ、NAT機能によりグローバルアドレスで接続できるように構成されている。
    • なお、IPアドレスが固定されるサービスを利用していない場合、インスタンスを停止したタイミングでそれまで使用していたグローバルアドレスが解放され、次回起動時には別のグローバルアドレスが割り当てられる。
  • クラウドサービス上でfirewalldなどによりパケットの接続を許可するだけでなく、クラウドサービス側でも接続許可の設定をしないと、各種サービスに接続できない可能性がある。

10.4.4 ストレージの利用

  • クラウドサービス上でインスタンスを構成する際は、ストレージも一緒に構成する。
    • OSなどの領域に利用するストレージは、インスタンス停止時にもデータが保持される不揮発性ストレージを利用するが、クラウドサービスによっては揮発性ストレージ(エフェメラルディスク)を利用できる場合もある。
    • 揮発性ストレージは、インスタンス起動中のみ利用できる高速な読み書きが可能な領域。
  • ストレージのスナップショットを取得することもできる。


10.4.5 クラウドサービスにおける障害時の対応

  • インスタンスやストレージを構成する場合、リージョンによって配置先となるデータセンターの地域を指定できる機能があるのが一般的である。
    • どのリージョンに配置されているかによって適用される法律などが異なる。

10.4.6 脆弱性検査について

  • インスタンスのOSやインストールされたプログラム、インスタンスに配置されたプログラムなどに脆弱性がないかを検査することを脆弱性検査(ペネトレーションテスト)と言う。
  • 脆弱性検査用のツール
    • OWASP ZAP


演習問題

  1. A→❌B
  2. /etc/sudoers→◯
  3. ?→❌ulimit
  4. C→◯
  5. /bin/nologin→❌/etc/nologin
  6. B→◯
  7. B,C→◯
  8. ssh-keygen→◯
  9. B→◯
  10. C→◯
  11. C→◯
  12. B,C→◯
正解率:9/12=0.75(75%)

LinuCレベル1取得に向け勉強中:第9章 重要なシステムサービス

2020-10-13 20:49:42 | LinuC
LinuCレベル1合格教本で、勉強を進める。
今回は、『第9章 重要なシステムサービス』である。

 

9.1 システム時刻の保守

9.1.1 システムクロックの表示と設定

  • Linuxでは、次の2つのクロック情報により、日時情報が管理されている。
    • システムクロック:OSが管理
    • ハードウェアクロック:BIOSが管理
表9.1 クロック設定に利用できるコマンド
コマンド
意味
設定の対象
dateシステムクロックの表示・設定システムクロック
hwclockハードウェアクロックの表示・設定ハードウェアクロック
ntpdate, chronycNTPサーバーとシステムクロックの同期システムクロック

NTPサーーとシステムクロックの同期
  • date [オプション] [日時/+書式]:システムクロックの表示・設定
    • システムクロック設定の書式
      date mmddhhmm[yyyy][.ss]
       mm:月
       dd:日
       hh:時
       mm:分
       yyyy:年
       ss:秒
    • システムクロック表示の書式
      date "+%m%d"
      • 使い方例:
        tar cf /tmp/`date "+%m%d"`.tar /home
        →/tmp/0101.tarが生成される

9.1.2 ハードウェアクロックの設定

  • hwclock [オプション]:ハードウェアクロックの設定・確認
    -r(--show):ハードウェアクロックを表示
    -w(--systohc):ハードウェアクロックを、現在のシステムクロックと同期
    -s(--hctosys):システムクロックを、現在のハードウェアクロックと同期

9.1.3 タイムゾーンの設定

  • 日本に存在するホストでタイムゾーンの設定を行うとしたら、次のどちらかを使用するのが一般的。
    • UTC(世界標準時)
    • JSTあるいはAsia/Tokyo(日本標準時):UTCと比べて+9時間
  • タイムゾーンの設定方法はいくつかある。
    • TZ変数で設定
    • /etc/timezoneを編集
    • /etc/localtimeの参照先のファイルをtimedatectlコマンドで変更
  • tzselect:設定できるタイムゾーンの値を表示
  • Debian環境では、/etc/timezoneファイルの内容を書き換えることでタイムゾーンの編集が可能。
  • CentOS環境では、/etc/localtimeファイルによりタイムゾーンの設定を行う。
    • このファイルはシンボリックリンクになっており、参照先は/usr/share/zoneinfo/ディレクトリの各タイムゾーンを表すファイルとなっている。
    • 参照先を変えることでタイムゾーンの設定を変更する。
  • timedatectl [サブコマンド]:日時に関する設定を行う(CentOS、Debian共通)
    status:現在の設定を表示(サブコマンド省略時の動作)
    set-time 日時:日時の設定を変更
    set-timezone タイムゾーン:タイムゾーンの設定を変更

9.1.4 NTPの利用

  • TCP/IPにはNTP(Network Time Protocol)というプロトコルが用意されており、システムクロックの設定に利用できる。
    • ntpdateコマンドをネットワーク上に配置されているNTPサーバー(ntpd)とシステムクロックを同期して、適切な日時を設定可能。
  • ntpdate [オプション] サーバー:ntpサーバーと同期し、システムクロックを設定
    -d:デバッグモードで実行
  • 自分自身をNTPサーバーとして構成することもできる。
    • /etc/ntp.confファイルを編集してntpdの設定を行う。
  • ntpq [オプション] [サーバー]:ntpdの状態を確認
    -p:同期の状態を表示。サーザー名の左の記号で状態を表す。
      *:現在同期中のサーバー
      +:同期の候補となっているサーバー

9.1.5 chronyd

  • 現在はntpdに代わる同期サービスとしてchronydが用意されている。
  • chronydの特徴
    • ntpdと同じくNTPプロトコルを利用したシステムクロックの同期が可能
    • ハードウェアクロックとの同期もサポート
    • 既定ではntpdと同じ123番ポートを利用するが、他のポートを利用するように設定変更も可能
表9.2 ntpdとchronydが利用するコマンドと設定ファイル
サービス名
ntpd
chronyd
設定ファイル/etc/ntp.conf/etc/chrony.conf
同期確認に利用するコマンドntpqコマンドchronycコマンド

  • chronyc [サブコマンド]:chronydの制御を行う
    tracking:同期の状態を表示
    sources:同期先として利用できるサーバーの一覧を表示

9.2 システムのログ

9.2.1 ログ管理サービス

  • Linuxで利用されるログ管理サービスには次のものがある
    • journald
    • rsyslog

9.2.2 journaldによるログ管理

  • 既定では、/run/log/journald/ディレクトリ以下にログファイルが配置されている。
    • system.journalファイルの中身はバイナリデータなので、grepなどのテキスト処理用のコマンドでは参照できない。
  • journalctl [オプション] [条件]:ジャーナルログの参照
    -n 数値:表示するログの件数
    -u ユニット名:表示する対象のユニット
    -p プライオリティ値:表示するプライオリティ(0:emerg〜7:debug)
    --since='日時',--until='日時':日時を指定
    -f:末尾をリアルタイム表示
    -r:逆順に表示
    --list-boots:管理対象となっているブートIDを表示
    -b 数値:指定したブートIDのログを表示。0で現在、-1で前回起動中のログを表示
    --no-pager:ページャーを利用せず、標準出力
  • journaldの設定ファイルは、/etc/systemd/journald.conf
  • journaldに任意の情報を出力したい場合、systemd-catコマンドを利用する。
  • systemd-cat [オプション] コマンド構文:journaldに任意の情報を出力
    -p プライオリティ:プライオリティを指定して出力

9.2.3 rsyslogによるログ管理

  • rsyslogの設定ファイルは/etc/rsyslog.conf
    • 出力先の設定は、セレクタとアクションの組み合わせで設定されている。
表9.3 CentOS環境における主なログファイル
ログファイル
内容
/var/log/messages一般ログ(下記の3つのファシリティに該当しないログを記録
/var/log/secure認証ログ
/var/log/maillogメールログ
/var/log/croncronログ

あるファシリティ、プライオリティが指定されたログメッセージが設定どおりに記録されているかどうかを確認するには、loggerコマンドを使うと便利。
  • logger [オプション] メッセージ:テスト用のログメッセージを送信
    -p ファシリティ.プライオリティ:ファシリティとプライオリティを指定。指定されなかった場合、user.noticeで送信
    -i:PIDを記録
    -t 名前:指定した名前を出力元として記録

9.2.4 ログのローテーション

  • /var/log/ディレクトリに記録されているログファイルは、一定期間が経過するとlogrotateによりローテーションされる。
    • ローテーションが一定回数を超えると、古いファイルから削除される。
    • logrotateの設定ファイルは、/etc/logrorate.conf

9.3 メール配送エージェント(MTA)の基本

9.3.1 MTAの基本

  • MTAとはメールを転送するSMTPサーバーを指す。
  • Linuxで主に利用されているMTAには次のものがある。
    • postfix
    • exim

9.3.2 メールの参照

  • mail [オプション] [宛先]:メールデータを参照、もしくはメールを送信
    -u ユーザー:指定したユーザーのメールデータを参照(rootのみ実行可)
  • /etc/aliasesはメールの転送先を指定する設定ファイル
    • postfixが参照するのは/etc/aliases.dbというバイナリファイル
    • そのため、/etc/aliasesファイルを編集したら、newaliasesコマンドを実行して/etc/aliases.dbに反映させる必要がある。
  • newaliases:メールのエイリアス設定を有効化(/etc/aliases.dbに反映)
転送先のMTAが名前解決できない場合など、メールキューが溜まったままになってしまっている場合には、mailqコマンドで、保存されたままのメールキューを確認できる。
  • mailq:メールキューの内容を表示


演習問題

  1. C→❌B
  2. C→◯
  3. ?→❌none
  4. ?→❌A
  5. logrotate→◯
  6. B,C→◯
  7. A,D→◯
  8. B→◯
  9. .forward→◯
正解率:6/9=0.667(67%)

あんまり理解できていないが、正解率はまぁまぁかな?
ファシリティとプライオリティって重要なのかな?
メールの配送についてもほぼ実践できなかったからよく分からなかったし。

LinuCレベル1取得に向け勉強中:第8章 システム管理

2020-10-12 00:43:39 | LinuC
LinuCレベル1合格教本で、勉強を進める。
今回は、『第8章 システム管理』である。

8.1 アカウント管理

8.1.1 ユーザーの追加


表8.1 主なユーザー管理コマンド
コマンド
意味
コマンド
意味
useraddユーザーの追加groupaddグループの追加
usermodユーザーの編集groupmodグループの編集
userdelユーザーの削除groupdelグループの削除
passwdパスワードの設定idユーザーとグループのID情報を表示
  • useradd [オプション] ユーザー名:ユーザーを追加
    -u UID:ユーザーIDを指定
    -g グループ名/GID:主グループを指定
    -G グループ名/GID:補助グループを指定
    -c コメント:コメントを指定
    -d ディレクトリ名:ホームディレクトリを指定
    -s パス:ログインシェルを指定
    -m:ホームディレクトリを作成
  • passwd [オプション] [ユーザー名]:パスワードを設定
  • ユーザー追加時にホームディレクトリが作成される際、/etc/skel/ディレクトリの内容を参照して中にあるファイルやサブディレクトリをコピーする。
  • Debian環境(Ubuntu含む)では、-mオプションを指定せずにuseraddコマンドでユーザーを追加すると、ホームディレクトリを生成しない。

8.1.2 グループとユーザーの管理

  • ユーザーはあるグループに対して、主グループ(プライマリグループ)もしくは補助グループ(セカンダリグループ、サブグループ)として所属できる。
  • id [オプション] ユーザー名:指定したユーザーのID情報を表示
  • ユーザー追加時に主グループを指定していなかった場合、ユーザー名と同じ名前のグループ(プライベートグループ)が生成され、そのグループに所属することになる。
  • groupadd [オプション] グループ名:グループを追加
    -g GID:グループID(GID)を指定
  • usermod [オプション] ユーザー名:ユーザーの設定を変更
    -u UID:ユーザーIDを指定
    -g グループ名/GID:主グループを指定
    -G グループ名/GID:補助グループを指定
    -c コメント:コメントを指定
    -d ディレクトリ名:ホームディレクトリを指定
    -s パス:ログインシェルを指定
    -l 新ユーザー名:ユーザー名を指定(新ユーザー名に変更)
    -a:-Gを併用し、補助グループを追加
  • groupmod [オプション] グループ名:グループの設定を変更
    -g GID:グループID(GID)を指定
    -n 新グループ名:グループ名を指定(新グループ名に変更)

8.1.3 ユーザーとグループの削除

  • userdel [オプション] ユーザー名:ユーザーを削除
    -r(--remove):ホームディレクトリも削除
    -f(--force):ログイン中のユーザーを削除
  • groupdel [オプション] グループ名:グループを削除
    • ユーザーが1人でもそのグループを主グループとして所属するよう設定されている場合、そのグループは削除できない。

8.1.4 ユーザーとグループの設定ファイル

  • etcディレクトリのpasswd, shadow, groupファイルのそれぞれの列(フィールド)には以下の情報が格納されている。

図8.3 /etc/passwdファイルの内容
/etc/passwd:ユーザー情報を保持
test01:x:1001:2000::/home/test01:/bin/bash
①       ②  ③     ④  ⑤            ⑥         ⑦
コマンド
項目
説明
ユーザーユーザー名
パスワードパスワード欄。現在では/etc/shadowで管理
UIDユーザーに割り当てられているID
GIDユーザーが主グループとして所属しているグループのID
コメントユーザーの本名などを記憶できる
ホームディレクトリユーザーのホームディレクトリ
ログインシェルユーザーが利用するシェル

  • /etc/default/useraddの確認
[root@centos7 ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

  • vipw:passwdファイルの編集

図8.4 /etc/shadowファイルの内容
/etc/shadow:パスワード情報を保存。一般ユーザーは参照不可。
test01:$6$HTUBwjdV$w7dlKDg/3KRz7...:17952:0:99999:7:::
①                    ②                                         ③     ④  ⑤    ⑥⑦⑧⑨
コマンド
項目
説明
ユーザーユーザー名
パスワードハッシュ化されたパスワード
最終変更日1970/1/1からの通算日数
変更可能最短日数0だといつでもパスワード変更可能
パスワード有効期限いつまで同じパスワードを使い続けられるか
警告日有効期限の何日前に警告を表示するか
使用不可になるまでの日数パスワードの有効期限が経過してからアカウントが使用不可になるまでの日数
アカウント有効期限ユーザーアカウントの有効期限
予約フィールド将来的に使用できるフィールドとして予約

図8.5 /etc/groupファイルの内容
/etc/group:グループ情報を保持
sales:x:2000:test02
①     ②  ③     ④
コマンド
項目
説明
グループグループ名
パスワードグループに割り当てられているパスワード
GIDグループに割り当てられているID
所属メンバーサブグループとして所属しているユーザー

  • getent データベース [エントリ]:NSSライブラリのエントリを出力
    • データベース:出力したい内容を指定
      passwd, shadow, group:それぞれのファイルの内容(第2引数にアカウント名を指定して特定のアカウントの情報を出力するよう指定できる)
      hosts:hostsファイルの内容(第2引数にホスト名を指定して、名前解決に利用できる)

8.2 ジョブ管理

8.2.1 cronによるジョブスケジューリング

  • Linuxでは、次の2つの仕組みでジョブをスケジュール管理できる。
    • cron(anacron):定期的に繰り返すジョブを管理
    • at:一度だけ実行するジョブを管理
  • crontab オプション:cronジョブの編集
    -e:cronジョブの追加、編集
    -l:cronジョブの表示
    -r:cronジョブの削除
図8.6 crontabファイルの書式
crontabファイル:cronジョブを登録
31 10 *  *  *     touch /root/crontest.txt
①  ②③④⑤            ⑥
コマンド
項目
既定値
0〜59
0〜23
1〜31
1〜12/jan〜dec
曜日0〜7/sun〜sat
0と7は日曜日
実行する処理実行するコマンドを1行で設定
実用的にはスクリプトを指定

図8.7 crontabで利用できる主な書式
0 23 *  *  1-5    /testbin/backup.sh
→「-」で連続した値を指定。
この例は月曜日から金曜日の23時ちょうどにスクリプトを実行。

0,15,50 * * * * /testbin/sample.sh
→「,」で複数の値を指定。
この例は毎時0分、15分、50分にスクリプトを実行。

0 4 */2 * * /testbin/ntpdate.sh
→「*/数字」で、「〜に1度」という値を指定。
この例は2日に1度、4時ちょうどにスクリプトを実行。
  • /var/spool/cron/rootファイルにもcronジョブの内容が登録される。
  • cronジョブを操作するための設定ファイル。
    • /var/spool/cron/ユーザー名
    • /etc/crontab
    • /etc/cron.d/ディレクトリ
表8.2 システムが参照するcronジョブ用のディレクトリ
  • etc/cron.hourly/:1時間に1回
  • etc/cron.daily/:1日に1回
  • etc/cron.weekly/:1週間に1回
  • etc/cron.monthly/:1ヶ月に1回
※ 突然、CentOSのrootアカウントに入れなくなった。
色々試行錯誤してたら、以下のコマンドを試すよう言われたので、実行したところ、root権限でログインすることに成功。
その後、passwdでパスワードを設定し直したら、正常に戻った。
  • abrt-cli list --since 1602298603

8.2.2 anacronによるジョブスケジューリング

  • CentOS環境にも、表8.2のディレクトリは存在するが、/etc/crontabにジョブの実行についての設定は書かれていない。
    →その代わりに、/etc/anacrontabというファイルにジョブの実行についての設定が書かれている。
表8.3 cronとanacronの違い
cron
anacron
  • crondが常駐して実行
  • システム起動中、指定したタイミングでジョブを実行
例:3時ちょうどに実行されるよう登録されている場合、その時刻に起動していなければならない
  • cron経由で実行(anacronは常駐しない)
  • システム起動中、適当なタイミングでジョブを実行
例:起動後、1時間に1度、anacronが実行され、未実行だったジョブを実行
 

8.2.3 atによるジョブスケジューリング

  • at [オプション] 時刻:atジョブの編集
    • 主なオプション
      -f ファイル:指定したファイルの内容を実行
      -l:atジョブの一覧表示(=atqと同じ)
      -c ジョブ番号:指定したatジョブの内容を表示
      -r ジョブ番号:atジョブの削除(=atrmと同じ)
    • 引数:時刻の書式
      23:30:その日の23時30分に実行
      4pm + 1 days:翌日の午後4時ちょうどに実行
      noon Jul 31:7月31日の正午に実行


8.2.4 cronとatのアクセス制御

  • cronとatのアクセス制御ファイル
    • /etc/cron.allow,/etc/at.allow:ファイル内に記述されたユーザーのみ利用可能
    • /etc/cron.deny,/etc/at.deny:ファイル内に記述されていないユーザーのみ利用可能
    • どちらのファイルもない:rootユーザーのみ利用可能

8.3 ローカライゼーションと国際化

8.3.1 i18n

  • ソフトウェアを様々な言語環境で利用できるようにすることを国際化(internationalization; i18n)という。


8.3.2 ロケール


表8.4 主なロケール関係の変数
変数意味
LANGすべての項目に使用するロケール
LC_ALLすべての項目に使用するロケール
LC_MESSAGESメッセージに使用するロケール
LC_TIME日時に使用するロケール
LC_MONETARY通貨記号など、金額の表示に使用するロケール

  • locale [オプション]:ロケール情報を確認
    -a:設定できる値を全て表示
表8.5 設定可能な主なロケール
変数意味
CCロケール(POSIX準拠のロケール、英語で表記)
en_US.utf8言語:英語、地域:アメリカ、文字コード:UTF-8
ja_JP.utf8言語:日本語、地域:日本、文字コード:UTF-8

  • export LANG=C:すべての表示項目がCになる。
  • ロケールの設定ファイル
    • Red Hat系(CentOSなど):/etc/locale.conf
    • Debian系:/etc/default/locale(dpkg-reconfigure localesで編集可能)

8.3.3 文字コードの変換


表8.6 主な文字コード
文字コード用途
ASCIIアルファベットや数字などの1バイト文字を表現
Shift-JIS日本語用文字コード。Windows環境などで利用
EUC日本語用文字コード。古いUNIX環境などで利用
UTF-8世界中の文字を表現するためのUnicodeの文字符号化形式の一種。
最近のLinux環境では一般的

  • iconv [オプション] [ファイル名]:文字コードの変換
    -f 文字コード:変換対象となる文字コードを指定(fromの頭文字)
    -t 文字コード:変換後の文字コードを指定(toの頭文字)
    -l:指定できる文字コードの一覧を表示
 

演習問題  

  1. A→◯
  2. C→❌A
  3. groupadd→◯
  4. B,D→◯
  5. A→❌B
  6. C→◯
  7. B→❌D
  8. A→◯
  9. /etc/cron.allow→◯
  10. A,C→◯
  11. locale→◯
  12. C→◯
9/12=0.75(75%)
もうちょい点は増やせたかな?😅 

LinuCレベル1取得に向け勉強中:第7章 ネットワークの基礎

2020-10-09 23:44:56 | LinuC
LinuCレベル1合格教本で、勉強を進める。
今回は、『第7章 ネットワークの基礎』である。

 

7.1 インターネットプロトコルの基礎

7.1.1 TCP/IPの通信フロー

  • TCP/IPにおける4つの層
    • アプリケーション層
    • トランスポート層:ポート番号など
    • インターネット層:IPアドレスなど
    • ネットワークインターフェイス層:MACアドレスなど

表7.1 主な各層の通信プロトコル

アプリケーション層FTP, SSH, Telnet, SMTP, DNS, HTTP, POP3, IMAP4, NTP, HTTPS
トランスポート層TCP, UDP
インターネット層IP, ICMP, ARP
ネットワークインターフェイス層Ethernet, IEEE802.11, PPP

表7.2 主なウェルノウンポート
ポート番号アプリケーションポート番号アプリケーション
20FTP(データ用)143IMAP
21FTP(制御用)161SNMP
22
SSH162SNMP Trap
23Telnet389LDAP
25
SMTP443
HTTPS
53DNS465SMTPS
80HTTP514syslog
110POP3636LDAPS
123
NTP993IMAPS
139NBT Session995POP3S

7.1.2 IPv4アドレスとネットワーク構成

  • IPアドレスには、IPv4とIPv6がある。
  • IPv4アドレスは32ビットで構成されており、これを8ビット(オクテット)ずつ10進数に置き換えて、IPアドレスとサブネットマスクで次にように構成する。
    IPアドレス:192.168.56.11
    サブネットマスク:255.255.255.0(=/24)
  • サブネットマスクは、ホストのネットワークを表すアドレス範囲を指定する。
表7.3 192.168.56.0/24のアドレス構成
192.168.56.0/24ネットワークアドレス192.168.56.0

ホストアドレス192.168.56.1〜254

ブロードキャストアドレス192.168.56.255

7.1.3 IPアドレスクラスとサブネット分割


表7.4 IPアドレスクラスと対応するプライベートアドレス
クラス
第1オクテット(2進数での先頭部分)
デフォルトマスク
A
0〜127(0〜)255.0.0.0(/8)
B
128〜191(10〜)255.255.0.0(/16)
C
192〜223(110〜)255.255.255.0(/24)

  • サブネット分割:本来ホストアドレス部だった部分をネットワークアドレス部として利用する方法。サブネット分割すると、利用できるネットワークの数が増える。その分、各ネットワークにおけるホスト数は減る。
表7.6 第4オクテット部分のサブネット分割実行時のネットワーク数とホスト数
マスク値
分割後のネットワーク数
各ネットワークの最大ホスト数
/25
2(2^1)126(2^7-2)
/26
4(2^2)62(2^6-2)
/27
8(2^3)30(2^5-2)
/28
16(2^4)14(2^4-2)
/29
32(2^5)6(2^3-2)
/30
64(2^6)2(2^2-2)
  • IPv4アドレスには、プライベートアドレスとグローバルアドレスという分類もある。
    • グローバルアドレス:インターネット上に公開されているホストが利用するアドレスであり、ICANNという組織により管理されている。
    • プライベートアドレス:LAN内でのみ使用し、インターネットなど外部ネットワーク側からホストを特定する必要がない場合に利用する。
  • グローバルアドレスはインターネット上に公開するサーバーやルーターのインターネット側のインターフェイスに割り当てられ、プライベートアドレスはLAN内のホスト用のアドレスに割り当てられるのが一般的。
表7.7 IPアドレスクラスごとのプライベートアドレス範囲
クラス
プライベートアドレス範囲
デフォルトマスク
A
10.0.0.0〜10.255.255.255255.0.0.0(/8)
B
172.16.0.0〜172.31.255.255255.255.0.0(/16)
C
192.168.0.0〜192.168.255.255255.255.255.0(/24)

表7.8 特殊な用途で使用されるアドレス
アドレス範囲
用途
127.0.0.0/8
ループバックアドレス(ホスト自身を表すアドレス、一般的には127.0.0.1を利用)
169.154.0.0./16
APIPA(DHCPサーバーからアドレスを取得できなかった場合に自動構成されるアドレス)

7.1.4 IPv6アドレス

  • IPv6アドレスは128ビットで構成され、これを8ビットずつ16進数に置き換えて構成する。
    2001:0db8:dead:beef:cafe:0000:0000:1234/64
    • 先頭の0は表記を省略できる
    • 0しか書かれていない数値列(ゼロフィールド)はまとめて省略できる
    • ゼロフィールドが離れた場所に複数存在している場合は、片方しか省略できない
  • IPv6アドレスでは、プレフィックス値を使用してネットワークアドレス部とホストアドレス部を特定する。
表7.9 IPv6アドレスのスコープ
スコープの種類
アドレス
用途
グローバル
2000::/3インターネットで一意に利用。IPv4でのグローバルアドレスに相当。
ユニークローカル
fc00::/7組織内のネットワークで一意に利用。IPv4でのプライベートアドレスに相当。
リンクローカル
fe80::/10同一ネットワークで一意に利用。IPv4でのリンクローカルアドレス(APIPAで生成されるアドレス、169.254.0.0/16に相当)
  • ip addrで確認できる。
    • enp0s3:仮想マシン同士の接続で利用するインターフェイス
    • enp0s8:インターネットなど外部ネットワークへの接続で利用するインターフェイス

7.2 基本的なネットワーク構成

7.2.1 ホスト名の設定

  • /etc/hostnameファイル:ホスト名の確認・設定
  • hostname [ホスト名]:ホスト名の確認・設定

7.2.2 TCP/IPの基本的な設定

  • nmcli オブジェクト [サブコマンド] [引数]:NetworkManagerを利用したネットワーク機能の確認・設定
    • 主なサブコマンド
      connection:接続情報の管理。インターフェイスの設定など
      general:NetworkManagerサービスの管理
      device:デバイスの管理
    • 主なサブコマンド
      show:設定を参照
      modify:設定を変更
      up:接続の有効化
    • nmcliコマンドを利用すると、異なる環境でも同じ方法で設定変更ができる。
  • ip [オプション] サブコマンド:インターフェイスやルーティング設定を確認・設定
    • addr:IPアドレスに関する情報を表示・設定。以下のサブコマンドで処理を指定
      • show [インターフェイス名]:設定情報を表示。インターフェイス名を指定できる。
      • add IPアドレス/マスク dev インターフェイス名:IPアドレスを設定
      • del IPアドレス/マスク dev インターフェイス名:IPアドレスを削除
    • route:ルーティングテーブルに関する情報を表示・設定。以下のサブコマンドで処理を指定(アドレス部分にdefaultと記述するとデフォルトゲートウェイの指定)
      • add IPアドレスまたはネットワークアドレス/マスク via 転送先:IPアドレスを設定
      • del IPアドレスまたはネットワークアドレス/マスク:IPアドレスを削除
  • systemctl restart network:networkサービスの再起動。
  • ifconfig [オプション] [インターフェイス名] [IPアドレス [netmask サブネットマスク]] [up/down]:インターフェイスの設定を確認、設定する。
  • ifup インターフェイス名:インターフェイスの有効化
  • ifdown インターフェイス名:インターフェイスの無効化
表7.10 同じ目的に利用可能なコマンドの例

iprouteパッケージ
net-toolsパッケージ
インターフェイス/IPアドレスの参照・設定
ifconfig, ifup, ifdownip
ルーティングテーブルの参照・設定
ip routeroute
ネットワーク接続情報の確認ssnetstat

ssnetstat

7.2.3 ルート情報の設定

  • ip route:ルート情報の参照・設定
    • このルート情報をルーティングテーブルという。
    • 行頭がdefaultとなっているのがデフォルトゲートウェイアドレス。
  • route (表示)
    route add -net ターゲット netmask マスク gw ゲートウェイ / default gw ゲートウェイ (追加)
    route del -net ターゲット / default (削除)
    :ルート情報の設定・参照

7.3 基本的なネットワークの問題解決

7.3.1 疎通確認によるトラブルシュート

  • ping [オプション] 宛先:宛先となるホストと疎通確認を行う。
    -c:指定した回数、パケットを送信
  • pingコマンドを実行すると、ICMPパケットを送信して疎通確認を行う。
表7.11 主なICMPメッセージタイプ
メッセージタイプ意味
0:エコー応答
pingパケットを受信したホストが返す応答メッセージ
3:宛先到達不能
途中経過などでの設定ミスなどにより、目的のホストにメッセージを送ることができない場合に帰ってくるメッセージ
8:エコー要求pingを実行したときに送られるエコー応答を要求するメッセージ
11:時間経過経由したルーターが多すぎるなど、目的のホストにメッセージを送ることができない場合に返ってくるメッセージ
  • traceroute [オプション] 宛先:宛先となるホストに到達するまでの経路(ルーター)の情報を出力
    -I:ICMPエコー要求による経路を確認(既定ではUDPで経路を確認)
  • tracepath [オプション] 宛先:宛先となるホストに到達するまでの経路(ルーター)の情報をMTUとともに出力
※ ping、traceroute、tracepathコマンドは、そのままではIPv6アドレスに対応していない。
→ ping6、traceroute6、tracepath6

7.3.2 TCP/IP通信の状態を確認

  • ss [オプション]:TCP/IP通信の状態を表示
    -a:待機ポートも含むすべての状態の通信を表示(-lを指定しなかった場合、確立した通信のみ表示)
    -l:待機(LISTEN)ポートを表示
    -n:名前解決をせずに表示
    -t:TCP通信を表示
    -u:UDP通信を表示
    -p:対応するプロセスのID(PID)を表示
  • netstat [オプション]:TCP/IP通信の状態を表示

7.3.3 指定したポートへの接続

  • nc [オプション] 宛先 [ポート番号]:指定したポートへの接続、もしくは指定したポートを待ち受け
    -l:指定したポートを待ち受ける
    • [root@centos7 ~]# nc -l 2323
    • root@debian10:~# nc 192.168.56.11 2323
      test
      ^C(Ctrl+C)

7.4 クライアント側のDNS設定

7.4.1 名前解決の設定

  • TCP/IPネットワークでは、IPアドレスの他に、ホスト名を指定して接続することも可能。
    • ホスト名をIPアドレスに変換することを、名前解決という。
名前解決の順番
  1. 端末上に存在する/etc/hostsファイルの情報を参照し、名前解決
  2. /etc/resolv.confファイルに指定されたDNSサーバーに問い合わせて名前解決
この処理順は、/etc/nsswitch.confファイルで以下のように定義されている。

[root@centos7 ~]# grep ^host /etc/nsswitch.conf
hosts: files dns myhostname

  • /etc/nsswitch.conf
    書式:システムデータベース:サービス [サービス・・・]
    概要:ネームサービススイッチの設定
  • /etc/hosts
    書式:IPアドレス ホスト名 [ホスト名・・・]
    概要:IPアドレスとホスト名の関連付け
    補足:同じIPアドレスに対して複数のホスト名を関連付けることができる
  • 本格的に名前解決の運用を行う場合、DNSサーバーによる名前解決を利用する。
    • DNSによる名前解決では、FQDN(完全修飾ドメイン名)とIPアドレスを解決する。
      • FQDNとは、ドメイン名が付いたホスト名のこと。
    • 正引き:FQDNからIPアドレスを問い合わせる名前解決
    • 逆引き:IPアドレスからFQDNを問い合わせる名前解決
  • /etc/resolv.conf
    書式:設定項目 値
    概要:DNSサーバー/クライアント設定
    設定項目:
    searchもしくはdomain->ドメイン名として補完(両方設定された場合はsearchを優先)
    nameserver->DNSサーバーアドレス
  • nmcliコマンドによるDNSサーバーの設定も可能。

7.4.2 名前解決の検証

  • host [オプション] 名前 [DNSサーバー]:名前解決を検証し、簡易的な情報を出力
    -t レコード:問い合わせるレコードの種類を指定
  • dig [オプション] [@サーバー] 名前 [レコード]:名前解決を検証し、詳細な情報を出力
    -x:逆引きの問い合わせ(PTRレコードの問い合わせ)を実行
  • nslookup [オプション] 名前 [DNSサーバー]:名前解決を検証し、簡易的な情報を出力
    -type=レコード:問い合わせるレコードの種類を指定

演習問題

  1. D→❌A
  2. C,D,E→❌A,B,E
  3. 253→❌61
  4. 25→◯
  5. C→◯
  6. C→❌B,C
  7. C→❌A
  8. A,D→◯
  9. B,C→◯
  10. B→◯
  11. D→❌B
  12. D→◯
  13. B→◯
  14. A,C→❌A,D
7/14=0.5(50%)
全然駄目だ😭 

ネットワーク関係はやはり難しい😵 

LinuCレベル1取得に向け勉強中:第6章 シェルおよびスクリプト

2020-10-08 13:56:06 | LinuC
LinuCレベル1合格教本で、勉強を進める。
今回は、第6章 シェルおよびスクリプトである。


シェル環境のカスタマイズ



シェル変数環境変数
設定変数名=値export 変数名もしくはexport 変数名=値
一覧表示setenv
削除unset 変数名unset 変数名

エイリアスの設定

  • alias [エイリアス名='実行内容']:エイリアスの定義・確認
    • エイリアスを無効にして実行するには、先頭に「\」を付ける。
  • unalias エイリアス名:エイリアスの解除

コマンドの連続実行

  • command1; command2:command1に続いてcommand2を常に実行
  • command1 && command2:command1が成功したらcommand2を実行
  • command1 || command2:command1が失敗したらcommand2を実行

bashシェルの環境設定


全員が参照ユーザー個別で参照
ログイン時に読み込み/etc/profile
  1. ~/.bash_profile
  2. ~/.bash_login
  3. ~/.profile
bash起動時に読み込み/etc/bash.bashrc(CentOS)
/etc/bashrc(Debian)
~/.bashrc
ログアウト時に読み込み
-
~/.bash_logout

  • cat .bashrc:エイリアスの確認
  • vi .bashrc:エイリアスの設定
  • set -o:オプション設定の状況確認
  • set +/-o オプション名:bashシェルのオプション指定
    +:オプションを無効化
    -:オプションを有効化

シェルスクリプト

シェルスクリプトの基本的な書き方

  • シェルスクリプトを実行するときの構文
    • bash シェルスクリプト名
    • source シェルスクリプト名
    • . シェルスクリプト名
    • ./シェルスクリプト名
  • スクリプトが格納されているディレクトリを$PATHに追加する
    • $PATH=PATH:/ディレクトリ名
  • シバン(shebang)行でシェルを指定。
    • #!/bin/bash

変数の利用


主な特殊変数
変数表示するもの
$0スクリプトファイル名
$1,$2,...引数($1は1つめの引数、$2は2つめの引数...)
$@引数すべてをスペースで区切って出力
$*引数すべてを$IFSで指定された値で区切って出力
$#引数の数
$?直前の処理の成否(成功は0、失敗は0以外)
$$シェルのPID

制御構文の利用

主な制御構文
制御構文意味
if条件分岐
case条件分岐(多岐分岐)
for繰り返し(値リスト)
while繰り返し(条件指定)
  • if文の書式
if 条件式1
then
 条件式1に合致した場合の処理
elif 条件式2
 条件式2に合致した場合の処理
else
 どの条件にも合致しなかった場合の処理
fi

ファイル・ディレクトリに関する条件式
条件式意味
-f ファイル名ファイルが存在
-d ディレクトリ名ディレクトリが存在
-e ファイル/ディレクトリ名ファイル/ディレクトリが存在
-r ファイル/ディレクトリ名ファイル/ディレクトリが読み取り可能

!条件式条件を満たさない(NOT) 条件式1 -a 条件式2条件1と条件2の両方を満たす(AND) 条件式1 -o 条件式2条件1と条件2のどちらかを満たす(OR) -n 文字列文字列の長さが0ではない(文字列が存在する)
数値の条件式
条件式意味
値1 -eq 値2値1と値2が等しい
値1 -ne 値2値1と値2が等しくない
値1 -lt 値2値1が値2より小さい(値2を含まない)
値1 -le 値2値1が値2以下(値2を含む)
値1 -gt 値2値1が値2より大きい(値2を含まない)
値1 -ge 値2値1が値2以上(値2を含む)

その他論理式など
条件式意味
!条件式条件を満たさない(NOT)
条件式1 -a 条件式2条件1と条件2の両方を満たす(AND)
条件式1 -o 条件式2条件1と条件2のどちらかを満たす(OR)
-n 文字列文字列の長さが0ではない(文字列が存在する)

  • exit 終了ステータス:引数で指定した終了ステータスを格納し、その次の処理の際に利用できる。

四則演算とcase文の利用

  • expr 数値1 演算子 数値2:四則演算の結果を出力!条件式条件を満たさない(NOT) 条件式1 -a 条件式2条件1と条件2の両方を満たす(AND) 条件式1 -o 条件式2条件1と条件2のどちらかを満たす(OR) -n 文字列文字列の長さが0ではない(文字列が存在する)
    +:足し算、-:引き算、\*:掛け算、/:割り算、%:剰余
  • case文の書式
case 変数名 in
 値1) 値1だった場合の処理;;
 ・・・
 *) どの値にも合致しなかった場合の処理;;
esac

繰り返し構文

  • for文の書式
for 変数名 in 値1 値2・・・(値リスト)
do
 繰り返す処理
done
  • while文の書式
while 条件式
do
 繰り返す処理
done

関数の利用

  • function文の書式
function 関数名() {
 処理
}

スクリプトのデバッグ

bash実行時にデバッグ情報を出力するオプション
オプション意味
-v実行するコマンドを出力
-x実行するコマンドや変数への代入など、処理内容を出力
  • シバンの箇所にオプションを指定すると、それ以降は常にデバッグ情報を出力するようになる。
  • setコマンドのオプションで囲む(set -x; ;set +x)ことにより、その部分だけデバッグ情報を出力することができる。

trapコマンドの利用

  • trap "処理" シグナル:シグナルが送られた場合、指定した処理を実行

感想

内容として難しいわけではないが、結局覚えていられるかが問題。
あと、途中途中で出力メッセージに使われている英語が気になる。
  • echo $0 is necessary 2 arguments
    → echo $0 requires 2 arguments
  • echo $2 is exists
    → echo $2 exists