Armadilloフォーラム

コンテナからホストにSSHする場合のユーザーについて

tmygt

2023年9月21日 16時05分

https://armadillo.atmark-techno.com/forum/armadillo/15576 でご相談させていただきましたが、コンテナからホストのネットワーク設定を更新する方法を検討しています。

SSHログイン後にネットワーク設定を変更するため、通常のユーザーではなくrootでログインする必要があると考えています。
ただし、コンテナ内にrootのパスワードや、rootにアクセス可能な秘密鍵を持たせることに抵抗があります。

パスワード無しの一般ユーザーを作り、SSHのアクセス元をlocalhostに絞る + コンテナ起動時に --net=host を付ければパスワード無しでSSHできると考えているのですが、nmcliを使うためにはABOSにsudoを追加する必要がありそうです。

そこで質問が3つあります。

1. ABOSにsudoを追加しても問題ないでしょうか? 非推奨であったりしないでしょうか?
2. sudoの追加以外に、rootユーザを使わずにコンテナからSSH経由でnmcliを実行する方法はありますか?
3. rootユーザでログインする場合、推奨される方式は公開鍵認証でしょうか? その場合、鍵管理のおすすめの方法はありますか

以上、よろしくお願いいたします。

コメント

at_dominique.m…

2023年9月21日 17時49分

tmygtさん

マルティネです。

> コンテナ起動時に --net=host を付ければ

ちなみにデフォルトの network でも、podman が /etc/hosts に 「host.containers.internal」を設定していますのでそれで ssh できます
(sshd は localhost で制限できなくなりますが、iptables 等で似たような制限を付けれます)

> 1. ABOSにsudoを追加しても問題ないでしょうか? 非推奨であったりしないでしょうか?

alpine で sudo を使えますが、ABOS のパッケージを追加するとアットマークテクノが提供するアップデートを使えなくなりますのであまりおすすめしません。
ABOS では doas を代わりに使用しています (2023年6月の 3.17.4-at.7 バージョン以降)ので、/etc/doas.d にコンフィグファイルを追加して実行したいコマンドを管理してみてください。

> 2. sudoの追加以外に、rootユーザを使わずにコンテナからSSH経由でnmcliを実行する方法はありますか?

nmcli コマンドは dbus のソケットにアクセスできれば実行できますが、最終的には persist_file も実行する必要がありますのでそこはどうしても root 権限が必要です。
(それか、/etc/NetworkManager/system-connections を fstab で別のところでマウントすることもできますが、あまりテストされてないパターンなので persist_file を推奨します)

> 3. rootユーザでログインする場合、推奨される方式は公開鍵認証でしょうか? その場合、鍵管理のおすすめの方法はありますか

ssh 鍵でログインして、authorized_keys に command をしていすれば doas と同じ制限になると思います(指定なコマンド以外何も実行できないので)
個人的に使っているパターンは、command にチェックするスクリプトを実行して、そちらで $SSH_ORIGINAL_COMMAND を確認していくつかの固定なコマンドを実行させています。

armadillo# cat /root/.ssh/authorized_keys
restrict,command="/root/.ssh/allowed-commands.sh" ssh-ed25519 AAA.....
armadillo# cat /root/.ssh/allowed-commands.sh
#!/bin/sh
 
case "$SSH_ORIGINAL_COMMAND" in
foo)
        # 処理
        ;;
*)
        echo "$SSH_ORIGINAL_COMMAND" >&2
        echo "Access denied" >&2
        exit 1
        ;;
esac

いかがでしょうか。

tmygt

2023年9月21日 20時59分

マルティネさん

回答ありがとうございます。

> > コンテナ起動時に --net=host を付ければ
>
> ちなみにデフォルトの network でも、podman が /etc/hosts に 「host.containers.internal」を設定していますのでそれで ssh できます
> (sshd は localhost で制限できなくなりますが、iptables 等で似たような制限を付けれます)

コメントありがとうございます。
今回はコンテナで動かすアプリケーションの制約で --net=hostが必要という事情もあって、--net=hostを使っています。

また、iptablesでやる場合は外からのSSHをすべて塞ぐことになるのだと思いますが、その場合メンテナンス用のユーザでSSHログインができなくなってしまうので避けたいです。(最初の投稿が説明不足ですみません。nmcli用のユーザだけlocalhostアクセスに制限し、メンテナンス用ユーザは外からアクセスさせたいです。)

> > 1. ABOSにsudoを追加しても問題ないでしょうか? 非推奨であったりしないでしょうか?
>
> alpine で sudo を使えますが、ABOS のパッケージを追加するとアットマークテクノが提供するアップデートを使えなくなりますのであまりおすすめしません。
> ABOS では doas を代わりに使用しています (2023年6月の 3.17.4-at.7 バージョン以降)ので、/etc/doas.d にコンフィグファイルを追加して実行したいコマンドを管理してみてください。

ありがとうございます。この方式が良さそうだと思っています。
既存の設定ファイルを読んでみましたが abos-webも同じ仕組みでnmcliを実行しているのですね。どのように実行しているのか気になっていました。

> > 3. rootユーザでログインする場合、推奨される方式は公開鍵認証でしょうか? その場合、鍵管理のおすすめの方法はありますか
>
> ssh 鍵でログインして、authorized_keys に command をしていすれば doas と同じ制限になると思います(指定なコマンド以外何も実行できないので)
> 個人的に使っているパターンは、command にチェックするスクリプトを実行して、そちらで $SSH_ORIGINAL_COMMAND を確認していくつかの固定なコマンドを実行させています。

これも便利そうです。rootユーザを使う場合はこの方法を検討します。

以上、ご回答ありがとうございました。

at_dominique.m…

2023年9月22日 10時12分

tmygtさん

お返事ありがとうございます。

> また、iptablesでやる場合は外からのSSHをすべて塞ぐことになるのだと思いますが、その場合メンテナンス用のユーザでSSHログインができなくなってしまうので避けたいです。(最初の投稿が説明不足ですみません。nmcli用のユーザだけlocalhostアクセスに制限し、メンテナンス用ユーザは外からアクセスさせたいです。)

iptables は楽なので推奨していましたが、他のユーザーの接続を許可したい場合は sshd_config で対応した方がよさそうですね。
質問ではなかったので余計なお世話かもしれませんが、「AllowUsers remoteuser@* nmcliuser@127.0.0.1」でできます。

また、sshd_config は ABOS のアーカイブに入ってますので、直接に編集する場合は persist_file -P で /etc/swupdate_preserve_files に POST として記載しないとアップデートの際に上書きされます。
今月のアップデートで「Include /etc/ssh/sshd_config.d/*.conf」を追加しますので、この include だけを手動に追加してそちらの別のファイルで設定を管理していただければ使いやすいかと思います。

また何かあればまた聞いてください。

tmygt

2023年9月25日 9時06分

マルティネさん

> 質問ではなかったので余計なお世話かもしれませんが、「AllowUsers remoteuser@* nmcliuser@127.0.0.1」でできます。
>
> また、sshd_config は ABOS のアーカイブに入ってますので、直接に編集する場合は persist_file -P で /etc/swupdate_preserve_files に POST として記載しないとアップデートの際に上書きされます。
> 今月のアップデートで「Include /etc/ssh/sshd_config.d/*.conf」を追加しますので、この include だけを手動に追加してそちらの別のファイルで設定を管理していただければ使いやすいかと思います。

コメントありがとうございます。sshd_configにAllowUsersを書いていて、アップデート時の挙動が気になっていました。
sshd_config.d が追加されるとのことで、助かります。

以上、今後ともよろしくお願いいたします。