Skip to content

Instantly share code, notes, and snippets.

@261shimizu
Last active April 18, 2017 04:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 261shimizu/e4b4ec94a02d57537192fd17c8d86c08 to your computer and use it in GitHub Desktop.
Save 261shimizu/e4b4ec94a02d57537192fd17c8d86c08 to your computer and use it in GitHub Desktop.
設定ファイル

.bash_profileと.bashrc

概要


デフォルトでは、ログインシェルはbashになっている。
この場合、.bashrc.bash_profileの様な設定ファイルが読み込まれることで、定義した設定が自動的に反映される
具体的には、PATHを通したり、エイリアスを定義したり、プログラムを実行したりする
読み込まれる順番は、

  1. /etc/profile
    全ユーザに適用されるデフォルトの設定ファイル
    つまりユーザ単位では編集しない

  2. ~/.bash_profile
    ログイン時にのみ実行される
    ユーザ単位での設定を定義するファイル

  3. ~/.bash_login
    ~/.bash_profileが存在しない場合にのみ、読み込まれる設定ファイル

  4. ~/.profile
    /.bash_profile,/.bash_loginが存在しない場合に読み込まれる設定ファイル

  5. ~/.bashrc
    bashを起動するときに毎回実行されるファイル

/.bash_logout(ログアウト時に毎回読み込まれる設定ファイル。)というものや、/.bash_history(bashで実行したコマンドの履歴を記録するファイル)というのもある

/.bash_profileと/.bashrcの使い分け


  • ~/.bash_profile
    bash_profileは、ログイン時のみに実行される
    具体的には、

    • 環境変数を設定する
      環境変数はプロセス間で勝手に受け継がれるのでログイン時のみ設定すれば十分
  • ~/.bashrc bashを起動するときに毎回実行される
    新しくシェル(bash)を起動したときにも実行される
    たとえば、新しい端末を開いたときは、/.bash_profileは実行されず、/.bashrcが実行される
    具体的な用途は、

    • 環境変数でない変数を設定
    • エイリアスを定義
    • シェル関数を定義する
    • コマンドライン補完の設定をする
      これらは、bashを起動するたびに毎回設定する必要がある

シェル(コマンドをカーネルに伝えるもの)は、いろいろ種類がある(sh,bash,zsh,cshなど)。
ログイン時にどのシェルを使うかが設定できる(これがログインシェル)
ログイン後に、使うシェルを変えることもできる

  • その他
    基本的には上の2つで事足りる
    しかし、全ユーザーでログイン時に起動したいアプリケーションがある場合などは/etc/profileにその処理を書いておくことで全ユーザでログイン時に処理が実行される
    また、ログイン時には必ずこの処理をしてほしいということがあれば、/.bash_loginにその処理を書いておくことで、/.bashrcを削除しても処理が実行される

  • ちなみに

    • .bash_profileからbashrcを呼び出している
      本来、ログイン時には.bash_profileだけが実行され、.bashrcは実行されないが、.bash_profileの中に、.bashrcを実行する記述があるので、ログイン時にもbashrcが実行される
    • suコマンドで、ユーザーを切り替える際、-をつけるかつけないかで、挙動が変わる
      su ユーザ名とすると、.bashrcのみが実行されるが、
      su - ユーザ名とすると、.bash_profileと、.bashrcが実行される
    • .bash_profileや.bashrcの大元 .bash_profileや.bashrcの大元は、/etc/skelにある
      useraddコマンドでユーザを作成すると、このディレクトリが作成したユーザのホームディレクトリにコピーされる
      なので、全てのユーザのホームディレクトリに共通に配布したいファイルがある場合、事前に/etc/skel内に置いておくと確実
  • まとめ
    ログイン時に実行されるのが、.bash_profile
    シェル起動時に実行されるのが、.bashrc
    ログイン時のみ設定できればよいものを、.bash_profileに、シェル起動ごとに設定したいものを.bashrcに書いておく

その他各種設定

ネットワーク


ネットワーク⇒設定ファイル。このgistはネットワーク設定管理全般

/etc/sysconfig/network-scripts/ifcfg-○○

SSH


SSH⇒ここらへん

/etc/ssh/sshd_config

名前解決


名前解決⇒この辺。ネットワーク周りの話も一緒に書いてる

/etc/resolve.conf /etc/nsswitch.conf /etc/hosts

パケットフィルタリング


iptables⇒この辺

