（作成中）【GCP】GCEの管理について考える

#参考URL
https://note.com/clarity/n/nb83c2ae9f8e5
https://umiosys.com/column/centos_different

#セキュリティ向上のためにやること
ユーザー、rootのパスワード設定
selinux停止
iptable停止
ポート番号変更

#作成されるアカウト
GCEを作成するとデフォルトでログインできるのは、ユーザーアカウント。
root権限の作成の仕方も理解しておきたい。

今rootではいっていれば、CUIに#が表示される。ユーザは$や%

https://qiita.com/smiler5617/items/f07252a4f8c1f4c34b67
https://eng-entrance.com/linux-user-show
https://eng-entrance.com/linux-root
http://www.obenri.com/_minset_cent6/account_cent6.html

https://qiita.com/kkenya/items/bfdce8801614f895e123

#ユーザーの切替
デフォルトで作成されるアカウントよりは、自身でアカウントを作ったほうがよいかと思う。
ユーザー作成後、切替えについて記載しました。

**ユーザー切替を行い、切替後ユーザーの環境を使用する。**
> su - [切替ユーザー名]

※[切替ユーザー名]の前にスペースを入れるので注意。
このコマンドだと切り替え後にユーザーの環境も変わります。
切り替えた後にctrl + d をすると、元いたユーザーに切り替わる

**ユーザー切替を行うが、環境は切替ユーザーのものにならない。**
> su [切替ユーザー名]

どういうことなのか？と思ったのですが、実行してみると以下の感じで
>切り替わったユーザ名@instance名 元のユーザー名]

という感じで、コマンドの頭が表示される。
環境は変わらないので、切り替わった先のユーザーのファイルとかはいじれない？
ということは、権限のみ切り替えて使うとかってこと？

デフォルトで作成されるユーザーのパスワードを変えようと思ったところ、以下のエラーが発生
> ●● is not in the sudoers file.  This incident will be reported.

なので、パスワード変更対象のユーザーに切り替えてやったらできた。
デフォルトのアカウントのパスワードは、そのユーザーアカウント自身でないと設定できなさそう。

http://note.onichannn.net/archives/2706

#今ログインしているユーザーについて
who,usersコマンドがあるけど、この辺を使ってみた。

これは、ユーザーを切り替えても、元々ログインしていたユーザーの情報が表示される

https://eng-entrance.com/linux-user-show

#rootユーザーでGCEにログインする
デフォルトでrootはないのかと思いましたが、ありました。
設定変更して、rootでログインするコマンドをいれれば、rootではいれました。



>  gcloud compute ssh --project [project_id] --zone [zone] root@[VMインスタンス名]

rootの部分をユーザーに変更すればユーザーで入れる。

rootではいって、who usersを入力すると
rootと表示されます。

rootでログインすることは無効にして、rootにパスワードをつければ、セキュリティは向上する。
sudo passwd username
sudo passwd root


#Selinuxを無効にする
これが起動したままだと、意図しない挙動が発生することがあるらしいので、無効化する。

・無効化
sudo systemctl disable firewalld

・コンフィグファイル設定
sudo cp /etc/selinux/config /etc/selinux/config_backup
sudo vi /etc/selinux/config

・起動設定確認
sudo systemctl is-enabled firewalld
sudo getenforce

###（おまけ）service コマンドまとめ
サービス起動	systemctl start ${Unit}
サービス停止	systemctl stop ${Unit}
サービス再起動	systemctl restart ${Unit}
サービスリロード	systemctl reload ${Unit}
サービスステータス表示	systemctl status ${Unit}
サービス自動起動有効	systemctl enable ${Unit}
サービス自動起動無効	systemctl disable ${Unit}
サービス自動起動設定確認	systemctl is-enabled ${Unit}
サービス一覧	systemctl list-unit-files --type=service
設定ファイルの再読込	systemctl daemon-reload

#タイムゾーンの設定
デフォルトは以下の設定になっているみたいなので、変更する。
timedatectl
               Local time: Mon 2021-05-03 21:20:17 UTC
           Universal time: Mon 2021-05-03 21:20:17 UTC
                 RTC time: Mon 2021-05-03 21:20:17
                Time zone: UTC (UTC, +0000)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

