COLUMN
【Linux Tipsシリーズ】平凡なソフトウェア開発者が自分Linuxを作ってみた⑦
今回のコラムもBuildrootを題材にします。 今まで作成してきたRaspberryPiイメージには管理者ユーザーである「root」ユーザーしか定義されていない状態となっており、セキュリティや運用面に関して良い状態とは言えませんので、今回は一般ユーザーの追加をしてみようと思います。
ユーザーの追加を行う
「root」でログインした後に一般ユーザーを作成すれば解決することですが、Buildrootにはイメージ生成時に一般ユーザーも作成しておく機能があるので、その機能を使ってみたいと思います。
イメージ生成時に一般ユーザーを作成するには、Buildrootのドキュメントの「9.6. Adding custom user accounts」に、〝「BR2_ROOTFS_USERS_TABLES」にmakeusers 構文に従った通常のテキストファイルを設定する〝と書かれていますが、makeuser構文がわかりませんので、makeuser構文の確認から行います。
makeusers 構文とは、Buildroot独自の構文で、Buildrootのドキュメントの「Chapter 26. Makeusers syntax documentation」に詳細が記述されており、スペース(半角空白)で区切られたフィールドのリストで、1 行に 1 人のユーザー定義を行う形式となっています。
-
※
-
この構文についての詳細はBuildrootのドキュメントを参照していただくこととして、本コラムでは簡単な説明とします。
1行の構成は下図のようになっており、“comment”フィールドを除き、省略することはできません。
図 1 makeusers構文構成
各フィールドの設定内容は以下のとおりです。
-
username
登録したい一意なユーザー名(ログイン名)を設定します。 -
uid
ユーザーに割り当てる一意な番号を設定します。 使用したい番号がなければ“-1”を指定するとBuildrootが一意な番号を割り当てます。 -
group
ユーザーが所属するメイングループを設定します。 -
gid
メイングループに割り当てる一意な番号を設定します。使用したい番号がなければ“-1”を指定するとBuildrootが一意な番号を割り当てます。 -
password
ユーザーが使用するログインパスワードを設定します。 -
home
ユーザーのホームディレクトリをフルパスで設定します。 -
shell
ユーザーが使用するshellをフルパスで指定します。 -
groups
サブグループ(メイングループ以外にユーザーを所属させたいグループ)を設定します。複数に所属させたい場合はカンマ(”,”)で区切って記述します。 -
comment
コメントを自由形式で記述できます。 この“comment”フィールドを除き、他の全てのフィールドは必須フィールドとなっており、makeusers 構文はフィールドの区切りにスペースを使用しているため、このフィールドを除きスペースを使用することはできません。 また、このフィールドを含むすべてのフィールドでコロン(”:“)は使用できません。
-
※
-
usernameやgroupには“root”を使用できません、またuid,gidに“0”を使用することはできません。 使用可能な文字列や値、構文の規則に関しては、Buildrootのドキュメントで確認してください。
makeusers 構文がある程度理解できたので、一般ユーザーを定義します。 本コラムでは下表の設定で一般ユーザーを作成したいと思います。
表 1 コラム用ユーザー定義
フィールド名 | 設定値 |
|
username | column_user | |
uid | -1 | |
group | fsi_column | |
gid | -1 | |
password | column | |
home | /home/column_user | |
shell | /bin/sh | |
groups | – | |
groups | Column Test User |
本コラムでは設定ファイルは「~/br2-external/configs」配下に保存していますので、今回のmakeusers 構文のテキストファイルも「~/br2-external/configs」に作成します。
~$ cd ~/br2-external/configs
~/br2-external/configs$ echo “column_user -1 fsi_column -1 =column /home/column_user /bin/sh – Column Test User ” > add_user_accounts.lst
-
※
-
本コラムでは、makeuser構文テキストファイルを「add_user_accounts.lst」としています。
-
※
-
パスワードフィールドに設定している文字列“=column”は、間違いではなく、先頭に“=”を付けるとBuildrootが暗号化をしてパスワードファイルを作成してくれます、詳しくはBuildrootのドキュメントを参照してください。
makeusers 構文のテキストファイルを作成したので、そのファイルのパスを「BR2_ROOTFS_USERS_TABLES」に設定します。
Buildrootの設定を開き、「System configuration」->「Path to the users tables:」に“~/br2-external/configs/add_user_accounts.lst”と入力して(図 2 BR2_ROOTFS_USERS_TABLES設定 参照)保存を行い、「make」を実行します。
-
※
-
ここでは、「make xconfig」を使用しています。
図 2 BR2_ROOTFS_USERS_TABLES設定
生成されたイメージファイルをマイクロSDに書き込んでRaspberryPiを起動し、今回作成したユーザーである“column_user”でログインしてみましょう。
「buildroot login:」の箇所に“column_user”、「Password:」は“column”と入力するとログインできます。
ログインしたら、ユーザー情報を確認するコマンド(“id”コマンド)を実行し、Buildrootが設定した“uid”と“gid”を確認してみます(図 3 column_userでログイン 参照)。
図 3 column_userでログイン
“uid”と“gid”は共に 1000 となっています。 次はユーザー情報の詳細が記述されているフィルを参照し、「makeusers 構文のテキスト」で指定した通りに登録されているか確認してみます。
ユーザー情報の詳細は「/etc/password」に記述されており、makeusers 構文と同じく1行に1人のユーザーが定義されています。構文もmakeusers 構文に似ていますが、定義の順序が異なり、区切りがコロン(“:”)になっています(図 4 passwordファイル構成 参照)。
図 4 passwordファイル構成
「/etc/password」を表示すると、“column_user:x:1000:1000:Column Test User:/home/column_user:/bin/sh” と記述されている行があり(図 5 ユーザー情報確認 参照)、ユーザー名やコメント、ホームディレクトリ等、所属グループを除いて「makeusers 構文のテキスト」で指定した通りに登録されていることが確認できました。
図 5 ユーザー情報確認
所属グループに関しては「/etc/group」に記述されていますので、「/etc/group」を表示します。 “fsi_column:x:1000:”と記述されている行があり、「makeusers 構文のテキスト」で指定したグループに属していることが確認できました。
-
※
-
「/etc/group」の構文は、「/etc/password」と同一です(図 6 groupファイル構成 参照)。
図 6 groupファイル構成
本コラムではユーザーを1人追加しただけですが、読者の皆さんは複数ユーザーの追加やサブグループの設定等してみてください。
個別相談も承っております。下記よりお申し込みください。