簡単にまとめ

  • 現状確認はiptables -L
    • ルール(INPUTやFORWARD、OUTPUT)のマッチオプションなど細かい情報は、iptables -L -v
    • -vで表示されるのは、
      • pkts(ルールにマッチしたパケット数)
      • bytes(同バイト数)
      • target(ルールにマッチしたパケットに対するターゲット)
      • prot(ルールを適用するプロトコル)
      • opt(パケットの断片化の区別)
      • in(ルールを適用する入力インタフェース)
      • out(同出力インタフェース、INPUTチェーンでは指定不可)
      • source(ルールを適用するパケットの送信元アドレス)
      • destination(ルールを適用するパケットの送信先アドレス)
        -使いのマッチオプション(stateやreject-withなど)

自動起動の設定


chkconfig(check config)

  • --listで/etc/init.d/にあるサービス状態(状況別)が確認できる
  • chkconfig ○○ onは自動起動
  • chkconfig ○○ offは無効

SELinux設定


/etc/sysconfig/selinux
実はこれシンボリックリンク。実体は/etc/selinux/config

SELINUX=○○というところを変える

状態確認は、getenforceコマンド

SELINUX=disabledにすると無効化

EnforcingとPermissiveを切り替える場合、一般的にはsetenforceコマンドを使う。
このコマンドはdisabledにできないので、無効化する場合、ファイルを編集する

Enforcing⇒SElinux有効、ポリシー強制
Permissive⇒SElinux有効、ポリシーは強制されない
Disabled⇒SELinux無効

SELinuxには、ポリシーの知識がなくても変数のon/offを切り替えるだけでポリシーを変更できるブール値が用意されている
このブール値の一覧を表示するには、getsebool -aコマンド

ブール値を変更するには、
setsebool -P <ブール値名> <値>
とする。(ex. sudo setsebool -P httpd_can_network_connect_db on)

ハードウェア情報(ファイルシステム情報含む)確認

背景


バックアップミドルウェアを使用したときに、問い合わせしなきゃいけないことがあった
↓ 問い合わせする
↓ 環境を教える際にHW情報を求められる

ということだけど、実際、システム管理屋さんならハードウェア構成やスペックなんかは知っとかなきゃね、というお話。

ハードウェア情報をコマンドで確認する


  • CPU情報
cat /proc/cpuinfo

コアの数だけ、同じ情報が繰り返し出てくる。基本的にはモデル名(model name)がわかれば十分。
少し細かく見ると、機能フラグ(flags)を見ると、CPUが対応している機能を確認できる。(lm(long mode)があれば64bit対応)
また、bogomipsで、大雑把なMIPS(1秒当たりの実行可能命令数:100万単位)がわかる。理想的な値だけど。

  • メモリ情報
cat /proc/meminfo

これで見れるけど、詳細すぎてわかりづらい。
freeコマンドで十分

free
  • ディスク情報

fdisk -l。これは割愛。

ファイルシステムの確認は、dfコマンド。これも割愛。
すこしかいとくと、df -aでサイズ0のファイルシステムも出力。-Tで各ファイルシステムの種類も出力。

もう少し物理的な情報は、

hdparm -i /dev/sda

↑IDEやSATAで接続されたディスク情報

smartctl -i /dev/sda

↑同じようなもの。-aとか-xでさらに詳細表示。-tをするとセルフテストを実行する。
とかで確認可能。

ディスクに対する読み書きの統計情報を知るには、iostatコマンドを使用する。

iostat

tpsは、transfer per secondの略で、1秒間に読み書きしたデータの回数を表す。
次の2つが、1秒間の読み書きキロバイト数、その後の2つが1秒間の読み書きデータ量。

  • BIOS情報
demidecode

SMBIOSだけでなく、DMIという規格に基づいて、CPUやメモリ情報もかなり細かく出力される。
-s bios-versionとか、-tとかで個別に確認できる。

  • 周辺機器情報
lspci

-vや-vvで詳細情報。EthernetやUSBなどのコントローラが確認できる。

lsusb

USB情報出力。

  • 読み込まれているモジュール一覧
lsmod

ファイルシステム情報確認


おまけ。

ファイルシステムに関する単位は、

セグメントとか、ページフレームとか、ページとかブロックとか、セクタとか、、、、、あほかと。

ひとまず、ファイルシステムのブロックサイズを知りたければ、tune2fsコマンドを実行する

tune2fs -l /dev/sda2 | grep "Block size"

注意として、他のコマンドの出力結果がbyte単位ではなくblock単位であった時のこのファイルシステムのblock sizeとは一致しないことがある。

