主題1.09:重要なシステムサービス
1.09.1 システム時刻の管理(重要度2)
dateコマンド
書式
date【オプション】【日時/+書式】
概要
システムクロックの表示・設定
引数
・日時:指定した日時にシステムクロックを設定。日時情報を指定しない場合はシステムクロックの内容を表示する
・+書式:date “+%m%d” →月日を表す2桁×2の情報のみ表示
使用例
date
→現在のシステムクロックを表示
date 010523352019.30
→システムクロックを1/5 23:35 2019年 30秒に変更
hwclockコマンド
書式
hwclock【オプション】
概要
ハードウェアクロックの設定・確認
主なオプション
-r(ーーshow)
→ハードウェアクロックを表示
-w(ーーsystohc)
→ハードウェアクロックを、現在のシステムクロックと同期
-s(ーーhctosys)
→システムクロックを、現在のハードウェアクロックと同期
使用例
hwclock -r
→ハードウェアクロックを表示
hwclock -s
→システムクロックを、現在のハードウェアクロックと同期
タイムゾーン
タイムゾーンの種類
・UTC(世界標準時)
・JSTあるいはAsia/Tokyo(日本標準時):UTCと比べて+9時間
タイムゾーンの設定
・TZ変数で設定
・/etc/timezoneを編集(システムで使用するタイムゾーンを指定するテキストファイル)
・/etc/localtimeの参照先のファイルをtimedatectlコマンドで変更
・エポック時間からローカルの時間に変換するときに参照する
TZ変数使用例
export TZ=UTC
→タイムゾーンをUTCに変更(他のユーザー環境には反映されない)
システムのタイムゾーンを日本(Asia/Tokyo)にする
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
タイムゾーンとシステム時刻(ローカルタイム)との関係
UTCをローカルタイムに変換する際にタイムゾーンを参照する
tzconfigコマンド
書式
tzconfig
概要
「/etc/localtime」と「/etc/timezone」ファイルをまとめて設定
tzselectコマンド
書式
tzselect
概要
環境変数「TZ」や「/etc/timezone」ファイルで指定するタイムゾーンの値を確認
timedatectlコマンド
書式
timedatectl【サブコマンド】
概要
日時に関する設定を行う
主なサブコマンド
status
→現在の設定を表示(サブコマンド省略時の動作)
set-ntp yes/no
→NTPによる時刻同期の有効/無効
set-time 日時
→日時の設定を変更
set-timezone タイムゾーン
→タイムゾーンの設定を変更
list-timezones
→タイムゾーンの一覧表示
使用例
timedatectl
→サブコマンドを省略すると設定情報を表示
timedatectl set-time “2019-05-01 15:30:27”
→システムクロックとハードウェアクロックを2019年5月1日15時30分27秒に設定
timedatectl set-timezone Asia/Tokyo
→JSTにタイムゾーン設定を変更
ntpdateコマンド
書式
ntpdate【オプション】サーバー
概要
ntpサーバーと同期し、システムクロックを設定
主なオプション
-d
→デバッグモードで実行
引数
・サーバー:サーバーの名前/IPアドレスを指定
使用例
ntpdate pool.ntp.org
→NTPサーバー「pool.ntp.org」から現在時刻を取得する
pool.ntp.org
・ntp.orgで運用しているNTPサーバークラスタのアドレス。このアドレス宛てに問い合わせを行うことで、ntp.orgに登録されている数多くのNTPサーバーのいずれかに接続し、応答を受け取ることができる。特定のNTPサーバーに問い合わせが集中することのないよう、この仕組みが設けられている
・「pool.ntp.org」プロジェクトは、複数のNTPサーバーをまとめて仮想的なNTPサーバーとして運用し負荷分散の技術の一つである「DNSラウンドロビン」方式で時刻を提供する
ntpdateコマンドの説明
・NTPサーバーから正確な時刻を取得し、直ちにシステムクロックに反映させる
・NTPクライアントである
/etc/ntp.confファイル
書式
設定項目 値
概要
ntpdの設定ファイル
主な設定項目と書式
・restrict【オプション】ホスト/default【値1・・・】
→指定したホストに対してアクセス制御設定を行う。ホストは「ネットワークアドレス mask サブネットマスク」というように指定し、ネットワークを対象にした設定も可能。defaultと指定すると、他のrestrictで指定したアドレスに合致しなかった場合の設定となる。設定できる主な値は以下の通り
ignore:すべての要求を無視
・server ホスト【値】
→同期先のサーバーを指定
・fudge ホスト stratum 値
→指定したサーバーと接続できなかった場合に参照するローカルアドレスとstratum値を指定
設定例
vi /etc/ntp.conf
server 0.centos.pool.ntp.org →NTPサーバーを指定
fudge 192.168.56.11 stratum 10 →CentOS端末のローカルアドレスとstratum値を指定
ntpqコマンド
書式
ntpq【オプション】【サーバー】
概要
ntpdの状態を確認
主なオプション
-p
→同期の状態を表示。サーバー名の左の記号で状態を表す(ntpデーモンの時刻同期状況を表示)
*:現在同期中のサーバー
+:同期の候補となっているサーバー
-:参照しないことが決定したサーバー
-i
→対話モードで起動する(デフォルト)
引数
・サーバー:対象となるサーバーの名前/IPアドレスを指定。省略した場合、自分自身のntpdの状態を確認
使用例
ntpq -p
→同期の状態を表示
/etc/chrony.confファイル
書式
設定項目 値
概要
chronydの設定ファイル
主な設定項目と書式
・server ホスト【値】
→同期先のサーバーを指定
・peer
→時刻を取得するNTPサーバーを指定(お互いに同期しあう)
・pool
→時刻を取得するNTPサーバーのプール
・driftfile
→自身の時刻のズレ具合を記録するファイルを指定
・rtcsync
→システムクロックをハードウェアクロック(RTC)にコピーする
・allow ネットワークアドレス
→接続を許可するNTPクライアントのネットワークを指定
chronycコマンド
書式
chronyc【サブコマンド】
概要
chronydの制御を行う
主なサブコマンド
tracking
→同期の状態を表示
sources
→同期先として利用できるサーバーの一覧を表示
使用例
chronyc tracking
→同期の状態を確認
chronyc sources
→同期先の確認
1.09.2 システムのログ(重要度5)
journalctlコマンド
書式
journalctl【オプション】【条件】
概要
ジャーナルログの参照(journaldにより出力されたログファイル)
*規定では/run/log/journal/ディレクトリ以下に記録(再起動するとデータは消える)
*/var/log/journal/ディレクトリが存在する場合こちらにも記録する(再起動してもデータは残る)
*systemdの動作するシステムで、ユニットが出力するログを扱うデーモンプログラムはsystemd-journald
*systemd-journaldデーモンの設定ファイルは、/etc/systemd/journald.conf
主なオプション
-a(ーーall)
→画面表示できない文字も含めてすべて表示
-n 数値(ーーlines)
→表示するログの件数(行数未指定時のデフォルトは10行)
-u ユニット名(ーーunit)
→表示する対象のユニット
-p プライオリティ値
→表示するプライオリティ(0:emerg〜7:debug)
ーーsince=’日時’
ーーuntil=’日時’
→日時を指定(sinceの日時からuntilの日時まで)
’yyyy-mm-dd hh:mm:ss’
’hh:mm:ss’
today、yesterday
-1min、-1h、-1days
-f(ーーfollow)
→末尾をリアルタイム表示(tail -fと同様)
-r(ーーreverse)
→逆順に表示
ーーlistーboots
→管理対象となっているブートIDを表示
-b 数値(ーーboot)
→指定したブートIDのログを表示。0で現在、-1で前回起動中のログを表示
ーーnoーpager
→ページャーを利用せず、標準出力(デフォルトではページャーによる表示を行う)
-k(ーーdmesg)
→カーネルからのメッセージを表示(dmesgコマンドと同じ出力)
-l(ーーfull)
→画面表示可能なすべてのログを表示
-o(ーーoutput)
→ログの出力形式を指定
引数
・条件:以下のような条件を指定して、出力内容をフィルタできる
_PID=:プロセス番号の指定
_SYSTEMD_UNIT=:Unit名の指定(-uオプションと同じ)
パス:指定したパスのプログラムが出力したログ
主なファシリティ
ファシリティ:コード:出力元/意味
kern:0:カーネル
user:1:ユーザーアプリ関連
mail:2:メールシステム
daemon:3:システムのデーモン(サービス)関連
auth:4:認証情報(最近ではauthprivの利用が一般的)
syslog:5:syslog(ログ)関連
lpr:6:lpr(プリンタ)関連
news:7:news関連
uucp:8:uucp関連
cron:9:cron関連
authpriv:10:認証情報
ftp:11:ftp関連
local0〜7:16〜23:独自に予約
主なプライオリティ
プライオリティ:コード:意味
emerg:0:システムが利用不可な状態
alert:1:緊急に対応が必要
crit:2:致命的な状態(alertよりは緊急度は低い)
err:3:エラー
warning:4:警告
notice:5:通知(エラーや警告ではないが重要)
info:6:情報
debug:7:デバッグ情報
none: :記録の対象外
使用例
journalctl
→記録されているジャーナルログの内容をすべて表示
journalctl -r -n 3 -b -1
→前回起動時の末尾3件を確認
journalctl _SYSTEMD_UNIT=sshd.service
→sshd.serviceユニットからのログのみを出力させる
systemd-catコマンド
書式
systemd-cat【オプション】コマンド構文
概要
journaldに任意の情報を出力
主なオプション
-p プライオリティ
→プライオリティを指定して出力
引数
・コマンド構文:journaldに出力したい内容のコマンド構文を指定
使用例
systemd-cat ls /
→lsコマンドの結果をjournaldに送る
rsyslogdによるログ管理
rsyslogを制御するデーモン
rsyslogd
rsyslogの設定ファイル
/etc/rsyslog.conf
rsyslog.confにおける出力先の設定
セレクタとアクションの組み合わせで設定
*.info;authpriv.none;….. → セレクタ
・ファシリティ(分類)とプライオリティ(優先度)の組み合わせ
例)mail.info
→ファシリティがmail、プライオリティがinfo以上
・ドットで区切られていると、指定したプライオリティ以上のログを対象とする
・セレクタ1;セレクタ2;…..のようにセミコロンで区切り、複数指定できる
/var/log/messages → アクション(出力先)
・先頭が/ → ファイル
例:/var/log/messages
・先頭が@ → 他ホストにUDPで転送
例:@192.168.56.20
送信先での設定が必要
「@@ホスト」でTCPによる転送
・先頭が文字 → 指定したユーザー端末
例:root
・* → 全ユーザー端末
ユーザー端末への出力は、最近のバージョンでは「:omusrmsg:*」推奨
設定例
vi /etc/rsyslog.conf
local0.alert /dev/tty1
→ファシリティがlocal0でプライオリティがalert以上のメッセージが送られた場合、tty1端末に出力するように構成
→local0.=alertにするとalertのみを対象とする
mail.* -/var/log/maillog
→メールサービスのすべてのプライオリティのログを「/var/log/maillog」に出力する(大量にログが発生してもディスクへの書き込み負荷を上げないようにする)
CentOS環境における主なログファイル
/var/log/messages:一般ログ(下記の3つのファシリティに該当しないログを記録)
/var/log/secure:認証ログ
/var/log/maillog:メールログ
/var/log/cron:cronログ
rsyslogで記録されるログの形式
Mar 4 10:25:54 centos6 sshd[2216]: Accepted password for root….
日時 ホスト 出力元 メッセージ
次世代のsyslogとして開発されたもの
rsyslog
syslog-ng
loggerコマンド
書式
logger【オプション】メッセージ
概要
テスト用のログメッセージを送信
主なオプション
-p ファシリティ.プライオリティ
→ファシリティとプライオリティを指定。指定されなかった場合、user.noticeで送信
-i
→PIDを記録
-t 名前
→指定した名前を出力元として記録
引数
・メッセージ:送信するメッセージを指定
使用例
logger -p user.alert “logger test1”
→userファシリティのログはmessagesログに記録。ただしデバッグ情報は対象外
logger -p authpriv.debug “logger test2”
→authprivファシリティのログはデバッグ情報も含めて、すべてsecureログに記録
ログのローテーション
概要
/var/log/ディレクトリに記録されているログファイルは、一定期間が経過するとlogrotateによりローテーションされる。ローテーションが一定回数を超えると、古いファイルから削除されていく
CentOS環境におけるlogrotateの設定ファイル
/etc/logrotate.conf
/etc/logrotate.confの設定項目と値の組み合わせ
・compress:切り替え後のログを圧縮する
・create:ログ切り替え時に新たな空のログファイルを作成する
・daily、weekly、monthly、yearly:ログの切り替えタイミング(日時、週次、月次、年次)
・include ディレクトリ名:指定したディレクトリ配下の設定ファイルを読み込む
・mail メールアドレス:ログ切り替えによって削除されるログの内容を指定されたアドレスにメールする
・prescript~endscript:ログ切り替え前に実行するスクリプト
・postscript~endscript:ログ切り替え後に実行するスクリプト
・rotate:切り替え後に保持する世代数
ログのローテーションを実行するコマンド
logrotate
1.09.3 メール配送エージェント(MTA)の基本(重要度2)
mailコマンド
書式
mail【オプション】【宛先】
概要
メールデータを参照、もしくはメールを送信
主なオプション
-u ユーザー
→指定したユーザーのメールデータを参照(rootのみ実行可)
引数
・宛先:指定したアドレス宛てにメールを送信。引数を指定しなかった場合、メールデータを参照
使用例
mail testuser →testuser宛てにメールを送信
Subject: test mail →件名を入力してEnter
test →本文を入力してEnter
. →「.」のみ入力すると、本文の入力を完了
Linuxで主に利用されているMTA
postfix
・sendmailとの高い互換性を保ちながら、処理速度を上げ、セキュリティも向上させている
・設定が平易で最近の一部のLinuxディストリビューションの標準MTAにもなっている
exim
・Debian系の標準のMTA
・設定が平易で日本語での情報は比較的少ない
・設定ファイルはバージョンによって違う
MTAの説明
・ネットワーク経由、ローカル内でのメールの転送を行う
・メールの転送に使用するプロトコルはSMTP
/etc/aliasesファイル
書式
エイリアス名: 転送先
概要
メールの転送先(エイリアス)を設定
主な設定項目
・エイリアス名:指定されたエイリアス宛てのメールを転送
・転送先:指定したユーザーもしくはメールアドレス宛てに転送。「ユーザー1,ユーザー2」のように、カンマで区切って複数ユーザー宛てに転送することも可能
設定例
vi /etc/aliases
root: testuser
→root宛てのメールをtestuserに転送する設定
メールの転送先を設定する別のファイル
~/.forward
→一般ユーザーが自分宛のメールを、別のメールアドレスに転送したい時に設定するファイル
newaliasesコマンド
書式
newaliases
概要
メールのエイリアス設定を有効化(/etc/aliases.dbに反映)
mailqコマンド
書式
mailq
概要
送信待ちのメールキューを一覧表示できる