ホストのセキュリティ
「サービスを止めた」と言うとき、それが今動いているプロセスの話なのか、次に起動したときの話なのかで、必要なコマンドが変わります。片方だけでは止まりません。
まず、このマシンが何を晒しているかを見る
ターミナル
ss -tuln| オプション | 意味 |
|---|---|
-t | TCP を表示 |
-u | UDP を表示 |
-l | 待ち受け (LISTEN) 中のものだけ |
-n | サービス名に変換せず番号のまま表示 |
-p | 待ち受けているプロセス名と PID を表示。root 権限が要る |
-a | 全ソケットを表示 |
ss は旧来の netstat を置き換えるコマンドで、オプションの体系はほぼ同じです。netstat -tuln と ss -tuln は同じ意味になります。netstat は net-tools パッケージの古いコマンドで、現代の環境では ss が推奨されます。試験ではこの対応を知っているかが問われます。
stop だけでは、次の起動でまた上がる
| コマンド | 効果 |
|---|---|
systemctl stop <unit> | 今動いているプロセスを止める。次回起動時には再び立ち上がる |
systemctl disable <unit> | 自動起動の設定を外す。今動いているプロセスはそのまま |
systemctl mask <unit> | ユニットを /dev/null へのリンクで覆い隠し、起動そのものを不可能にする |
サービスを完全に止めるには stop と disable の両方が要ります。片方だけでは不十分だ、というのが試験の狙いどころです。
mask はさらに強い措置です。disable は自動起動を止めるだけなので、他のユニットが依存関係として要求すれば起動してしまいます。それも防ぎたいときに mask を使い、解除は unmask です。
ターミナル
systemctl is-active <unit>
systemctl is-enabled <unit>
systemctl list-unit-files --state=enabledlist-unit-files --state=enabled は自動起動が有効なユニットを一覧します。棚卸しの出発点として便利です。
誰が入っていたのかを見る
| コマンド | 意味 |
|---|---|
last | ログインの履歴を新しい順に表示 |
lastlog | 各ユーザーの最終ログイン日時を一覧表示 |
w | ログイン中のユーザーと実行中のプロセスを表示 |
who | ログイン中のユーザーを表示 |
接続元による古典的なアクセス制御が TCP Wrapper で、/etc/hosts.allow と /etc/hosts.deny の2つのファイルで制御します。判定は hosts.allow が先で、そこで許可されればそれ以上見ません。両方に書かれていれば allow が勝ちます。
一時的に締める
/etc/nologin というファイルを作ると、root 以外のログインが拒否されます。ファイルの中身がログイン試行者へのメッセージとして表示されます。メンテナンス時に使い、終わったら削除します。
ulimit はシェルからプロセスに与えるリソース制限です。ulimit -a で現在の設定を一覧、-n でオープンできるファイル数、-u でプロセス数、-f でファイルサイズを制限します。恒久的な設定は /etc/security/limits.conf に書きます。
パスワードポリシーの既定値は /etc/login.defs にあり、PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE で有効期限の初期値を決めます。既存ユーザーの変更は chage で行います。
試験で狙われるところ
stop は今のプロセス、disable は次回以降の自動起動で、両方必要です。mask は /dev/null へのリンクで、依存関係経由の起動も防ぎます。hosts.allow と hosts.deny は allow が優先されます。ss -tuln の -n は名前解決をしない指定です。そして /etc/nologin があっても root はログインできます。