【Ubuntu】 インストール後に実施するべきセキュリティ設定


Ubuntuをインストールした後に実施すべきセキュリティ設定について備忘を兼ねてまとめました。不正アクセスがあった際には、それをログから検知する仕組みも必要ですが、この投稿では防御のみにまとを絞って記載し、検知は次回の投稿に譲る事とします。

情報のソースは下記のとおりです。

対象

  • Ubuntu 14.04 LTS
  • Ubuntu 14.10

ユーザー管理

ユーザー管理はセキュリティの最重要事項の一つです。許可しているサービスとしてはSSHがありますが、それらのポートは対外的にはオープンに設定する事が多いため、適切なユーザー管理によって、悪意のある第三者にログインされないようにする事は必須です。

Ubuntuのrootユーザーについて

Ubuntuでは、rootユーザーによる直接のログインを許可していません。sudoコマンドによるroot権限での実行を行います。この設定は変更するべきではありません。

ユーザーの追加

sudo adduser username

ユーザーの削除

sudo deluser username

ユーザーのロックとロック解除

sudo passwd -l username
sudo passwd -u username

グループの追加

sudo addgroup groupname
sudo delgroup groupname

ユーザーをグループに追加

sudo adduser username groupname

パスワードには10文字以上を求められるようにする

sudo vi /etc/pam.d/common-password

# デフォルト
password  [success=1 default=ignore]  pam_unix.so obscure sha512

# 修正後
password  [success=1 default=ignore]  pam_unix.so obscure sha512 minlen=10

ユーザーアカウントのステータスを変更する

会社や学校でドメインに参加しているWindowsPCを使った際に、パスワードの有効期限が切れている警告が出て、パスワードを変更した覚えのある方も多いのではないでしょうか?それと同じことをLinux上でも設定しておきます。

# 一番後ろの『test』はユーザー名なので、適宜変更すること
sudo chage -E `LANG=C; date +"%m/%d/%Y" -d '180day'` -m 5 -M 180 -I 30 -W 14 test
sudo chage -l test
# Last password change                                    : Mar 01, 2015
# Password expires                                        : Aug 28, 2015
# Password inactive                                       : Sep 27, 2015
# Account expires                                         : Aug 28, 2015
# Minimum number of days between password change          : 5
# Maximum number of days between password change          : 180
# Number of days of warning before password expires       : 14

ユーザープロファイルの設定

ホームディレクトリのアクセス権限

# 現状のアクセス権確認
# 書き込みは出来ないが、誰でも読み込み可能な設定になっている。
ls -ld $HOME
drwxr-xr-x 11 myuser myuser 4096  1月  4 23:24 /home/myuser

# 0750にパーミッションを調整する。
sudo chmod 0750 $HOME

# 事後確認。問題なし。
ls -ld $HOME
drwxr-x--- 11 myuser myuser 4096  1月  4 23:24 /home/myuser

恒久的な対応

今後、ユーザーを作成する度に、ホームディレクトリのアクセス権を調整するのは面倒ですし、設定忘れもしがちです。その為に、adduserコマンドでユーザーを追加した際には、必ずホームディレクトリのパーミッションを0750にするように設定しておきます。

# バックアップ
mkdir ~/conf_bak
sudo cp /etc/adduser.conf ~/conf_bak/

# ファイル書き換え
sudo sed -i "s/DIR_MODE=0755/DIR_MODE=0750/g" /etc/adduser.conf

# 確認
diff ~/conf_bak/adduser.conf /etc/adduser.conf

adduserによるユーザー作成確認(設定内容の確認なので、かならずやる必要はありません)

sudo adduser test
# ユーザー `test' を追加しています...
# 新しいグループ `test' (1003) を追加しています...
# 新しいユーザー `test' (1002) をグループ `test' に追加しています...
# ホームディレクトリ `/home/test' を作成しています...
# `/etc/skel' からファイルをコピーしています...
# 新しい UNIX パスワードを入力してください:
# 新しい UNIX パスワードを再入力してください:
# passwd: パスワードは正しく更新されました
# test のユーザ情報を変更中
# 新しい値を入力してください。標準設定値を使うならリターンを押してください
#         フルネーム []:
#         部屋番号 []:
#         職場電話番号 []:
#         自宅電話番号 []:
#         その他 []:
# 以上で正しいですか? [Y/n]