iostat

例えば、iostatコマンドをオプションなしで実行すると結果はblock単位で出力されるが、これは1block辺り512byteとなる。ちなみに-kオプションでbyte単位出力

これは、iostatが言っているblockとは、実はセクタのことだから。
セクタはディスクデバイスにおけるデータ転送の最小単位で基本的には512になっているはず。
一方、ファイルシステムがいうblockとはファイルシステムがデータを格納するときに確保する領域の最小単位。
したがって、セクタが512であって、保存するデータが512だったとしても、block sizeが4kbyteでフォーマットされているならば、4kbyteを消費してデータを格納する

ただし、実際はさらにこの無駄を排除するためにblockをフラグメント化して使う機能があったりする。

ホスト名変更

手順


vi /etc/hosts

127.0.0.1のあとにホスト名を記述する(localhostの前)か、
「自分のIPアドレス ホスト名」という行を追加するか

更に、

vi /etc/sysconfig/network

HOSTNAME=につづけてホスト名を記述する

反映はリブート

以上

マウント

自動マウント設定


マウントは、システム終了時に解除されるので、起動時に自動マウントするように設定することが多い。

自動マウント設定のファイルは、/etc/fstab
なお、ここに書かれてる設定は、mount -aコマンドでマウントされる(swap以外)。

/etc/fstabファイルに記述されているのは以下の項目

  • ブロックスペシャルデバイス
  • マウントポイント
  • ファイルシステムのタイプ
  • オプション
  • dumpコマンドがダンプ(バックアップ)するか否か(0→不要、1→ダンプする)
  • ブート時にチェックする順番(0だとチェックを行わない、ルートファイルシステムでチェックを行う時は1、それ以外なら2)

fstab書き方。

/dev/sdb3 /mountpoint -t ext4 -o defaults,_netdev,size=○○g 0 0

size=○○g(○○Gでマウント)は、tmpfsでよく使われる。

↓tmpfsについて

※マウントオプションの size= でサイズを指定しないと、実メモリの半分の容量が割り当てられてしまうので注意。 ※tmpfs 上に置かれているファイル分のメモリは、そのファイルが削除されない限り開放されません。 そのため、実メモリとスワップの合計より多くの tmpfs をマウントして、実メモリとスワップの合計以上の容量を消費した場合、最悪システムがクラッシュします。

オプションは以下の通り

オプション 説明
async ファイルシステムの非同期入出力を設定する
auto -aオプションでmountコマンドを実行したときにマウントする
noauto -aオプションでのmountコマンドの対象外にする
defaults デフォルト(async,auto,dev.exec,nouser,rw,suid)を使用
exec バイナリの実行を許可
noexec バイナリの実行を不許可
ro 読み取り専用でマウント
rw 読み書きを許可してマウント
unhide 隠しファイルも表示する
suid SUIDとSGIDを有効にする
user 一般ユーザでもマウント可能にする
users マウントしたユーザ以外でもアンマウントできるようにする
usrquota ユーザクォータを使用する
grquota グループクォータを使用する
noquota クォータを使用しない
dev ファイルシステム上の特別なデバイスを解釈する
nodev ファイルシステム上の特別なデバイスを解釈しない
noatime ファイルシステムのinodeアクセス日時を更新しない。パフォーマンスの向上に役立つ※
nodiratime ファイルシステムのディレクトリのinodeアクセス日時を更新しない。パフォーマンスの向上に役立つ※
relatime 変更日時にあわせてinodeアクセス日時を更新する。noatimeに似ている。パフォーマンスの向上に役立つ※
discard ブロックがフリーになった時にブロックデバイスにTRIMコマンドを実行する。ファイルシステムがSSD上にあるときに使うことが推奨されている
nofail 存在するときはデバイスをマウントし、存在しないときは無視する。起動時にリムーバブルメディアのエラーが報告されるのを防止する

※は、こちらを参考に--fstab ArchWiki

時刻

タイムゾーンとハードウェアクロック、システムクロック


  • ハードウェアクロック
    ハードウェアクロックはPCのマザーボードに刻まれる時刻。
    電源OFFでも予備電源かなんかで動き続ける。
    ハードウェアクロックにはローカルタイムもUTCも関係ない、これらは人の都合の概念
    推測だけど、周期的に数が進んでいくだけ。
    これを読み取るときに、どう読み取るかに関わるのが、ローカルタイムとUTC。
    ハードウェアクロックに、123456.789みたいな数字が刻まれていたとして、UTCで読み取るならこれは何年何月何日で、ローカルタイムで読み取るならこれは何年何月何日みたいなイメージ

