CentOS 7を使い始めるときに最初に設定すべきこと

CentOS 7を使い始めるときに最初に設定すべきこと

CentOS 7をインストールしたマシンで、最初に設定すべきことはさまざまありますが、そのなかでも、マシンの用途に関わらず、これだけはやっておいたほうが良いと思う設定について紹介します。

動作環境

この記事は、以下の環境での動作結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
CentOS Linux7.6.1810

基本設定

ホスト名の設定

ホスト名は、OSインストール時に設定することもできます。

hostnamectl set-hostname server1.example.com

IPアドレスの設定

IPアドレスなどのネットワーク設定は、OSインストール時に設定することもできます。

nmcli device && nmcli connection show enp0s8 | grep IP
nmcli connection modify enp0s8 ipv4.method manual ipv4.addresses 192.168.56.201/24
nmcli connection down enp0s8 && nmcli connection up $_

時刻同期

 主要なLinuxディストリビューションや、多くのネットワーク機器は、デフォルトのタイムサーバとして「pool.ntp.org」サービスを使用していますが、国内のNTPサーバーに変更したほうが、精度を高くできるでしょう。

なお、NTPサーバーの指定は、OSインストール時に設定することもできます。

sed -i 's/centos/jp/' /etc/chrony.conf
systemctl restart chronyd

server 0.centos.pool.ntp.org iburst ~ server 3.centos.pool.ntp.org iburst を server 0.jp.pool.ntp.org iburst ~ server 3.jp.pool.ntp.org iburst に変更。意味があるかは不明。ping の時間は3倍くらい速い。

date && chronyc -a makestep && date

管理ユーザーの追加

なお、の指定は、OSインストール時に設定することもできます。

useradd joe && passwd $_ && usermod -G wheel $_ && getent group wheel
sudo -u joe echo 'joe@example.com' > ~/.forward
sed -i /etc/aliases -e '/root:/ s/^#//' -e '/root:/ s/marc/joe/' && newaliases
echo "Test mail" | sendmail root
etckeeper commit ":email: Set a mail alias for root user"

ユーザーの作成後にパスワードを設定、 wheel グループに追加し、 wheel グループに所属するアカウントを確認する。

外部のメールアドレスに転送したい場合に .forward ファイルに設定する。

root 宛てメールをユーザー marc に転送する設定が /etc/aliases にコメントで記載されているので、アンコメントしてユーザー名を差し替える。

テストメールを送信する場合 CentOS 7 の minimal では mail コマンドや mailx コマンドはインストールされていないので、デフォルトでインストールされている Postfix の sendmail 互換コマンドを利用する。

アップデート

yum clean all && yum -y update

Yum のキャッシュをクリアしてから、各パッケージを最新バージョンにアップデートする。
Kernel のバージョンアップがあった場合は reboot コマンドで再起動する。

作業効率化&最適化

SELinuxの無効化

ログの保存期間/保存サイズの調整

コマンド履歴

Linuxの標準シェル「Bash」では、コマンドの履歴が保存されていますが、デフォルトでは実行日時は表示されず、保存件数は1000件となっております。

これを実行日時を表示し、なおかつ保存件数を10000件に拡張してみます。以下のファイルの最後尾に追記します。

# vi /etc/profile

HISTSIZE=10000
HISTFILESIZE=10000
HISTTIMEFORMAT='%Y/%m/%d %H:%M:%S '
HISTIGNORE=ls:history

HISTSIZEはhistoryコマンドの表示件数、HISTFILESIZEは.bash_historyファイルに保存される件数です。デフォルトで1000件なのを10000件に拡張しています。また、HISTTIMEFORMATで日時表示を指定し、よく使用するlsやhistoryコマンドなどは履歴に含まれないようHISTIGNOREで指定しています。

この設定を有効にするために以下のコマンドを実行します。

# source /etc/profile

この状態でhistoryコマンドを実行すると以下のように日時つきで表示されます。

# history
1 2015/07/29 09:23:00 history
2 2015/07/29 09:23:05 more .bash_history

yum

echo "exclude=kernel* centos*" >> /etc/yum.conf
echo "alias yum='yum -disableexcludes=all'" >> /etc/profile.d/yum.sh

無防備に kenerl をアップデートして kernel パニックが発生すると慣れない作業で復旧に手間取るので、通常のアップデート時は除外して、kernel のアップデートは独立して作業を行うようにする。 3

なお、exclude を指定すると yum info などでも除外されるので注意。

yum update --disableexcludes=all

yum.conf で指定した exclude を無効にするには --disableexcludes オプションに all または main を指定する。

通常の yum update では kernel のバージョンアップの有無を含めて確認できなくなるため、 alias で --disableexcludes オプションを指定してこれを回避する。

sudo の設定

/etc/sudoers
# %wheel ALL=(ALL) NOPASSWD: ALL

上記コメントアウトを解除することで、sudo の実行をパスワードなしで行えるようになる。

特定のユーザーのみパスワードなしでsu

/etc/pam.d/su
#auth sufficient pam_wheel.so trust use_uid
#auth required pam_wheel.so use_uid

