nshmr
2024年9月30日 17時24分
別スレッド https://armadillo.atmark-techno.com/forum/armadillo/22549 の検証をしていて気が付きました。
Base OS version:3.19.1-at.1 上で、
Base OSアップデート前に、パスワードなしのユーザー"setup"を
armadillo:~# useradd setup -p '' armadillo:~# chage -d 0 setup armadillo:~# cd /home armadillo:/home# mkdir setup armadillo:/home# chown setup:setup setup armadillo:/home# chmod 2755 setup
のように初回ログイン時にパスワード設定を強制するように作成した状態で、
Base OS 3.20.3-at.3 に、Base OSだけをアップデートするための以下のdescファイル
swdesc_option component=base_os # Allow user setup's password is empty swdesc_option ALLOW_EMPTY_LOGIN # Change version string as same as Base OS image version swdesc_option version=3.20.3-at.3 # Change Base OS archive file name swdesc_tar --preserve-attributes --base-os baseos-x2-3.20.3-at.3.tar.zst
で、作成したswuファイルを使ってアップデートすると、
/etc/shadow上から ユーザー"setup"の行が消えてしまい、初回ログインができなくなってしまいました。
# /etc/passwd上の"setup"行や/home/setupなどは残っています。
アップデート前に、ユーザー"setup"のパスワード設定を行った場合は、アップデート後も残ります。
パスワード未設定状態でも、アップデート後に、/etc/shadowから消えないようにする方法はないでしょうか?
(補足)
/etc/swupdate_persist_fileに、persist_file -p /etc/shadow で追加してみたり、
descファイルに、swdesc_option ALLOW_EMPTY_LOGIN 行を追加してみたりは試してみましたが、状況は変わりませんでした。
この機能は、生産後に在庫のアップデートを行う(初期イメージを書いた後に、出荷前に最新版に更新する)ために必要になると考えています。
コメント
nshmr
マルティネさん
ありがとうございます。
> /etc/shadow (または passwd, group) の処理は複雑で、swupdate_preserve_files に設定されても影響ありません。
> POST (persist_file -P) で設定された場合は一時的に動くかもしれませんがアップデートで別の理由で動かなくなる恐れがありますので、swupdate_preserve_files のリストからそれらのファイルを外した方がいいと思います。
アップデート前のイメージで、swupdate_preserve_filesから/etc/shadowは削除しました。
その上で、
・mkswu-repo / mkswu-repo(make後)
・base osのみのアップデート / boot-loader + コンテナのアップデート / base OS + boot-loader + コンテナのアップデート
・descファイルに”swdesc_option ALLOW_EMPTY_LOGIN”あり / なし
の組み合わせ 12種類のswuファイルでのアップデートを試してみました。
いづれのswuファイルでも、アップデートは実行され、アップデート後、/etc/shadowから、パスワードなし次回パスワード設定のアカウントが残っていることが確認できました。
ALLOW_EMPTY_LOGINのあり/なしで、差がないことが確認できましたので、今後は、ALLOW_EMPTY_LOGIN なしですすめようと思います。
at_dominique.m…
2024年9月30日 21時07分
nshmrさん
マルティネです。
> /etc/shadow上から ユーザー"setup"の行が消えてしまい、初回ログインができなくなってしまいました。
やはり、エラーしない理由としてこの問題がありましたね。
こちらでも確認できました。パスワードがまだ設定されてないユーザーの場合はアップデート内の「Base OS」側のユーザーを残したくあえてスキップしていましたが、Base OS に存在しない場合に間違って消えてしまっていました。
まだレビュー中ですが、github の「test」ブランチに修正を出してみました:
https://github.com/atmark-techno/mkswu/tree/test
以下の様に使ってみてください
このブランチでしたら
* パスワードが設定されてないユーザーでも保存されます
* パスワードが設定されなくても、expiry されている(
chage -d 0
またはpasswd -e
で次のログインにパスワードー変更を要求する)場合にエラーしません(ALLOW_EMPTY_LOGINは基本的に不要になる)> /etc/swupdate_persist_fileに、persist_file -p /etc/shadow で追加してみたり、
/etc/shadow (または passwd, group) の処理は複雑で、swupdate_preserve_files に設定されても影響ありません。
POST (persist_file -P) で設定された場合は一時的に動くかもしれませんがアップデートで別の理由で動かなくなる恐れがありますので、swupdate_preserve_files のリストからそれらのファイルを外した方がいいと思います。
> この機能は、生産後に在庫のアップデートを行う(初期イメージを書いた後に、出荷前に最新版に更新する)ために必要になると考えています。
はい、base os のイメージに手を加えてそちらにもユーザーを追加すれば消えませんがこのまま修正できたと思いますので、今のテストブランチで問題なければそのまま10月のリリースに加えます。
よろしくお願いします。