ls -ld /home/test
# drwxr-x--- 2 test test 4096  3月  1 11:46 /home/test

sshloginグループに所属していないユーザーはsshログイン不可とする

sshでログイン可能なユーザーを決め打ちにします。

# sshloginと言うグループに所属しているユーザーのみsshアクセスを許可するように設定する。
sudo cp /etc/ssh/sshd_config ~/conf_bak/
echo "AllowGroups sshlogin" | sudo tee -a /etc/ssh/sshd_config
diff /etc/ssh/sshd_config ~/conf_bak/sshd_config

# sshloginグループを作成する。
sudo addgroup sshlogin

# 一例として、testとlasasユーザーのみSSHログイン可能にしてみる。
sudo gpasswd -a test sshlogin
sudo gpasswd -a lasas sshlogin

# sshサービス再起動
sudo service ssh restart

物理的なセキュリティ対策

対象のLinuxマシンに誰でも触れる事が出来る場合に、キーボードからctrl alt deleteを押すことでOSを再起動させることも出来ます。その操作を下記の通り無効にする事も出来ます。

sudo vi /etc/init/control-alt-delete.conf

無効にする設定

# 下記をコメントアウトする
# exec shutdown -r now "Control-Alt-Delete pressed"

パケットフィルタリング

iptablesによるパケットフィルタリングです。ubuntuのマニュアルではufwを使う事例が紹介されていましたが、その下で動作しているのはiptablesである事から、細かい指定も行えるように、iptablesを使ってパケットフィルタリングルールを記載します。

sudo su -
# ルール設定中だけ一時的に無条件にACCEPTにしている。
# このスクリプトをコピペで流し込む間の1秒以内なので、許容する。
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# 内部>外部向けとしてDNS、SMTP、HTTP(S)、NTPを許可
iptables -A OUTPUT -m multiport -p tcp --dport 25,53,80,123,443 -j ACCEPT
iptables -A INPUT  -m multiport -p tcp --sport 25,53,80,123,443 -j ACCEPT
iptables -A OUTPUT -m multiport -p udp --dport 53,123 -j ACCEPT
iptables -A INPUT  -m multiport -p udp --sport 53,123 -j ACCEPT

# 外部>内部向けとして、SSH、HTTP(S)を許可
iptables -A OUTPUT -m multiport -p tcp --sport 22,80,443 -j ACCEPT
iptables -A INPUT  -m multiport -p tcp --dport 22,80,443 -j ACCEPT

# ICMP TYPE0/8のみ許可
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT

# デフォルトでDROPにする
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# ipv6はデフォルトでDROPにする。
# 使っていないので、無条件拒否。
ip6tables -p INPUT DROP
ip6tables -p OUTPUT DROP
ip6tables -P FORWARD DROP

起動時にパケットフィルタリングルールを読み込むようにする

# 下記、rootで実行する事
iptables-save  > /etc/iptables.rules
ip6tables-save  > /etc/ip6tables.rules

vi /etc/network/interfaces

/etc/network/interfacesは下記のように修正する。

# インターフェースの一番下にでも下記を追加する。
pre-up iptables-restore < /etc/iptables.rules
pre-up ip6tables-restore < /etc/ip6tables.rules

まとめ

Ubuntuのインストール後にしておく最低限のセキュリティ設定について記載してみました。と言っても、元ネタはUbuntuのマニュアルですが・・・暇を見て、稼働中のUbuntuに不正な操作があった場合の検知方法についてを記載したいと思います。

タグ付けされた , . ブックマークする へのパーマリンク.

コメントを残す

メールアドレスが公開されることはありません。