ちなみに、Windowsではハードウェアクロックはローカルタイムで固定されている

  • システムクロック
    システムクロックは、システムが使う時計。
    システムが動いおている間はこれが唯一の時計。
    システムクロックは必ずUTC固定
    システム起動時に、ハードウェアクロックを読み取ってシステムクロックに書き込む。
    システム終了時に、システムクロックの時刻をハードウェアクロックに書き込む。

推測では、
システム終了
⇒/etc/adjtimeを読み込んで、UTCであればシステムクロックをそのままハードウェアクロックに書き込む。
⇒LOCALであれば、/etc/localtimeを読み込んでローカルタイムに直してからハードウェアクロックに書き込む。

システム起動
⇒/etc/adjtimeを読み込んで、UTCであればハードウェアクロックをそのままシステムクロックに書き込む。
⇒LOCALであれば、/etc/localtimeを読み込んでローカルタイムをUTCに直してからシステムクロックに書き込む。

この、どちらかをどちらかに書き込むのと同じことを、hwclockコマンドでやっている。
hwclock --systohc --○○⇒システム終了時と同じ挙動。
hwclock --hctosys --○○⇒システム起動時と同じ挙動。

つまり、ハードウェアクロックに書き込むときに必ずローカルなのかUTCなのかをそろえているから(コマンドと同時にadjtimeが書き換わる)、矛盾が起こらない
ちなみに、hwclock --show --debugとやるとわかりやすいかも

設定ファイルとの関連


上述したように、ハードウェアクロックを読み書きするときには/etc/adjtimeと/etc/localtimeを参照する
dateコマンドは、システムクロックを表示するコマンド
システムクロックを読み込むときには、/etc/sysconfig/clockに記述されているタイムゾーンを参照して、ローカルタイムに直してから表示する

ntp(時刻同期)との関連


ntpデーモンによって時刻同期するとき、同期されるのはシステムクロック。これはシステム起動時にシステムクロックが唯一の時計であることからも理解できる

Windowsとの関連


上述したように、Windowsのハードウェアクロックはローカルタイムで固定なので、Linuxとのデュアルブート環境においては、LinuxのハードウェアクロックをUTCにすると矛盾が起こる可能性があるので、ローカル推奨

また、VirtualBox等でWindows上にLinuxを入れたとき、ハードウェアクロックをUTCにすると、Windows(ホスト)のハードウェアクロックをUTCとして扱ってしまう。
結果、たとえばAsia/Tokyoの場合、Windowsの時刻+9時間と表示されるので、9時間のずれが発生する

つまずいたこと


システムクロックのUTC/LOCAL設定を変更できると思っていた
これが大きな間違い。
hwclock --hctosysとするのは、システムクロックを上書きするが、システムクロックはUTC固定なので結局ハードウェアクロックをUTCに直して上書きしているだけ。
OSインストール時に表示される「system clock uses UTC(システムクロックでUTCを使用)」というオプションで何が変わるかというと、ハードウェアクロックの読み取りかた。
チェックを外すとシステムクロックがローカルタイムになるわけではない。だったら「ハードウェアクロックにUTCを使用」と書いてほしい。わかりづら過ぎる
実際、チェックのあるなしで変わるのは、
/etc/adjtimeの3行目だけ。

更に、ネットとかで探すとよく出てくる、/etc/sysconfig/clockの変更方法に、リンクを張ったりしているがこれは公式では非推奨。
公式では素直に/etc/sysconfig/clockを書き換えろと言っている。viとかでいじればよい。
タイムゾーンを書き換えたら、tzdata-updateコマンドを実行して反映させる

また、これもよく出てくる、/etc/sysoconfig/clockの末尾にUTC=falseやUTC=trueと書き足すやつも、意味がない
この書き足しは、rhel6より前のバージョンでの記述。
少なくとも6では、adjtimeを書き換えろと言っている(コマンドでもviでも一応実験的には成功した)。

時刻同期設定

全面的にredhatのガイドを参考にしている。 !!!PTPの記述もいつか別ギストにまとめるべし

概要


マザーボードにはハードウェアクロックが搭載されている
しかし、これはあまり正確ではない。(年10分ずれるという話も、月5分ずれるという話も。)
したがって、時刻を正確にチューニングしてやる必要がある

これをしなければ、タイムスタンプ等の情報もずれてしまい、障害調査の手がかりがつかめなくなる
正確な時刻の確保はサーバ管理の基本

