ZFSonRoot(2日目)
先日に引き続きサーバーのリプレイス作業を行なっておりました。
OSのインストールが終わったので次に管理ユーザーの設定を行いました。
システム管理ユーザー
私のサーバーは実務環境は、全てKVMの仮想マシン上になりるので物理サーバー上に作成するユーザーは、2つまずは、システム管理ユーザーそしてKVMの管理ユーザーになります。
サーバーの構築が完了したら前述通り実務環境は、KVM上になるためサーバー構築時と定期的なマシンメンテ(アップデート作業も含む)意外使わないユーザーです。
ZFS on Root環境
インストールメディアからのOSインストールであれば、インストール時に管理者権限(sudo実行権限)のユーザーを作るか、そうでなかったとしても通常のファイルシステム(ext4)の環境であれば、useraddコマンドのコマンドオプションでsudo実行権限を持つグループをサブグループにしてユーザーを作成して終了なのですが・・・
ZFSファイルシステムを使っている場合、ユーザーのホームディレクトリを別途作成してからユーザーを作ると言う作業手順になります。
加えてUbuntu20のZFSonRoot環境から各ディレクトリには、UUIDを振って作成するようになっています。
新規ユーザー作成
なので新規ユーザーを作成する時は、以下のコマンドになります。
UUIDの取得
UUID=$(dd if=/dev/urandom of=/dev/stdout bs=1 count=100 2>/dev/null |
tr -dc 'a-z0-9' | cut -c-6)
ZFSルートディレクトリの情報設定
ROOT_DS=$(zfs list -o name | awk '/ROOT\/ubuntu_/{print $1;exit}')
ホームディレクトリを作成
sudo zfs create -o com.ubuntu.zsys:bootfs-datasets=$ROOT_DS \
-o canmount=on -o mountpoint=/home/${NEW_USER} \
rpool/USERDATA/<NEW_USER>_$UUID
ここまで準備してからLinuxのアカウント作成
sudo useradd <NEW_USER> -s /bin/bash
ホームディレクトリがユーザーを作成する時点で存在する場合は、ホームディレクトリの基本ファイル(bashrcなど)が格納されている「/etc/skel」からコピーを行わないため手動でコピーをおこなす。
sudo cp -a /etc/skel/. /home/${NEW_USER}
最後にホームディレクトリのパーミッションを適切に修正
sudo chown -R <NEW_USER>:<NEW_USER> /home/<NEW_USER>
ー補足ー
rpoolは、ZFSファイルシステムで作ったRootディレクトリのデータセット
<NEW_USER>は、新規作成する任意のユーザー名
構築時に2回しか行わないのでいいのですがめんどくさいです。
なので単調ですがスクリプト事前に作ってそれを実行して今回は、ユーザーを作りました。
#!/bin/bash
#ZFSファイルシステム上に新規管理ユーザを作成する
#ユーザ名を変数へ格納
echo 'new user name'
read NEW_USER
# UUIDの取得
UUID=$(dd if=/dev/urandom of=/dev/stdout bs=1 count=100 2>/dev/null |
tr -dc 'a-z0-9' | cut -c-6)
# ZFSルートディレクトリの情報設定
ROOT_DS=$(zfs list -o name | awk '/ROOT\/ubuntu_/{print $1;exit}')
#ホームディレクトリを作成
sudo zfs create -o com.ubuntu.zsys:bootfs-datasets=$ROOT_DS \
-o canmount=on -o mountpoint=/home/${NEW_USER} \
rpool/USERDATA/${NEW_USER}_$UUID
#アカウント作成
sudo useradd ${NEW_USER} -s /bin/bash
#ホームディレクトリに必要なファイルを「/etc/skel」からコピー
sudo cp -a /etc/skel/. /home/${NEW_USER}
#ホームディレクトリのパーミッションを適切に修正
sudo chown -R ${NEW_USER}:${NEW_USER} /home/${NEW_USER}
#作成されたアカウントの確認
sudo id ${NEW_USER}
getent passwd | grep ${NEW_USER}
getent group | grep ${NEW_USER}
zfs list -o name | grep ${NEW_USER}
管理ユーサーの設定
Ubuntu20の場合、通常インストールで管理者権限のユーザーを作った場合、サブグループとして以下の設定がなされています。
adm
cdrom
dip
lpadmin
lxd
plugdev
sambashare
sudo
よってユーザー作成後にそのユーザーをシステム管理ユーザーにする場合は、以下のコマンドを実行する必要があります。
usermod -a -G adm,cdrom,dip,lpadmin,lxd,plugdev,sambashare,sudo <username>
そのほかにもSSH接続設定など行いましたが、この辺は通常環境と同じ感じなので今日はこの辺で
3日目は、KVM管理ユーサーの設定を行う予定です。