インストールするOSは最低限の機能を含んだもの「Minimal」を選択する。必要なソフトは必要になったら適宜インストールする。サーバはCUIで利用するので、GUI環境はインストールしない。

OSインストール

一般ユーザの追加

# useradd hoge -m -s /bin/bash -G sudo
# passwd hoge
# grep sudo /etc/group
# less /etc/passwd
# less /etc/sudoers

* Debian系は初めから root は使えない

エイリアスの追加

$ vi .bash_aliases
alias ls='ls -lh --color=auto'
alias less='less -N'
alias ..='cd ..'
$ . ~/.bash_aliases

SSH接続でリモートログイン

  • SSHのポート番号を22番から変更しておく
/etc/ssh/sshd_config
Port 55555
# systemctl sshd restart
  • 開いているポートを確認
$ netstat -at (-antup)
# ss -tan
# lsof -i:55555    ← To find out name of services
[リモート]
# systemctl status sshd
# vi /etc/ssh/sshd_config    ← ポート変更、パスワード認証一時許可
# ufw status verbose
# ufw limit 23098/tcp comment 'SSH port'
# ufw allow from 10.0.1.2 to any port 55555
# firewall-cmd --list-services
# firewall-cmd --list-all
# firewall-cmd --add-port=92838/tcp --permanent
# semanage port -a -t ssh_port_t -p tcp 92838    ← yum provides */semanage
# semanage port -l | grep ssh    ← SELinux もチェック
# dpkg-reconfigure openssh-server    ← ホストキーは既知なので再生成
# ls /etc/ssh    ← 新しいホストキーのリスト
# ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
# vi /etc/ssh/sshd_config    ← パスワード認証禁止
# systemctl restart sshd
# ls -l .ssh/authorized_keys
[ローカル]
# systemctl status sshd
# ssh-keygen -t rsa
# vi ~/.ssh/config
# ssh-copy-id ubu1go
# ssh-add
# ssh-add -l
# ssh ubu1go

* ssh-copy-id など、入っていないコマンドがあったら apt や yum でインストール

Ctrlキーを有効化(設定ファイル)

# vi /etc/default/keyboard
XKBOPTIONS="ctrl:swapcaps"
XKBOPTIONS="ctrl:nocaps"

# systemctl restart console-setup

Ctrlキーを有効化(コマンドライン)

$ gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:swapcaps']"
$ gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:nocaps']"

必要パッケージの追加

$ apt install terminator
$ dpkg -i /tmp/moz0/google-chrome-stable.deb

セキュアなサーバ設定

  • 全てのパッケージを最新のものにアップデートしてシステムを最新の状態にする
# apt update
# apt upgrade
# apt full-upgrade
  • ソフトウェアパッケージのアップデートを自動化する。そのためにも、ソフトは基本的にapt等パッケージ管理システムからインストールする
# apt install cron-apt    ← vi /etc/cron-apt/config(アプデ自動化)
# timedatectl status
# timedatectl set-timezone Asia/Tokyo
# date
  • 起動サービスの確認と停止。セキュリティを考慮して使わないサービスは停止、自動起動も無効にする。
# systemctl -t service | grep running
# systemctl stop [service]
# systemctl disable [service]
  • 不要なサービスは脆弱性の元なので全て停止する。ランレベル3(CUIモード)で自動起動するサービスを確認して停止、自動起動をオフにする
# chkconfig --list | grep 3:on
# service auditd stop
# service netfs stop
auditd(コマンド監視), ip6tables(IP6利用), netfs(NFSクライアント), postfix(SMTPサーバ利用)
  • メールサーバなど、ユーザアカウントは必要だけどシェルログインは不要なユーザは、ログインシェルを「/sbin/nologin」か「/bin/false」にする
#useradd -s /sbin/nologin march
#usermod -s /sbin/nologin march
  • SSHで root ログインを禁止する
  • rootログインが可能な端末名を全て削除して、rootログインを全面的に禁止する
/etc/ssh/sshd_config
#PermitRootLogin no
# echo > /etc/securetty
  • ユーザがディスクの空き容量を使い切ってしまわないように、ユーザが利用するファイルシステムには独立したパーティションを割り当てる
  • 変更されないデータを格納するファイルシステムは、リードオンリーでマウントすることによりファイルの改竄や破壊行為を抑えられる
  • アドレススキャン(港探索)回避のためにブロードキャスト宛リクエストを無視する。下記の設定ファイルに追記
/etc/sysctl.conf
net.ipv4.icmp_echo_ignore_broadcast=1

ファイアウォール

Debian系

# systemctl status ufw
# ufw enable
# ufw status verbose
# ufw status numbered
# ufw allow http
# ufw limit 23098/tcp comment 'SSH port'    ← ポートを許可(マニュアル)
# ufw allow from 192.168.0.2/24 to any port 23098
# ufw status numbered
# ufw delete 2    ← specify a port number

RH系

# firewall-cmd --get-default
# firewall-cmd --list-services
# firewall-cmd --list-all
# getenforce
# setenforce 1
# vi /etc/selinux/config

その他の設定

Kali の場合

ブルートゥースを稼働させる。

# systemctl enable bluetooth
# systemctl start bluetooth

Raspberry Pi の場合

以下のコマンドでキーボードレイアウトやタイムゾーン、Wi-Fi の設定などができる。

$ sudo raspi-config

RH系

# yum update
# yum install yum-cron
# timedatectl status
# timedatectl set-timezone Asia/Tokyo
# date

ソフト (機能) の追加

デスクトップ環境

conky

# apt install -y conky
# vi ~/.conkyrc    ← 既存のものを参照
# cat <<EOF > ~/.config/autostart/conky.desktop
[Desktop Entry]
Type=Application
Exec=/usr/bin/conky
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=conky
Comment=
EOF