周辺知識


PCの時刻は、ハードウェアクロックとシステムクロックの二種類がある
システム起動時には、システムクロックが読まれるが、これは電源を切ると止まる
ハードウェアクロックはシステム停止時にも動き続ける
システム起動時にはハードウェアクロックを読み込んでシステムクロックに書き込まれる
システム終了時にはシステムクロックを読み込んでハードウェアクロックに書き込まれる

ネットワークから現在時刻を提供するサービスがNTP(Network Time Protcol)。
世界中の多くの標準機間には原子時計があり、これが参照先として利用可能になっている場合がある
日本だと福岡大学、、、だったかな(?)
このサービスを使用することで時刻合わせをする
(PTPというものもあるっぽい)
時刻を合わせるとき、特に時刻を遅らせる場合、急に遅らせる操作はしない
時刻が後ろへ飛ぶことによってログの時刻の前後関係がひっくり返る可能性があるため
システムクロックのテンポを少しだけ落とすことでゆっくりと時計を遅らせる操作をSLEWモードの時刻設定という

稼働中であれば、
定期的にntpサーバを参照してシステムクロックをSLEWモードで正確に保ち、定期的にシステムクロックをハードウェアクロックへ反映することにより正確な時刻を保つことができる

カーネルが自動的にハードウェアクロックを同期するモードがある(11分モードといわれてたりする)
ntpを設定し、そのモードにすると、11分ごとにシステムクロックをハードウェアクロックに書き込むことで時刻合わせを自動的に行う

ntp詳細


NTPサーバは、時間信号のソースとなる原子時計からの同期距離によって分類される
サーバは、1から15までのstratum(階層)に分類される
原子時計はソースであることからStratum 0と呼ばれる
ただし、Stratum 0 パケットがインターネット上で送信されることはなく、stratum 0原子時計のすべてはstratum1と呼ばれるサーバに接続されている
Stratum n がついているパケットで同期されるサーバは、その次に回のstratumに所属し、パケットをstratum n+1とマークする
同一stratumのサーバは相互にパケットを交換できる
stratum16という名称は、サーバが現在信頼できるタイムソースと同期していないことを意味する

デフォルトでは、NTPクライアントはそれよりも下位のstratumにあるシステムのサーバとして機能する

NTPが示すのは、1900年1月1日からの積算秒数。
NTPは、4つのタイムスタンプを使って往復時間とサーバー応答時間の計算を可能にしている
具体的には、送信元タイムスタンプのついたパケットが送信され、受け取った側は、受信先タイムスタンプを追加する。
日時情報の要求を受理した後、パケットの返信前に転送先タイムスタンプを追加する。
返信パケットがNTPクライアントに届くと、受信先タイムスタンプが生成される
これを用いて、往復時間を英山市、処理時間を差し引くことで実際の移動時間を導き出す

時間情報を含むパケットは、受信後に直ちに処理されるのではなく、最初に検証され、その後にいくつかの他の時間サンプルと一緒に処理されて、時間を予想する
これをシステムクロックと比較し、タイムオフセット(システムクロックとntpdが判断した時間の差)を判断する。
このタイムオフセットが1000秒を超える場合、ユーザが手動で調整を行う必要がある(インストールスクリプトを利用)

誤差ファイルは、通常の周波数で稼働しているシステムクロックと、UTCよ同期し続けるために必要な周波数との間の周波数オフセットを保存する
このファイルに値があれば、システム起動時に読み取られ、クロックソースの修正につかわれる
この値は1時間ごとにntpdが計算して、ファイルを置換する。更新ではなく置き換えなので、誤差ファイルにはntpdの書き込みパーミッションが無いといけない

ネットワーク上の攻撃者は、不正確な時間情報のあるNTPパケットを送信することで、サービス妨害を試みることがある。
NTPサーバのパブリックプールを使用しているシステムでは、/etc/ntp.confのパブリックNTP一覧内に4つ以上のNTPサーバを記載することでこのリスクを軽減できる

内部のタイムソースがある場合、NTPパケットが配布されるネットワークを保護することが必要
ブロードキャストとマルチキャストの各モードでは、デフォルトで認証が必要になる
ネットワークが信頼できると判断した場合、ntp.confファイル内のdisable auth指示文を使って認証を無効にできる

DHCPクライアントであるdhclientは、DHCPサーバからNTPサーバのリストを受信すると、これをntp.confに追加してサービスを再起動する
この機能を無効にするには、PEERNTP=noを/etc/sysconfig/networkに追加する

