学習記録#36 250722

731ページから

746ページまで

一部のサーバーでは、ユーザーアカウントは必要だが、ログインしてシェルを操作したりはさせたくないものがある(メールサーバーなど)
こういう時に、ユーザーのログインシェルを/bin/falseや/sbin/nologinに変更すると、一般ユーザーのログインを禁止することができる

ユーザーのログインを禁止した状態でアカウント作成
$ useradd -s /sbin/nologin linuxuser

環境変数TMOUTを設定すると、ユーザーが一定時間操作しないと自動的にログアウトさせるための秒数を設定できる
この設定は、.bash_profileなどに記述しておくと良い

.bash_profileはログイン時に読み込まれるやつだっけ?

あってた

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

suコマンドで、一時的に別のユーザーになることができる
例)
linuxuserさんになる
$ su -linuxuser
password: ←パスワード入力が求められる

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

どのユーザーに何のコマンドの管理者実行権限を与えるかは、個別に設定できる
設定するときは、rootユーザーでvisudoコマンドを実行する。実行すると/etc/sudoersファイルがテキストエディタで開かれる
書式:
ユーザー名 ホスト名 = (実行ユーザー名) [NOPASSWD:] コマンド
NOPASSWD:を指定すると、コマンドの実行時にログインパスワードを求めなくなる

例)
$ linuxuser ALL=(ALL) NOPASSWD: ALL
$ linuxuser ALL=(ALL) NOPASSWD: /usr/sbin/shutdown

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

サーバーでは、必要最低限のサービスだけを稼働させ、不要なサービスは動作させないことが必要。
例えば、現在不要なサービスにセキュリティホールがあったとすると、サーバーへの侵入を許してしまうことになりかねない。

開いているTCPポートを確認し、systemctlコマンドを使って停止すると良い
停止させるだけでは次回ログイン時に再度有効化されてしまうため、デフォルトで起動しない設定にしておくと良い

現時点で不要なサービスは、アンインストールしてしまうのが良い

ネットワークを通じてサービスを提供しているサーバーは、デーモンと呼ばれる常駐プログラム
デーモンは常時メモリ上に待機して、クライアントからの要求を監視し続けている

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

これを解決するためにできたのが、スーパーサーバー
inetdやxinetdといったものがある
これらは、他のサーバープログラムに代わってサービス要求を監視し、接続が確立した時点で本来のサーバープログラムに要求を引き渡す
inetdとxinetdでは、設定や管理の方法が大きく異なる

xinetdのサービス停止:
xinetdの設定は、以下の2つから構成される
- /etc/xinetd.conf:全体的な設定
- (/etc/)xinetd.dディレクトリ以下にあるサービスごとの設定
xinetd.dディレクトリ以下にある設定ファイルは、ftpやtelnetなどのサービス名になっている
設定を変更したときは、xinetdの再起動が必要

ファイルの中身のdisableというパラメータがYesだと、サービスの利用を停止できる

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

Linuxカーネルには、Netfilterというパケットフィルタリング機能が備わっている
これは、通信経路を流れるパケットを検査し、パケット単位で処理を行う

主な通信路は以下の通り
- 外部からの入力(Input)
- 外部への出力(Output)
- 別のホストへの転送(Forward)
それぞれの通信経路ごとに設定されたルールと照合し、ルールにマッチしないものは弾く
要するに、ファイアウォール

最も基本的な設定コマンドはiptables

上述の通り、iptablesコマンドを使ってパケットフィルタリングのルールを細かく設定できる
-Lオプションで、現在のルールを表示する
保存するときは、iptables-saveコマンドを使う
読み出すには、iptables-restoreコマンドを使う
例)
$ iptables -L
$ iptables-save > iptables.rule ←保存先のファイル
$ iptables-restore < iptables.rule ←読み出し元のファイル