Armadilloフォーラム

ABOS-Webのパスワードをエンドユーザーに入力してもらうようにする方法

yorikasa

2025年6月23日 18時28分

いつもお世話になっております。

==========
製品型番:AG6221
ABOSバージョン:3.21.3-at.7
カーネルバージョン:Linux armadillo 5.10.236-1-at #2-Alpine Tue Apr 22 02:43:01 UTC 2025 armv7l Linux
3G/LTE モジュール情報 (Debianのみ):
その他:
ABOS-Webのバージョン:Version: 1.7.4
==========

ABOS-Webのパスワードをエンドユーザーに入力してもらうようにする方法について質問させていただきます。

ABOS-Webを利用するためには、「3.1.5.1. initial_setup.swu の作成」にもある通り、パスワードの設定が必要かと思います。
こちら、パスワードの設定なしで出荷しエンドユーザーにパスワードを設定していただくため、「https://:58080/new_password」へアクセスだけは許可できるように設定を変更することはできないのでしょうか?
パスワードは、取扱説明書等のドキュメントで公開することで、初回にArmadilloを出荷した際に変更していただくよう促すことは可能かと思いますが、パスワードを変更せずに利用する可能性もあるため、出来るなら初期状態でパスワードを設けたくないと思った次第です。

よろしくお願いいたします。

コメント

at_dominique.m…

2025年6月23日 18時51分

マルティネです。

> ABOS-Webのパスワードをエンドユーザーに入力してもらうようにする方法について質問させていただきます。
>
> ABOS-Webを利用するためには、「3.1.5.1. initial_setup.swu の作成」にもある通り、パスワードの設定が必要かと思います。
> こちら、パスワードの設定なしで出荷しエンドユーザーにパスワードを設定していただくため、「https://:58080/new_password」へアクセスだけは許可できるように設定を変更することはできないのでしょうか?
> パスワードは、取扱説明書等のドキュメントで公開することで、初回にArmadilloを出荷した際に変更していただくよう促すことは可能かと思いますが、パスワードを変更せずに利用する可能性もあるため、出来るなら初期状態でパスワードを設けたくないと思った次第です。

すみません、あまり考えてなかったケースです。
abos-web 単体の動きとしてはパスワードが設定されてないと確かに new_password で設定できるようになりますが、initial setup がインストールされた Armadillo でパスワードがないと abos-web が起動できないようになってますね…

対応は難しくないですが今月のリリースはもうしめてしまって、7月で対応しようと思います。

それまでは
* mkswu --init 時に abos-web のパスワードが問われる時に空のパスワードを入力してください。すでに入力した場合は initial_setup.desc を直接に編集して abos-web-admin のパスワード変更行を usermod -p '!' abos-web-admin に変更してください(インストール済みで試したい場合は abos-ctrl certificates resetで再びインストールできます。空の入力で生成してすでにパスワードを設定した場合はリセットされませんのでその場合は初期化してください。)
* /etc/init.d/abos-web の start() 関数を直接に編集して、頭部分の 「# refuse to start if password has not been set」if 部分を削除してください:

start() {
	# prepare tls self-signed certificate pair if none found
	generate_tls_key
	declare_avahi_service
 
	default_start
}

* persist_file /etc/init.d/abos-web で永続化して再起動してみてください。

アップデートでこのファイルが上書きされます。7月のアップデートで変数を使ってテストを追加しますので、その時は
/etc/atmark/abos_web/init.confABOSWEB_ALLOW_EMPTY_LOGIN=1 を記載していただければ、パスワードを設定してなくても起動するようになります。

よろしくお願いします。

マルティネさん

早々のご回答ありがとうございました。

> 対応は難しくないですが今月のリリースはもうしめてしまって、7月で対応しようと思います。

承知いたしました。
アップデートまでの間は、教えていただきました内容で対応をさせていただきます。

引き続き、よろしくお願いいたします。

マルティネさん

教えていただいた内容について対応してみたのですが、new_passwordにアクセスが出来ませんでした。
/etc/shadowと/etc/init.d/abos-webについて確認したところ、内容はあっているように思えます。

# cat /etc/shadow | grep abos-web
abos-web-admin:!:19963:0:99999:7:::
 
# cat /etc/init.d/abos-web
#!/sbin/openrc-run
# SPDX-License-Identifier: MIT
 
pidfile="/run/abos-web.pid"
 
name="abos-web"
command="/usr/bin/$name"
command_background="yes"
 
start_stop_daemon_args="--user abos-web-admin:abos-web-admin"
 
depend() {
        need net
}
 
generate_tls_key() {
        local cert=/etc/atmark/abos_web/tls/cert.pem \
                key=/etc/atmark/abos_web/tls/key.pem \
                keep_old=""
        if ! [ -e "$cert" ]; then
                einfo "ABOS Web certificate missing, generating certificate..."
        elif [ "$(date +%s)" -lt 1707171804 ]; then
                # date it too old, NTP was not obtained -- skip checking date
                return
        elif ! openssl verify -CAfile "$cert" "$cert" >/dev/null 2>&1; then
                einfo "ABOS Web certificate is not valid, regenerating it"
                # keep old key for debug
                mv "$cert" "$cert.old"
                mv "$key" "$key.old"
                keep_old=1
        else
                # certificate is present & valid
                return
        fi
 
        mkdir -p /etc/atmark/abos_web/tls || return
        # accept a handful of avahi addresses
        local altnames="DNS.1:armadillo.local" i
        for i in $(seq 2 16); do
                altnames="$altnames, DNS.$i:armadillo-$i.local"
        done
        # and localhost and containers 'host' aliases:
        altnames="$altnames, DNS.17:localhost"
        altnames="$altnames, DNS.18:host.containers.internal"
        # .. as well as their IP
        altnames="$altnames, IP.1:127.0.0.1, IP.2:::1, IP.3:10.88.0.1"
        openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:secp384r1 -x509 \
                        -nodes -days 3650 -subj '/CN=armadillo.local' \
                        -addext "subjectAltName = $altnames" -batch \
                        -out "$cert" -keyout "$key" \
                || return
        chown -R abos-web-admin: /etc/atmark/abos_web/tls
        persist_file "$cert" "$key" ${keep_old:+"$cert.old" "$key.old"}
}
 