**仮想マシンは実際のハードウェアクロックにアクセスできず、**仮想クロックの安定性はホストシステムの作業量に依存することから、十分な安定性が無い
このため、使用する仮想化アプリケーションが準仮想化クロックを提供する必要がある
KVMのあるRHELでは、デフォルトのクロックソースはkvm-clockになる

実はNTPはうるう秒に対応する。
Stratum 1サーバが対応するので、ユーザにはあまり関係ないけど、、、。

ntp設定


ntpの設定ファイルは、/etc/ntp.conf
このファイルは、ntpdとともにインストールされる。
RHELなら、デフォルトでは、RedHatプールからのタイムサーバを使用する設定になっている

下は自分の環境(centos)でのntp.conf(いじっていないのでデフォルト)


[@centos ~]$ cat /etc/ntp.conf
# For more information about this file, see the man pages
# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).

driftfile /var/lib/ntp/drift

# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery

# Permit all access over the loopback interface.  This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
restrict -6 ::1

# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

#broadcast 192.168.1.255 autokey        # broadcast server
#broadcastclient                        # broadcast client
#broadcast 224.0.1.1 autokey            # multicast server
#multicastclient 224.0.1.1              # multicast client
#manycastserver 239.255.254.254         # manycast server
#manycastclient 239.255.254.254 autokey # manycast client

# Enable public key cryptography.
#crypto

includefile /etc/ntp/crypto/pw

# Key file containing the keys and key identifiers used when operating
# with symmetric key cryptography.
keys /etc/ntp/keys

# Specify the key identifiers which are trusted.
#trustedkey 4 8 42

# Specify the key identifier to use with the ntpdc utility.
#requestkey 8

# Specify the key identifier to use with the ntpq utility.
#controlkey 8

# Enable writing of statistics records.
#statistics clockstats cryptostats loopstats peerstats
[@centos ~]$

少し詳しく見ていく

項目 説明
driftfile 誤差ファイルへのパス(ディレクトリがntpdで書き込み可能である必要がある)。ファイルにはシステム起動時に毎回システムクロックの周波数を調整する値が含まれる。
以下、レート制限アクセス(discard) ---
average 許可される最小限の平均パケット間隔を指定するlog₂秒の引数を取る。デフォルトでは3
minimum 許可される最小限のパケット間隔を指定し、log₂秒の引数を取る。デフォルトでは1
monitor 許可されるレート制限を超えた場合のパケットのdiscardの確立を指定する。デフォルトは3000秒。このオプションは1000個/秒のリクエストを受信するサーバに用意される
peer アドレス ピアのアドレス(同一StratumのNTPサービスを実行しているサーバのアドレス)を追加する
server アドレス サーバのアドレス(1つ上の階層のNTPサービスを実行しているサーバのアドレス)を追加する
broadcat アドレス 送信用のブロードキャストまたはマルチキャストアドレス(NTPパケットをブロードキャストまたはマルチキャストする宛先のアドレス)を追加する。ここでのアドレスはパケットの送信先となるIPブロードキャストまたはマルチキャストアドレス。※
manycast アドレス manycastクライアントアドレス(NTPサーバの発見に使用するマルチキャストアドレス)を設定する※2
broadcastclient ブロードキャストメッセージを受信可能にする。このコマンドは、システムがNTPクライアントのように動作するように設定する。クライアントとサーバの両立は可能
manycastserver アドレス manycastサーバのアドレス(NTPパケットをマルチキャストすることでクライアントがサーバを発見できるようにするアドレス)を追加する。システムがNTPサーバのように動作するように設定する。サーバとクライアントの両立は可能
multicastclient アドレス マルチキャストクライアントアドレス(マルチキャストNTPパケットようにマルチキャストアドレスを監視する様な)設定。※3
以下、オプション ---
burstオプション 時間オフセットの統計情報の平均的な品質を向上させる。ただし、公開NTPサーバに設定すると汎用とみなされるので設定しないように。組織内のアプリケーションにのみ使用するようにする
iburstオプション 初回同期にかかる時間を改善する。デフォルトのオプション
keyオプション サーバーまたはピアコマンドの最後に付けるオプション。鍵を使った対称認証を設定する。書式はkey 数字(1から65535まで)
minpollオプション デフォルトのポーリング間隔を変更する。書式はminpoll 値 and maxpoll 値。maxpollを低く設定すると、クロックの精度が高まる
preferオプション 特定のサーバが他の同様の統計情報のサーバよりも優先されるように指定する。サーバ又はピアコマンドの最後につける
ttlオプション デフォルトで使用される特定のTime-to-live(TTL:有効期限)の値を指定する。サーバ又はピアコマンドの最後につける
version 値 デフォルトで使用される特定バージョンのNTPを指定する。サーバ又はピアコマンドの最後につける
以下、アクセス制御エントリ(restrict) ---
nomdifyオプション 設定に変更が加えられないようにする
notrapオプション nptdc制御メッセージプロトコルトラップを防ぐ
nopeerオプション ピア関連付けが形成されないようにする
noqueryオプション nptqおよびnptdcクエリーへの応答を防ぐが、タイムクエリーは除外され(このオプションは重要!外さないことが推奨)
restrict default 明示的に許可されていないすべての物へのアクセスを妨害する(ループバックアドレス含む)
ignore ntpqおよびntpdcクエリーを含むすべてのパケットが無視される
kod Kiss-o'-deathパケットが送信され、不要なクエリーが減る
limited パケットがレート制限のデフォルト値またはdiscardコマンドで指定された値に違反する場合、タイムサーバ要求に応答しない。nptqおよびntpdcクエリーには影響が無い
lowpriotrip 一致するホストがトラップを低い優先度に設定する
noserve ntpqおよびntpdcクエリーを除くすべてのパケットを拒否する
notrust 暗号法で認証されないパケットを拒否する
ntpport 発信元ポートが標準のNTP UDPポート123の場合、一致アルゴリズムが制限のみを適用するように修正する
version 現在のNTPバージョンに一致しないパケットを拒否する