上記コメントアウトを解除することで、wheel グループに所属するアカウントのみsuでroot への切り替えをパスワードなしで行えるようになる。

bash-completion

「bash-completion」を導入することで、Tabキーによる補完機能で、ファイルパス以外を補完してくれるようになります。

yum -y install epel-release && yum -y install bash-completion{,-extras}


[root@localhost ~]# systemctl s
set-default set-environment set-property show
show-environment snapshot start status
stop suspend switch-root

[root@localhost ~]# ssh
::1 localhost localhost.localdomain
localhost4 localhost4.localdomain4 localhost6
localhost6.localdomain6

[root@localhost ~]# man z
zcat zcmp zdiff zforce zgrep zipcmp
zipdetails zipmerge ziptorrent zless zmore znew
zsoelim zts-php zts-phpize

Yumプラグイン

yum -y install epel-release && yum -y install yum-{axelget,changelog,cron,plugin-{ps,remove-with-leaves,rpm-warm-cache,show-leaves},utils}

パッケージ
説明
yum-axelget axel を利用してダウンロードを高速化する
yum-changelog 更新の前後でパッケージ変更ログの表示を可能にする --changelog オプションを追加する
yum-cron yum update を Cron で実行する
yum-plugin-ps yum ps で旧バージョンで稼働しているプロセスを一覧化する
yum-plugin-remove-with-leaves 依存関係のない孤立パッケージを削除する --remove-leaves オプションを追加する
yum-plugin-rpm-warm-cache rpmdb に直接アクセスする前に rpmdb ファイルをシステムキャッシュに読み込む
yum-plugin-show-leaves トランザクション後に依存関係のない孤立パッケージを表示する
yum-utils Yum を便利で強力にするためのユーティリティとサンプルのコレクション

ユーティリティ

用途により必要となるユーティリティは異なると思いますが、おススメをいくつか紹介します。

なお、いくら便利だからと言って入れすぎには注意しましょう。あくまでも最小限を心がけましょう。

yum -y install bind-utils net-tools policycoreutils-python psmisc rlwrap traceroute tree vim-enhanced wget

yum -y install epel-release
yum -y install {a,apache,dns,h,if,io,inno,my,pg_}top iptraf-ng goaccess ncdu
yum -y --enablerepo=epel-testing install glances jnettop

基本的に curl を使えば問題がないが、時折 wget が必須のスクリプトがある。

yum -y install epel-release && yum -y install bzip2 {,un}zip

GSSAPIAuthentication の無効化

sed -i '/GSSAPIAuthentication / s/yes/no/' /etc/ssh/sshd_config

デフォルトで GSSAPIAuthentication が有効になっているが SSH ログイン時にもたつく模様。

カーネルの古いパッケージ保持数の上限を減らす 2

sed -e '/installonly_limit/ s/5/2/' -i /etc/yum.conf

セキュリティ強化

ウイルス対策

リダイレクションによるファイル上書き禁止

.bashrc
set -o noclobber

Audit システム

`auditctl -a always,exit -F arch=b64 -S execve`
echo "-a exit,always -F arch=b64 -S execve" >> /etc/audit/rules.d/audit.rules

デフォルトで起動している auditd サービスによるコマンド履歴の保存。
デフォルトでは /var/log/audit/audit.log に保存される。ログはテキストなので直接参照可能だが aureport コマンドや ausearch コマンドで参照すると見やすくなる。
実行ユーザーや実行ディレクトリ、オプションなども記録される。
pwd コマンドや cd コマンドなどは実行自体が記録されなかった。

https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Defining_Audit_Rules_and_Controls.html

プロセスアカウンティング (psacct)

yum -y install psacct && systemctl start $_ && systemctl enable $_
etckeeper commit ":new: Install and enable process accounting (psacct)"

lastcomm コマンドでどのユーザーがどのコマンドをいつ実行したのかを確認できる。
非常に見づらいが、他のコマンド履歴と比べ改竄が難しいため監査証跡として有用。

パスワードなしでのログインの禁止

sed -i 's/\<nullok\>//g' /etc/pam.d/system-auth
etckeeper commit ":lock: Prohibit login without password"

interactive オプション

cat << "_EOF_" > /etc/profile.d/alias.sh
alias crontab='crontab -i'
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'
_EOF_

crontab
crontab -e を実行しようとして r キーが e キーの隣にあるので、間違って crontab -r を実行してしまう可能性が考えられる。万が一そのような事態が生じても大丈夫なように -i オプションを指定しておくと -r オプション指定時に Y/N で確認を求めてくれるようになる。

cp/mv/rm
root ユーザーは /root/.bashrc で指定されているが、その他のユーザーでは指定がないので一律に指定する。
なお、この指定を無視したい場合は \mv source dist のように先頭にバックスラッシュを付加することで対応できる。

SSHのカギ認証接続

あとがき

上記で紹介した以外でも、環境によっては、外部へのメール送信設定・バックアップ・監視・マルウェア対策などについても検討しておく必要があるでしょう。