declare_avahi_service() {
        # this file stays in ram, so we do not advertise abos-web
        # if we do not start it
        if [ -d /etc/avahi/services ]; then
                cat > /etc/avahi/services/abos-web.service <<'EOF'
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">%h abos-web</name>
  <service>
    <type>_https._tcp</type>
    <port>58080</port>
  </service>
</service-group>
EOF
        fi
}
 
start() {
        # prepare tls self-signed certificate pair if none found
        generate_tls_key
        declare_avahi_service
 
        default_start
}
 
stop_pre() {
        # remove avahi announce
        rm -f /etc/avahi/services/abos-web.service
}

> すでに入力した場合は initial_setup.desc を直接に編集して abos-web-admin のパスワード変更行を usermod -p '!' abos-web-admin に変更してください
こちらについてなのですが、既にパスワードを空の状態の状態で利用していた場合、以下のようにdescに追加すると挙動が変わってしまい、アクセス拒否のままになってしまうのでしょうか?
私の認識誤りがございましたら、コメントをいただけますと幸いです。

# set abos-web-admin 
swdesc_command --description "setting passwords" \
	"usermod -p '!' abos-web-admin"

どうぞよろしくお願いいたします。

マルティネさん

度々申し訳ございません。
descファイルについて1点補足させていただきます。

/etc/init.d/abos-webについてですが、他にもABOS上に配置したいファイルがあったので、update_baseos_lpmn.tarに含めて、initial_setup時にinit.dへ配置するようにdescファイルを修正しました。
initial_setupで配置するのが良くなかったりするのでしょうか?

swdesc_tar --extra-os "../abos/update_baseos_lpmn.tar"

at_dominique.m…

2025年7月14日 10時15分

yorikasaさん

> 教えていただいた内容について対応してみたのですが、new_passwordにアクセスが出来ませんでした。
> /etc/shadowと/etc/init.d/abos-webについて確認したところ、内容はあっているように思えます。

頂いた内容をコピーして試しましたが、問題なく abos-web が起動して、接続時にパッスワードを設定できるようになっています。
「new_passwordにアクセスできない」ということことは abos-web が起動して、ページに弾かれてるということでしょうか?
それともサービスが起動してないでしょうか?

前者(起動している)の場合は「/usr/libexec/abos-web/get_pw_hash.sh」と「 curl -w'\n' -k -u :any https://172.16.1.10:58080/api/swu/versions」を実行してみていただけますか?
後者(起動してない)の場合は「ps aux|grep abos-web」と「rc-service abos-web restart」の出力を提供していただけますか?

> こちらについてなのですが、既にパスワードを空の状態の状態で利用していた場合、以下のようにdescに追加すると挙動が変わってしまい、アクセス拒否のままになってしまうのでしょうか?

パスワードが空な状態で実行した場合に影響ないはずですので、desc ファイルに常に実行しても問題ありません。
一般的には確かに「!」は「ロックされてる」パスワードですので、通常のシェルアカウントの場合はロックしてしまうコマンドですが、abos-web-admin のユーザーアカウントは abos-web サービス内で確認していて、以下の様に処理しています:
* パスワードハッシュが ! で始まる場合は /etc/init.d/abos-web サービスで、「one-time cert」がない(= initial setup 実施済み)と起動しないようにしています。こちらの挙動を修正していただいたので、これでも起動するようになります(または今月末のアップデートでABOSWEB_ALLOW_EMPTY_LOGIN の変数で起動できるようになります)
* サービス起動後に接続する際に、パスワードハッシュが「!」の場合に新しいパスワードを設定できるようになります(細かいですがパスワードを設定した後に「passwd -l」等で「ロック」をかけると、パスワードハッシュに ! を先頭に追加しますがハッシュが残ってますので、その場合はログインできません)

> /etc/init.d/abos-webについてですが、他にもABOS上に配置したいファイルがあったので、update_baseos_lpmn.tarに含めて、initial_setup時にinit.dへ配置するようにdescファイルを修正しました。
> initial_setupで配置するのが良くなかったりするのでしょうか?

問題ないと思います。
initial_setup.desc の内容を編集すると管理しづらい(initial setup を一度インストールしたら再びインストールできないので、毎回初期化しないといけない)ので、推奨としては別の desc ファイルで tar 等を展開していただいて、initial setup と組み合わせる時に「mkswu -o initial_setup_and_custom.swu initial_setup.desc custom.desc」等で一つの swu に複数の desc ファイルを組み込む形を推奨しています…が、結果としては同じなので、ファイルを同時に配布する事自体は問題ないと考えています。

よろしくお願いします

マルティネさん

ご丁寧な解説ありがとうございました。

確認したところサービスが動いておりませんでした。
/etc/init.d/abos-webに対して実行権限がついておらず起動できていなかったようです。(初歩的なミスでした。)
実行権限を見直したところアクセスできました。

いただいたコメントで見直した方が良さそうな部分もあったので、対応していきたく思います。
今後ともよろしくお願いいたします。