※ブロードキャストおよびマルチキャストのモードは、デフォルトで認証を必要とする。このコマンドは、システムがNTPブロードキャストサーバとして作動するように設定する。使用するアドレスっは、ブロードキャストかマルチキャストアドレスである必要がある。
※2 ここでのアドレスはIPマルチキャストアドレスで、ここからパケットが受信される。クライアントはこのアドレスにリクエストを送信し、嘔吐から最善のサーバを選んで他を無視する。このコマンドは、システムがNTPクライアントのように動作するように設定する。システムは、同時にクライアントとサーバの両方になることができる
※3 マルチキャストメッセージの受信がd系るようになる。ここでのアドレスは、サブすくライブするアドレスになる。これは認証と合わせて使用して、サービスの中断を防ぐ。このコマンドは、システムがNTPクライアントのように動作するように設定する。両立可能

NTPD SYSCONFIGファイル


NTPD SYSCONFIGファイルとredhatには書かれているけど、これがどこにあるなんという名前のファイルなのか不明。

ただ、

# Command line options for ntpd
OPTIONS="-g"

のようになっているらしく、このファイルはサービス起動時にntpd initスクリプトが読み込むそう
-gオプションは、ntpdがオフセットの制限である1000秒を超えても時間の同期を試みるようにするオプション
ただしこれはシステム起動時のみ。
このオプションが無いと、タイムオフセットが1000秒を超える場合、ntpdは終了する。
また、-gオプションを使用した場合でも、サービスが再起動してオフセットが1000秒を超える場合は、システム起動後に終了する。

CHRONYの無効化


ntpdを使用するには、デフォルトのユーザースペースデーモンであるchronydを停止知って無効にする必要がある
これにはroot権限でコマンドを実行する必要がある

systemctl stop chronyd

着信NTPパケットを許可するファイアウォールの設定


NTPトラフィックは、ポート番号123上のUDPパケットで構成されているので、ファイアウォール設定でこのポート・UDPを開けなきゃダメ

NTPDATEサーバの設定


ntpdateサービスの目的は、システム起動時にクロックを設定すること。
このサービスはこれまで、ntpdateが正確な時間を確保して、クロックでジャンプが生じないようにしてからサービスが開始するために使われていた。

ntpdateおよびstep-tickersリストの仕様は非推奨とみなされているため、RHEL7では、-gオプションをつけたntpdコマンドをデフォルトで使用し、ntpdateは使用しない

RHEL7 のntpdateサービスが役に立つのは、ntpdを使わずに単独で使用する場合のみ
サービスを並行して起動するsystemdでは、ntpdateサービスが提供するtime-sync.targetへの並び順依存関係を指定しない限り、ntpdateサービスを有効にしても正確な時間を確保した後に他のサービスが起動することはない
あるサービスが正確な時間を伴って起動されるようにするには、そのサービスにAfter=time-sync.targetをついあk氏、ターゲットを提供するサービスの1つを有効にする