以下のコマンドで日本時間に。
sudo timedatectl set-timezone Asia/Tokyo

変更OK
timedatectl 
               Local time: Tue 2021-05-04 06:21:04 JST
           Universal time: Mon 2021-05-03 21:21:04 UTC
                 RTC time: Mon 2021-05-03 21:21:04
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

###(おまけ)タイムゾーンコマンド
Local time	タイムゾーンに従った現在の日時
Universal time	協定世界時による現在の日時
Timezone	タイムゾーン
NTP enabled	NTPを使用するかどうか（yes／no）
NTP synchronized	NTPで同期しているかどうか（yes／no）
RTC in local TZ	RTCのタイムゾーン（使用しない場合は「no」）
DST active	夏時間が有効かどうか（夏時間がない場所の場合は「n／a」）


#ポートの変更
外部から22番ポートを指定してログインされないようにするため、変更しておく。
GCPのFW設定で22番ポートを許可しない設定にすると、コンソールからシェルで雪像することもできなくなる。

sshdの再起動が可能であるか念の為確認する。
sudo systemctl restart sshd

設定ファイルを待避し、書き換え
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_org
sudo vi /etc/ssh/sshd_config

ポートの番号は変更したものにする。
Port 22
Port xxxx

ファイルの差分を確認
diff /etc/ssh/sshd_config_backup /etc/ssh/sshd_config

sshdのサービスを再起動する。
sudo systemctl restart sshd

GCP上でFWを変更
22を許可から上記で変更したポートに変更

GCP上からは、VMページの「カスタムポートでアクセス」から接続できる

###（おまけ）外部からポートを指定して接続
GCE以外の場合、以下のようなコマンドでポートを指定する。
ssh -p 56789 xxxx@aaa.bbb.ccc.ddd

#ネットワーク設定、ホスト名の変更
nmcli (Network Manager CLI) コマンドを使う。
基本的にはGCPコンソール画面からできることなので、サーバー上ではやらないほうがよさそう。
一応、以下を確認。
・nmcli general hostnameも使える。でもGCPコンソール上、インスタンス名は変わってない。
・変更前、/etc/hostnameにインスタンス名が表示されていることは確認し、変更後、/etc/hostnameに反映されていることを確認。
・ ip addr showで出力されるプライベートIPは一致

###参照URL
https://endy-tech.hatenablog.jp/entry/2018/09/08/140950
https://densan-hoshigumi.com/server/centos-nmcli-operation

# タイムサーバーの設定は必要？
こちらは不要です。
vim /etc/chrony.conf　をみると２行目に”server metadata.google.internal iburst”の記述があります。
これをわざわざ変更することはないみたいです。

実際にやってみたのですが、追加したタイムサーバーにアスタリスクがつかないので、外部のサーバーは参照しないようです。
chronyc sources
210 Number of sources = 2
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
- ntp2.jst.mfeed.ad.jp          2   6    17    15   -476us[ -486us] +/-   46ms
* metadata.google.internal      2   6    17    15  -3516ns[  -14us] +/-  446us

#suできるユーザーを制限する
グループの確認などをここでシたいと思います。
そもそもグループってなんであるのか？と考えたんですが、グループメールみたいに、権限を付与して作業できる範囲を決めておいたり、部署ごとに分けて管理しやすくするのが目的ではないかなと思います。

まず、グループ一覧を確認
cat /etc/group

以下のコマンドでグループに追加できる。
usermod -g wheel test1

追加できてるか確認。※ここではちゃんとユーザーを指定しないとだめ。
id test1
uid=1002(test1) gid=10(wheel) groups=10(wheel)

以下のコマンドでsuができるようになる。
su -

#言語設定を変更する

シェルについて学んでいた時についでにやってみました。
以下のコマンドをうちます。
sudo localectl set-locale LANG=ja_JP.UTF8
sudo systemctl reboot

以下のコマンドをうつと変更になっていることが確認できます。
env | grep LANG
LANG=ja_JP.UTF8

https://www.apps-gcp.com/gce-casual-knowhow-01/#RHEL7CentOS7

#プロセス管理
GCEには初期状態だとpstreeがなかったので、インストールしました。
sudo yum -y install psmisc

https://qiita.com/nekootoko3/items/b9159d13cd4d3e689aca