CentOS7 初期設定

しばらく振りになりますが、ひっそりとWordpressの移設を行っていました。
お仕事が多忙を極め、今もそれなりに多忙ですが少し時間が取れたので少しずつ更新できればと思っています。
特にCentOS7には慣れてきたのでそのノウハウを載せていければなぁ〜と思います。

今回はCentOS7の初期設定で以下の流れで設定を行いました。
sshの設定
・ユーザの追加
・鍵の生成
・root系権限の設定
・ホスト名の設定
・cronの設定
・chrony(ntp)の設定

firewallの設定をしていないのはCentOSはデフォルトではsshくらいしかポートが空いていないからです。
また、ssh接続で設定を行う場合、鍵をクライアントに持ってくる前にsshクライアントを切断してしまうと終わるので気をつけて下さい。

sshの設定

初期状態ではrootユーザのアクセスやパスワード認証が有効になっているため、それらを無効化していきます。
と、その前に。

[root@localhost ~]# firewall-cmd --remove-service=ssh --permanent  
success  
[root@localhost ~]# firewall-cmd --reload  
success  

firewall-cmdにより、sshのサービスを停止します。
CentOS7からはiptablesをラップしたfirewalldというものがデフォルトで利用されるようになりました。
以前のiptablesになれた人には苦労の原因となるもののうちの一つです。

serviceというのはipなどの設定が記載されたファイルでデフォルトでいろいろと用意されています。
permanentを指定することで設定を永続的なものにしますが、再読み込みが必要になります。
permanentを指定しない場合には、設定は一時的なものになりますが再読み込みが不要です。

これにより一瞬の隙をついた不正侵入を防ぎます。
サーバは立てた瞬間から謎アクセスで攻撃されているものです。

では本題のsshの設定を行います。

[root@localhost ~]# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.org  
[root@localhost ~]# vi /etc/ssh/sshd_config  
[root@localhost ~]# diff /etc/ssh/sshd_config.org /etc/ssh/sshd_config  
17a18  
> Port ***** //待ち受けポート変更  
49a51  
> PermitRootLogin no //rootによるアクセスの無効化  
79c81,82  
< PasswordAuthentication yes  
---  
> PasswordAuthentication no //パスワード認証無効  
> PermitEmptyPasswords no //空パスワードを認めない  
  
[root@localhost ~]# systemctl restart sshd   

しれっとポートを変えていますが、この設定は別に行う必要はありません。
会社で設定をする際にはむしろ変えない方がいいかもしれません。その企業のポリシーにもよりますが、管理が面倒になるので管理しきれる自信と企業風土がある人のみやりましょう。
22番ポートはWELL KNOWN PORTなので、悪者がたくさんアクセスしてきますので念のため変更を行っています。

次の行ではコピーを取得して、デフォルトの設定を残しています。
サーバの設定をいじる時には常にコピーを取る癖をつけておくと安全です。

バックアップを取得していると、3行目のようにdiffコマンドで自分が何を変更したのかを確認することができるようになるので忘れても安心。
ちなみに、数字の間にあるaがadd, cがchangeです。

上記の設定により、このサーバには鍵を利用した接続でしかアクセスできなくなりましたので、firewallを設定します。

[root@localhost ~]# firewall-cmd --add-port=*****/tcp --permanent  
success  
[root@localhost ~]# firewall-cmd --reload  
success  

先ほど設定したポートを解放していきます。
tcpで*****番のポートを永続的に解放しつつ、再読み込みですね。

管理用ユーザ追加

サーバの管理やrootによる直接アクセス防止用にユーザを作成します。
今回追加するユーザを管理者として設定を進めていきます。

[root@localhost ~]# useradd hogehoge  
[root@localhost ~]# passwd hogehoge  
[root@localhost ~]# usermod -G wheel hogehoge  

hogehogeの部分は自分の名前なり通り名なり自由に置き換えてください。
wheelグループにユーザを追加していますが、これは後述します。
これにてユーザ追加は完了です。

ユーザに鍵を生成

先ほど作成したユーザのssh鍵を作成します。
これをclientに持っていくのが面倒だったりしますが、そこは各々好きな方法でファイトです。

[root@localhost ~]# su - hogehoge  
[raru@localhost ~]$ ssh-keygen -t rsa  
Generating public/private rsa key pair.  
Enter file in which to save the key (/home/raru/.ssh/id_rsa):  
Created directory '/home/raru/.ssh'.  
Enter passphrase (empty for no passphrase):  
Enter same passphrase again:  
.....  
  