RHEL7 のサービスにはデフォルトでこの依存関係が含まれているものもある(例えばdhcpd,dhcpd6,crond)

クロックソースの設定


システムで利用可能なクロックソースを一覧表示するには、以下のコマンドを実行する

~]$ cd /sys/devices/system/clocksource/clocksource0/
clocksource0]$ cat available_clocksource
kvm-clock tsc hpet acpi_pm 
clocksource0]$ cat current_clocksource
kvm-clock

上記の例では、カーネルはkvm-clockを使用している
これは仮想マシンなので、起動時にこのクロックソースが選択されている
利用可能なクロックソースはアーキテクチャに依存する

デフォルトのクロックソースを上書きするには、clocksource指示文をカーネルのGRUBメニューエントリの末尾に追加する。grubbyツールを使用して変更する。
例えば、システムのデフォルトのカーネルがtscクロックソースを使用するように強制するには、以下のコマンドを実行する

~]# grubby --args=clocksource=tsc --update-kernel=DEFAULT

--update-kernelパラメータはキーワードALL、またはカーネルインデックス番号のコンマ区切の一覧も受け入れる

文字化け,キーボード設定・言語(ロケール)設定

文字化け


  • Ubuntuサーバー、コンソールで日本語が表示できない
  • なのでインストールの際の言語選択を日本語にすると、文字化けが起こる
    • でも、日本語にしておくと、リモートで操作したときには日本語で表示される

文字化け解消法


  • .bashrcをviで編集
    case "$TERM" in
        linux)LANG=C;;
        *)    LANG=ja_JP.UTF-8;;
    esac
  • 意味は「端末 (ターミナル) の名称」の環境変数である TERM が linux なら「言語」の環境変数である LANG を C (英語) にする。パターンにマッチしなければ、LANG を日本語で文字コードを UTF-8 にするらしい

キーボード設定


Vagrantとかで立ち上げると、キーボード設定がEnglishになっていたりする。
変更しないとかなり使いづらいので、変更方法メモ

キーボード設定ファイルは、/etc/sysconfig/keyboard


KEYTABLE="jp106"
MODEL="jp106"
LAYOUT="jp"
KEYBOARDTYPE="pc"

とする。
ちなみに、KEYTABLEに設定できる値は、/lib/kdb/keymaps/i386/<配列>/<表明>.map.gzにある表名

言語(ロケール)設定


言語設定ファイルは、/etc/sysconfig/i18n

LANG="ja_JP.UTF-8"とかがいいんでないかな。

現在の設定確認は、localeコマンドを実行。
利用できるロケール一覧は、locale -a

また、SYSFONTという項目は、デフォルトの仮想コンソールフォント(Xsystemではない)の指定
SYSFONT=○○-○とすれば、変更可能
使えるフォントは、/lib/kbd/consolefonts/ または/usr/lib/kbd/consolefontなどにgzipされた状態で入っているらしい。

ちなみに、i18nとは、internationalisationの略だそうです。iとnの間に18文字ということらしい

変更を反映するときは、. /etc/sysconfig/i18n
↑このドットについては、シェルの実行コマンドらしい
現在と同じシェルで開く、だったかな

CentOS7からは、確認も変更も方法が変わった!!
localectlコマンドを使用する

  • 現状確認

    • localectl status
  • 使用可能なロケールの一覧

    • localectl list-locales
  • ロケールの変更

    • localectl set-locale LANG=ia_JP.UTF-8
  • 設定ファイル

    • /etc/locale.conf
  • 反映は6でも7でも一緒。sourceか.

/etc/locale.conf (RHEL7)について


システム全体にわたるロケール設定は/etc/locale.confファイルに保存され、systemdデーモンが初期ブート時に読み込む
/etc/locale.confに設定されたロケール設定は、個別のプログラムやユーザが上書きしない限り、すべてのサービスやユーザに継承される

オプション 説明
LANG システムロケールのデフォルト値
LC_COLLATE ローカルのアルファベットでの文字列を比較する機能の動作を変更する
LC_CTYPE 文字処理および分類機能とマルチバイト文字機能の動作を変更する
LC_NUMERIC 小数点に対して小数点を表すコンマなどの詳細と共に数が通常出力される方法を記述する
LC_TIME 24時間表記か12時間表記かという現在の時間表記を変更する
LC_MESSAGES 標準エラー出力に書き出される診断メッセージに使用されるロケールを決定する
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment