Closed26

学習記録#36 250722

ろみぃ(konatsu)ろみぃ(konatsu)

一部のサーバーでは、ユーザーアカウントは必要だが、ログインしてシェルを操作したりはさせたくないものがある(メールサーバーなど)

こういう時に、ユーザーのログインシェルを/bin/falseや/sbin/nologinに変更すると、一般ユーザーのログインを禁止することができる

ろみぃ(konatsu)ろみぃ(konatsu)

ユーザーが利用できるリソースを制限する方法がある。
無制限に利用できる状態だと、一人のユーザーがリソースを使い切ってしまったりしたら大変なことになる

ulimitコマンドを使って、制御する

例)
-aオプション:全ての設定値を表示

$ ulimit -a
real-time non-blocking time  (microseconds, -R) unlimited
core file size              (blocks, -c) 0
data seg size               (kbytes, -d) unlimited
scheduling priority                 (-e) 0
file size                   (blocks, -f) unlimited
pending signals                     (-i) 63868
max locked memory           (kbytes, -l) unlimited
max memory size             (kbytes, -m) unlimited
open files                          (-n) 1048576
pipe size                (512 bytes, -p) 8
POSIX message queues         (bytes, -q) 819200
real-time priority                  (-r) 0
stack size                  (kbytes, -s) 8192
cpu time                   (seconds, -t) unlimited
max user processes                  (-u) unlimited
virtual memory              (kbytes, -v) unlimited
file locks                          (-x) unlimited

unlimitedになってるやつは無制限

ろみぃ(konatsu)ろみぃ(konatsu)

suコマンドで、一時的に別のユーザーになることができる

例)
linuxuserさんになる

$ su -linuxuser
password: ←パスワード入力が求められる
ろみぃ(konatsu)ろみぃ(konatsu)

sudoコマンドを使うと、suコマンドでrootユーザーにならずに管理者権限でコマンドを実行できる。
suコマンドで別ユーザーになると、そのシェル上ではずっとrootユーザーとして操作できることになるため、sudoコマンドの方が安全である

ろみぃ(konatsu)ろみぃ(konatsu)

どのユーザーに何のコマンドの管理者実行権限を与えるかは、個別に設定できる

設定するときは、rootユーザーでvisudoコマンドを実行する。実行すると/etc/sudoersファイルがテキストエディタで開かれる

書式:
ユーザー名 ホスト名 = (実行ユーザー名) [NOPASSWD:] コマンド

NOPASSWD:を指定すると、コマンドの実行時にログインパスワードを求めなくなる

ろみぃ(konatsu)ろみぃ(konatsu)

NOPASSWDを有効にしなかった場合に求められるパスワードは、rootユーザーのではなくコマンドを実行したユーザのものになる点に注意

ろみぃ(konatsu)ろみぃ(konatsu)

サーバーでは、必要最低限のサービスだけを稼働させ、不要なサービスは動作させないことが必要。

例えば、現在不要なサービスにセキュリティホールがあったとすると、サーバーへの侵入を許してしまうことになりかねない。

ろみぃ(konatsu)ろみぃ(konatsu)

開いているTCPポートを確認し、systemctlコマンドを使って停止すると良い

停止させるだけでは次回ログイン時に再度有効化されてしまうため、デフォルトで起動しない設定にしておくと良い

ろみぃ(konatsu)ろみぃ(konatsu)

ネットワークを通じてサービスを提供しているサーバーは、デーモンと呼ばれる常駐プログラム

デーモンは常時メモリ上に待機して、クライアントからの要求を監視し続けている

ろみぃ(konatsu)ろみぃ(konatsu)

使用されていない時でもメモリなどのリソースを消費し続けているため、常駐するデーモンが多くなると、それだけ消費リソース量も大きくなる

ろみぃ(konatsu)ろみぃ(konatsu)

これを解決するためにできたのが、スーパーサーバー
inetdやxinetdといったものがある

これらは、他のサーバープログラムに代わってサービス要求を監視し、接続が確立した時点で本来のサーバープログラムに要求を引き渡す

inetdとxinetdでは、設定や管理の方法が大きく異なる

ろみぃ(konatsu)ろみぃ(konatsu)

xinetdのサービス停止:
xinetdの設定は、以下の2つから構成される

  • /etc/xinetd.conf:全体的な設定
  • (/etc/)xinetd.dディレクトリ以下にあるサービスごとの設定

xinetd.dディレクトリ以下にある設定ファイルは、ftpやtelnetなどのサービス名になっている

設定を変更したときは、xinetdの再起動が必要

ろみぃ(konatsu)ろみぃ(konatsu)

inetdのサービス停止:
設定ファイルは/etc/inetd.confで、この中で1行につき1つのサービスを設定する

ろみぃ(konatsu)ろみぃ(konatsu)

Linuxカーネルには、Netfilterというパケットフィルタリング機能が備わっている

これは、通信経路を流れるパケットを検査し、パケット単位で処理を行う

ろみぃ(konatsu)ろみぃ(konatsu)

主な通信路は以下の通り

  • 外部からの入力(Input)
  • 外部への出力(Output)
  • 別のホストへの転送(Forward)

それぞれの通信経路ごとに設定されたルールと照合し、ルールにマッチしないものは弾く

要するに、ファイアウォール

ろみぃ(konatsu)ろみぃ(konatsu)

上述の通り、iptablesコマンドを使ってパケットフィルタリングのルールを細かく設定できる

-Lオプションで、現在のルールを表示する

保存するときは、iptables-saveコマンドを使う

読み出すには、iptables-restoreコマンドを使う

例)

$ iptables -L
$ iptables-save > iptables.rule ←保存先のファイル
$ iptables-restore < iptables.rule ←読み出し元のファイル
このスクラップは2ヶ月前にクローズされました