#はじめに
久しぶりにGCEでVMを立てたが、ユーザ作成やSSH公開鍵配置、権限設定に時間がかかったので、備忘も兼ねて記載。なんとなくで動かすことはできるが挙動が理解できない部分があったので、そこも併せて調べてみた。
###GCE環境
- マシンタイプ:n1-standard-2
- OS: CentOS (centos-7-v20190916)
- ゾーン:us-west1-b
#ユーザ作成
VMインスタンスを作成した時点で、自分のGoogleアカウントのユーザは自動で作成される。が、あまりにも設定をGoogleに依存させ過ぎても汎用性に欠けるため、VM上に別アカウントを作成する。
#パターン1. VM上でuseraddコマンド
GCPコンソールからブラウザでSSH接続し、$sudo useradd [username]
でユーザを追加する。追加後は、/home/username/.ssh/authorized_keys
にSSH公開鍵の内容を書き込む。なおそのユーザのホームディレクトリに不必要に他ユーザの権限がついていると、下記のようなログが吐かれ、SSHログインできないことがあるので注意。ホームディレクトリに所有者以外の書込み権が設定されているとNGのようです、お勉強になります。
Apr 25 07:49:19 instance-hoge sshd[1889]: Authentication refused: bad ownership or modes for file /home/username/.ssh/authorized_keys
###参考: GCPコンソールからSSHする場合、特別な挙動を示す
GCPターミナルからのブラウザSSH接続では、Googleアカウントユーザはパスワード無しでsudoが打てる。そのユーザ自体にパスワード不要の権限はついていないようであり、Google側でうまくやってくれているようだ。ターミナルソフトからSSH鍵でログインすると、sudoにパスワードが求められる。
###注意: Webブラウザ要件
手元のFirefox 75.0だと、GCPコンソールからのSSH接続/シリアルコンソール接続がうまくいかなかった(SSH鍵転送が始まらず、真っ黒の画面のまま)。ChromeとEdgeならちゃんと動いているので、この辺を推奨。
%wheel ALL=(ALL) NOPASSWD: ALL
#wheelグループであればパスワード無しsudoが打てるが、
#Googleアカウントユーザはデフォルトではwheelグループには所属していない。
#パターン2. GCPコンソールからユーザ追加
GCPコンソールからユーザ追加・鍵追加ができる。ぱっと見、わかり辛いが[VMインスタンスの詳細]画面でSSH認証鍵が登録できる。公開鍵を登録するだけで鍵内で指定したユーザ名のユーザが、VMインスタンス上に勝手に作成される(参考: Google Compute Engine のSSH接続)。鍵をコンソールに書き込むだけでユーザ作成~鍵ファイルの配置までやってくれるのは結構な時間短縮になり、ありがたい。
###勝手にパスワード無しsudo権限を付与
そして凄いのだが、このパターン2で作成したユーザにはパスワード無しsudo権限がデフォルトで付与されている。個人で遊ぶ分には毎度パスワードなんて打ってられないので、勝手に全部やってくれるのは本当ありがたい。一応設定ファイルとかで確認するとこんな感じ。
作成ユーザはgoogle-sudoers
に所属させられている。
[fuga@instance-hoge etc]$ groups fuga
fuga : fuga google-sudoers
設定ファイルでは/etc/sudoer.d
内のファイルをさらに読み込むようになっている。
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
##
## This file must be edited with the 'visudo' command.
(中略)
# ↓↓最下段の2行が重要。この#はコメントアウトではないとのこと。ここでsudoers.d内のgoogle-sudoersを読み込んでいる。
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
/etc/sudoers.d
内のファイルを開くとこんな感じ。ちゃんとパスワード無し権限が明記されている。
%google-sudoers ALL=(ALL:ALL) NOPASSWD:ALL
#まとめ
今まで原始的なパターン1しか知らなかったが、パターン2はめちゃくちゃ便利。
パターン1ではユーザ作成~鍵の配置~sudoのパスワード無し権限付与とかやっていたのが、パターン2ではGCPコンソールで鍵を設定するだけで全部OKになる。Googleさん強い。Googleさんありがとう。