Linuc102メモ⑪セキュリティ
セキュリティ管理業務の実施
外部からの侵入に対するセキュリティを高める
必要なソフトウェアのみインストールし、不要なサービスは起動しない
ホストレベルの適切なアクセス制限
パケットフィルタリング
内部からの侵入に対するセキュリティを高める
適切なユーザーパスワード管理を行う
rootユーザー権限で動作するプログラムを最小限にし、定期的にチェック
chage
ユーザーのパスワード有効期限設定する。
強制的にパスワード変更を促すことができる。
オプションつけないと対話モードになる。
シャドウパスワードを設定している場合は、/etc/shadowに格納されている。
chage -l ken 特定のユーザーのパスワード有効期限に関する情報を表示
[root@CentOS7 ken]# chage -l ken
最終パスワード変更日 : 5月 04, 2023
パスワード期限: : なし
パスワード無効化中 : なし
アカウント期限切れ : なし
パスワードが変更できるまでの最短日数 : 0
パスワードを変更しなくてよい最長日数 : 99999
パスワード期限が切れる前に警告される日数 : 7
who
ユーザーのログイン状況を確認できる。
wコマンドを使うと、ログイン中のユーザーに加えて、システム情報を表示。
/var/log/utmpファイル参照
[root@CentOS7 bin]# who
root tty1 2023-07-30 00:24
ken pts/0 2023-08-01 07:01 (192.168.100.4)
[root@CentOS7 bin]# w
05:56:48 up 10 days, 18:46, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 30 7月23 7days 0.02s 0.02s -bash
ken pts/0 192.168.100.4 火07 0.00s 0.41s 0.00s sshd: ken [priv
last
最近ログインしたユーザーの一覧を表示。
/var/log/wtmpファイルを参照。
[root@CentOS7 bin]# last
ken pts/0 192.168.100.4 Tue Aug 1 07:01 still logged in
ken pts/0 192.168.100.4 Sun Jul 30 00:25 - 17:41 (17:15)
root tty1 Sun Jul 30 00:24 still logged in
ken pts/0 192.168.100.4 Sun Jul 16 07:32 - 15:17 (7+07:44)
reboot system boot 3.10.0-1160 Sun Jul 16 07:32 - 05:59 (20+22:27)
netstat、ss、lsof
ネットワーク機能に関する様々な情報を表示。
開いてるポートを確認するときによく利用する。
[root@CentOS7 bin]# netstat -atu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:sunrpc 0.0.0.0:* LISTEN
tcp 0 0 CentOS7:domain 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN
udp 0 0 CentOS7:domain 0.0.0.0:*
[root@CentOS7 bin]# ss -atu
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 192.168.122.3:domain *:*
udp UNCONN 0 0 *%virbr0:bootps *:*
udp UNCONN 0 0 *:sunrpc *:*
udp UNCONN 0 0 *:mdns *:*
udp UNCONN 0 0 127.0.1.1:323 *:*
udp UNCONN 0 0 *:53976 *:*
udp UNCONN 0 0 *:flexlm *:*
udp UNCONN 0 0 [::]:sunrpc [::]:*
[root@CentOS7 bin]# lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root 44u IPv6 18211 0t0 TCP *:telnet (LISTEN)
rpcbind 574 rpc 6u IPv4 18520 0t0 UDP *:sunrpc
rpcbind 574 rpc 7u IPv4 18522 0t0 UDP *:flexlm
rpcbind 574 rpc 8u IPv4 18523 0t0 TCP *:sunrpc (LISTEN)
rpcbind 574 rpc 9u IPv6 18524 0t0 UDP *:sunrpc
rpcbind 574 rpc 10u IPv6 18525 0t0 UDP *:flexlm
rpcbind 574 rpc 11u IPv6 18526 0t0 TCP *:sunrpc (LISTEN)
chronyd 597 chrony 5u IPv4 20301 0t0 UDP localhost:323
nmap
攻撃者がネットワーク経由で開いてるポートを確認する行為をポートスキャンという。
ポートスキャンするためのコマンドがnmapである。
[root@CentOS7 bin]# nmap google.com
SYN Stealth Scan Timing: About 99.99% done; ETC: 07:19 (0:00:00 remaining)
Nmap scan report for google.com (172.217.175.238)
Host is up (0.050s latency).
rDNS record for 172.217.175.238: nrt12s29-in-f14.1e100.net
Not shown: 998 filtered ports
PORT STATE SERVICE
80/tcp open http
443/tcp open https
fuser
ポートを開いてるプロセスを特定するコマンド。
ユーザーのログイン制限
.bash_profileファイルの一部「export TMOUT=数値」で設定すると自動ログアウト時間を設定できる。
touch /etc/nologin ←を作成しておくとrootアカウントによるログイン以外は禁止される
password -l ken、usermod -l ken ←特定のユーザーアカウントをロックすることができる
ユーザーのリソース利用制限-ulimit
ユーザーが利用できるリソースを制限するコマンドがulimitである。
ulimit -a で制限の設定値をすべて表示できる。
ulimititedとなっている項目は制限されていない。
[root@CentOS7 bin]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7153
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
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) 7153
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
ulimit -u 1024 ユーザーが使用できるプロセス数を1024に制限する。
su
su - ユーザー名で、ユーザー変更ができる。
exitコマンドを使うと、元に戻れる。
[root@CentOS7 bin]# su ken
[ken@CentOS7 bin]$ exit
exit
[root@CentOS7 bin]#
sudo
suコマンドで一度root権限を取得してしまうと、rootユーザーができることならなんでもできてしまう。
特定のコマンドのみ実行を許可したい場合は、sudoを使用する。
visudo
sudoコマンドの利用設定をするには、rootユーザーでvisudoコマンドを使用する。デフォルトのエディタで/etc/sudoersファイルが開かれる。
例えば、kenユーザーにshutdownコマンドが実行できるように設定するには以下のようになる。
ken ALL=(ALL) /usr/sbin/shutdown
ホストのセキュリティ設定
使用していないサービスの無効化
ssで使用していないサービス確認して、使用していないサービスはsystemctl stopで停止。
また、次回システム再起動をかけたときに、再び有効にならないように、systemctl disable サービス名
[root@CentOS7 etc]# ss -atl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:sunrpc *:*
LISTEN 0 5 192.168.132.1:domain *:*
LISTEN 0 128 *:ssh *:*
LISTEN 0 128 127.0.1.2:ipp *:*
LISTEN 0 100 127.0.3.1:smtp *:*
LISTEN 0 128 [::]:sunrpc [::]:*
LISTEN 0 128 [::]:ssh [::]:*
LISTEN 0 128 [::1]:ipp [::]:*
LISTEN 0 128 [::]:telnet [::]:*
LISTEN 0 100 [::1]:smtp [::]:*
[root@CentOS7 etc]# systemctl stop telnet
スーパーサーバーinited/xinetd
ネットワークを通じてサービスを提供しているサーバーは、デーモンと呼ばれる常駐プログラム
常駐するデーモンの数が多いほどシステムリソース消費する
これを解決するために、スーパーサーバー(inetd、xinetd)がある。
他のサーバープログラムに代わって、サービスを監視し、接続が確立した時点で本来のサーバープログラムに要求を引き渡す。
ただ、最近のディストリビューションではsystemdが管理している。
ファイヤウォール
Linuxのカーネルには、Netfilterというパケットフィルタリング機能がある。
外部からLinux「input」Linuxから外部「output」、別のホストへの転送「foward」がある。
外部から入ってくるパケットを拒否したり許可したり制御できる。
制御コマンドで最も基本的なのがiptables
iptabeles
パケットフィルタリングのルールを細かく設定ができる。
iptables -L 現在のパケットフィルタリングルールを表示。
[root@CentOS7 ken]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere udp dpt:domain
ACCEPT tcp -- anywhere anywhere tcp dpt:domain
ACCEPT udp -- anywhere anywhere udp dpt:bootps
ACCEPT tcp -- anywhere anywhere tcp dpt:bootps
ACCEPT all -- anywhere anywhere ctstate RELATED,ES
firewalld
CentOS7以降では、ファイヤウォールサービスとしてfirewalldが搭載された。
管理コマンドとして、firewall-cmdコマンドを使う。
firewalldには、ゾーンという概念がある。
ゾーンは、パケットフィルタリングのルールをまとめたもの。
firewall-cmd --state ファイアウォールが動作しているか確認
[root@CentOS7 ken]# firewall-cmd --state
running
ゾーン一覧
firewall-cmd --list-all 指定したゾーンの設定を確認(デフォルトはpublic)
[root@CentOS7 ken]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client http ssh telnet
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
暗号化によるデータ保護
OpenSSH
リモートホスト間の通信において高いセキュリティを実現するプロトコル
SSHにはバージョン1と2があり、公開鍵暗号方式の認証アルゴリズムに違いがある
バージョン1ではRSA、バージョン2ではDSAおよびRSAが使われている
ssh
ssh -l ユーザ名 IPアドレス
ken@Ubuntu-LInuc:~$ ssh -l ken 192.168.120.1
ken@192.168.120.1's password:
Last login: Fri Aug 11 20:18:14 2023 from 192.168.120.11
ホスト認証
クライアント→サーバ SSH接続を試みる
サーバ→クライアント 公開鍵を送付
クライアント 保存している公開鍵と送られてきた鍵を比較して一致するか確認
公開鍵認証
クライアント ユーザー公開鍵と秘密鍵を作成
ユーザの公開鍵をサーバの「~/.ssh/authorized_keys」に登録しておくクライアント→サーバ 公開鍵をサーバに登録
クライアント→サーバ 公開鍵が使えるか確認
クライアント→サーバ クライアント側で秘密鍵を使ってデータ署名してサーバに送付
サーバ クライアントから送られてきた署名を公開鍵を使って検証
サーバ OKならサーバへのログインを許可
ssh-keyegen -t ed25519 鍵を作成
[ken@CentOS7 ~]$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/ken/.ssh/id_ed25519):
Created directory '/home/ken/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ken/.ssh/id_ed25519.
Your public key has been saved in /home/ken/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:c0hc2VCLPTaJaI0fURwFLLmqTEJ88bR8qbSrKNmqSq4 ken@CentOS7
The key's randomart image is:
+--[ED25519 256]--+
| +X=+. |
| ...==++o |
| . .=*.=+B |
| o.o=o+oo . |
| . . .S=o |
| . . +o |
| . o + . . |
|o o .o . |
|Eo.o. .. |
+----[SHA256]-----+
サーバへ鍵を登録
[ken@CentOS7 ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub [リモートユーザー]@[リモートサーバーのホスト名]
サーバへログイン
ssh -i id_rsa.pub [リモートユーザー]@[リモートサーバーのホスト名]
SCP
ローカルホストにあるファイルをリモートホストにコピーするコマンド。
ken@Ubuntu-LInuc:~$ scp test-memo ken@192.168.100.9:/tmp
ken@192.168.100.9's password:
test-memo 100% 0 0.0KB/s 00:00
リモートホストで確認すると・・・
[ken@CentOS7 tmp]$ ls
systemd-private-91adc756669c4c139d583b61ccee6480-chronyd.service-3pkODI
systemd-private-91adc756669c4c139d583b61ccee6440-cups.service-UEZ5ni
test-memo
gpg
gpgコマンドはGnuPGという暗号化プログラムを使用して、ファイルの暗号化や復号をする。
SSHポート転送(ポートフォワーディング)
あるポートに送られてきたTCPパケットを、SSHを使った安全な通信経路を経由して、リモートホストの任意のポートに転送する。
この機能を利用すれば、POP3やFTPといった暗号化されていないプロトコル通信の安全性を高められる。
クラウドセキュリティの基礎
クラウドはサービスを立ち上げるのが楽だけど、クラウドならではのセキュリティには気を付けなければならない。
パブリッククラウド
近年、サーバが必要な時にはパブリッククラウドが利用することが多くなった。
パブリッククラウドでよく利用されるのは、AWS、GCP、Azureなどがある。
クラウド内で動作するサーバをインスタンスとよぶ。
パブリッククラウドの種類と責任範囲
Iaas(Infrastucture as Service)
クラウド事業者がハードやネットワークといったインフラを容易と、仮想マシンで利用できるOSイメージまで提供してくれる。
ユーザは仮想マシン上にOSとアプリケーションをデプロイすればよい。Paas
クラウド事業者がアプリケーションの利用環境まで提供する。Saas
クラウド事業者がアプリケーションそのものを提供してくれる。
この記事が気に入ったらサポートをしてみませんか?