[raru@localhost ~]$ mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys  
[raru@localhost ~]$ chmod 600 ~/.ssh/authorized_keys  
[raru@localhost ~]$ exit  

作成したid_rsaファイルをクライアントに持って行って、ssh接続ができることを確認したらsshの設定は完了です。
ここまでがなんとなく一段落という感じがします。

root系権限設定

次にroot系の権限を設定していきます。
sudoやsuコマンドの権限ですね。
これによりroot権限でコマンドを実行できるユーザを制限していきます。
この設定をしないと今後ユーザを追加するとそれが=でセキュリティの低下につながってしまいます。

[root@localhost ~]# cp /etc/pam.d/su /etc/pam.d/su.org  
[root@localhost ~]# vi /etc/pam.d/su  
[root@localhost ~]# diff /etc/pam.d/su.org /etc/pam.d/su  
6c6  
< #auth         required        pam_wheel.so use_uid  
---  
> auth          required        pam_wheel.so use_uid  
[root@localhost ~]# cp /etc/login.defs /etc/login.defs.org  
[root@localhost ~]# vi /etc/login.defs  
[root@localhost ~]# diff /etc/login.defs.org /etc/login.defs  
72a73  
> SU_WHEEL_ONLY yes  

両方の設定によりsuによりroot化できるユーザをwheelに属したユーザのみとしています。
最近は2つ目の設定はなくても大丈夫なんだそうです。
また、arch linuxなどではsu-lファイルも編集する必要があったりするとかしないとか。
su -でroot化しようとした場合にsu-lファイルも編集しないと制限が効かないことがあるようです。
初めて知りました。

ホスト名設定

現在ホスト名がlocalhostのままですので、設定していきます。
個人で勉強用であれば特に設定しなくても支障はありません。

[root@localhost ~]# nmcli g hostname heavy-metal-explorer  
[root@localhost ~]# hostname  
heavy-metal-explorer  

CentOS7からネットワーク系の設定はnmcliコマンドで行います。
ipの変更などなど、ifcfg-eth0とかのファイルの中身は全部これです。
これもCentOS6以下に慣れていた人にとってはやる気を削ぐ部分ですね。
firewallやらnicの設定やらでコマンド変えすぎなんですよ。

cron/ntpの設定

cronの設定

CentOS7からは初期状態でインストールされているcronが今までのものと違います。
CentOS6以下: noanacron
CentOS7: anacron
anacronは今までのcronと違って1時間ごととか何時何分とかの細かい指定でちゃんと動いてくれないようです。
それでは役に立たないのでnoanacronに差し替えます。

[root@heavy-metal-explorer ~]# yum remove cronie-anacron  
[root@heavy-metal-explorer ~]# yum install cronie-noanacron  

詳細はこのサイトさんがわかりやすかったです。

でもこれを見るとanacron削除しなくていいんじゃないかという気がしてきました。
本当に削除が必要なのかは、ちょっと自信がないです。
CentOS7を利用してる方たちは削除して入れ替えているようです。競合するのでしょうか。
競合する気があまりしないんですけどね。いずれ調べよう。

chrony(ntp)の設定

CentOS7ではntpも変わっています。
chronyがデフォで入っていたりいなかったりする場合があるのですが、入っていなければインストールしましょう。
yum install chronyで入ります。

[root@heavy-metal-explorer ~]# systemctl -a | grep chrony  
chronyd.service loaded active   running   NTP client/server  
[root@heavy-metal-explorer ~]# systemctl is-enabled chronyd  
enabled  

設定といいつつ設定していませんね。
設定を変更する場合は「vi /etc/chrony.conf」で変更しましょう。

あとがき

初期設定レベルでこの変わりようです。
初期設定はOSにデフォルトで組み込まれているものが多いから変わっているとも言えますけどね。

特にfirewallやnmcliは慣れが必要です。firewallはなんだかんだ込み入ったことするときにdirectとかいいつつそれiptablesコマンドじゃんっていうものがあるところがまたダサい感じがしてしまいます。
ただ仕組み的にはiptablesよりとても進化しているので、結局慣れですね。
CentOS6以下のようにnicファイルを直接編集してもnmcliからやらないと再起動などの拍子に設定が戻ってしまったりファイルが壊れたりするので、少しずつ慣れていきましょう。