Armadilloフォーラム

C言語プログラムのroot権限実行方法について

m-kaneko

2025年8月22日 8時48分

太陽誘電の金子と申します。

現在、Armadillo-IoT A9E上でC言語にて作成したプログラムを動作させるにあたり、
以下の点についてご教示いただきたく投稿いたしました。
 ・作成したC言語プログラムをコンパイルし、root権限で実行する方法
 ・socket(PF_PACKET, DG_RAM, ...)を使用した通信の実現方法
  ※SOCK_DGRAMを使用するためにはroot権限が必要と認識しております。

私はC言語での開発経験はございますが、ネットワーク関連の開発についてはまだ学び始めたばかりです。
初歩的な質問で恐縮ですが、設定方法や実行手順など、ご教示いただけますと幸いです。
お手数をおかけいたしますが、何卒よろしくお願いいたします。

使用する機器について
 [製品] Armadillo-IoT A9E Cat.1 bis+WLAN
 [ブートローダー] U-Boot SPL 2023.04-at6 (Jul 29 2025 - 00:03:07 +0000)
 [Armadillo Base OS]: 3.22.1-at.1
 [Linuxカーネル] 5.10.240-0-at

コメント

at_satoshi.ohta

2025年8月22日 10時01分

太田です。

Armadillo Base OS ではお客様が作成するアプリケーションはコンテナを使用して開発していただくことを推奨しています。

参照: https://manual.atmark-techno.com/armadillo-iot-a9e/armadillo-iotg-a9e_p…

アットマークテクノでは Aramdillo Base OS 上に配置するアプリケーションコンテナの作成を行うための VS Code の拡張機能である ABOSDE を提供しています。

参照: https://manual.atmark-techno.com/armadillo-iot-a9e/armadillo-iotg-a9e_p…

ABOSDE では C 言語用のプロジェクトがあり、サンプルプログラムも提供していますので、そちらをご活用頂ければ幸いです。

参照: https://manual.atmark-techno.com/armadillo-iot-a9e/armadillo-iotg-a9e_p…

作成する C 言語のプログラムはコンテナ内で実行することになります。
コンテナ起動設定ファイルを使用して、Armadillo 上にあるコンテナイメージからコンテナを起動できます。
コンテナ起動設定ファイルに以下を記述すると、コンテナにホスト(Armadillo Base OS)のポートを渡すことができます。

add_ports <ホストのポート>:<コンテナのポート>/udp

参照: https://manual.atmark-techno.com/armadillo-iot-a9e/armadillo-iotg-a9e_p…

まずは上記の方法でお試し頂ければ幸いです。
どうぞよろしくお願いいたします。

at_dominique.m…

2025年8月22日 10時07分

マルティネです。
横からすみません。

> コンテナ起動設定ファイルに以下を記述すると、コンテナにホスト(Armadillo Base OS)のポートを渡すことができます。
>

> add_ports <ホストのポート>:<コンテナのポート>/udp
> 

ちなみにこれは AF_INET/AF_INET6 と SOCK_DGRAM の話です。

>socket(PF_PACKET, DG_RAM, ...)を使用した通信の実現方法
> SOCK_DGRAMを使用するためにはroot権限が必要と認識しております。

PF_PACKET に CAP_NET_RAW (man 7 packet) が必要です。 add_args --cap-add=NET_RAWで権限をコンテナに渡す事ができますが、
PF_PACKET の利用は細かい操作(普通の通信ではなく、ネットワークスキャンやセキュリティ解析など)にしか使わない認識ですので、もしかしたら AF_INET* でよろしかったのではないかと思って指摘させていただきました。

よろしくお願いします。

太陽誘電 金子です。
対応ありがとうございました。

C言語プログラムをdockerに乗せて動かし、検証しております(指定のマニュアルの通り)
コンテナ起動設定ファイル 「config/app.conf」を修正する旨承知いたしました。
1: ホストのポートをコンテナのポートに渡す。
2: PF_PACKETの場合は、コンテナにCAP_NET_RAW権限を与える
※AF_INET*が必要かは検討余地あり

追加で質問させていただきたく存じます。
 armadillo、センサを同一ハブに有線LANで繋ぎ、データ収集をsocket通信を介して、
 armadilloを使用したいと考えております。

 以前別のエッジコンピュータ(Dockerに乗せて実行の仕組み)で実施した際は、
 Dockerのネットワーク設定をホストネットワークとしてroot権限実行で実施していました。
 Armadillo-IoT A9Eでもホストネットワーク設定、CAP_NET_RAW権限を与えることで正常動作しました。
 今回ArmadilloのDockerネットワーク設定をホストネットワーク設定としましたが、権限範囲は限定する方が望ましいと考えております。
 何か方法についてご教授いただければ幸いです。
 尚、別デバイスと関わる箇所は、他にcurlコマンドによるポスト処理(APIへのPOST処理)です。

お手数おかけしますが、よろしくお願いいたします。

> マルティネです。
> 横からすみません。
>
> > コンテナ起動設定ファイルに以下を記述すると、コンテナにホスト(Armadillo Base OS)のポートを渡すことができます。
> >

> > add_ports <ホストのポート>:<コンテナのポート>/udp
> > 

>
> ちなみにこれは AF_INET/AF_INET6 と SOCK_DGRAM の話です。
>
> >socket(PF_PACKET, DG_RAM, ...)を使用した通信の実現方法
> > SOCK_DGRAMを使用するためにはroot権限が必要と認識しております。
>
> PF_PACKET に CAP_NET_RAW (man 7 packet) が必要です。 add_args --cap-add=NET_RAWで権限をコンテナに渡す事ができますが、
> PF_PACKET の利用は細かい操作(普通の通信ではなく、ネットワークスキャンやセキュリティ解析など)にしか使わない認識ですので、もしかしたら AF_INET* でよろしかったのではないかと思って指摘させていただきました。
>
> よろしくお願いします。

at_satoshi.ohta

2025年8月25日 10時08分

太田です。

申し訳ありません。
状況確認のため2点ほど確認させてください。

> C言語プログラムをdockerに乗せて動かし、検証しております(指定のマニュアルの通り)

Armadillo はデフォルトでは Podman ですが、Docker を Armadillo にインストールして使用しているのでしょうか?

> Armadillo-IoT A9Eでもホストネットワーク設定、CAP_NET_RAW権限を与えることで正常動作しました。

具体的には何のファイルにどのような設定を記述して正常に動作したか教えていただけますか?

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

太陽誘電 金子です。

ご確認ありがとうございます。
確認内容について、回答いたします。お手数おかけしますが、ご確認をお願いいたします。

> Armadillo はデフォルトでは Podman ですが、Docker を Armadillo にインストールして使用しているのでしょうか?
 > 記載内容の誤りです。podmanを使用しております。
  コマンド実行を手動で行ってはおらず、ABOSDEの機能を使っています。
  (App run on armadillo, App stop on Armadillo、Generate development swu、Setup environment等)

> > Armadillo-IoT A9Eでもホストネットワーク設定、CAP_NET_RAW権限を与えることで正常動作しました。
> 具体的には何のファイルにどのような設定を記述して正常に動作したか教えていただけますか?
  →app.confファイルに以下を追加
  add_args --cap-add=NET_RAW
  add_args --network=host

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

> 太田です。
>
> 申し訳ありません。
> 状況確認のため2点ほど確認させてください。
>
> > C言語プログラムをdockerに乗せて動かし、検証しております(指定のマニュアルの通り)
>
> Armadillo はデフォルトでは Podman ですが、Docker を Armadillo にインストールして使用しているのでしょうか?
>
> > Armadillo-IoT A9Eでもホストネットワーク設定、CAP_NET_RAW権限を与えることで正常動作しました。
>
> 具体的には何のファイルにどのような設定を記述して正常に動作したか教えていただけますか?
>
> どうぞよろしくお願いいたします。

at_satoshi.ohta

2025年8月25日 14時21分

太田です。

ご回答ありがとうございます。
ABOSDE をご使用とのことですね。

>  armadillo、センサを同一ハブに有線LANで繋ぎ、データ収集をsocket通信を介して、
> armadilloを使用したいと考えております。
> Armadillo-IoT A9Eでもホストネットワーク設定、CAP_NET_RAW権限を与えることで正常動作しました。
> 今回ArmadilloのDockerネットワーク設定をホストネットワーク設定としましたが、権限範囲は限定する方が望ましいと考えております。
> 尚、別デバイスと関わる箇所は、他にcurlコマンドによるポスト処理(APIへのPOST処理)です。

とのことですが、まずは PF_PACKET で行う必要があるのかご検討いただくのがいいかと思います。
AF_INET* を使用すれば、ホストネットワーク設定とCAP_NET_RAW権限は必要ないため、より権限を狭めることが出来ます。

PF_PACKET が必要な場合はその処理を行う部分のみ別のコンテナに分ける(その場合はプロジェクトをもう一つ作る必要があります)こともご検討頂ければと思います。

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

太陽誘電 金子です。

ご確認ありがとうございました。

社内で、PF_PACKETが必要かどうか判断し、決定したいと考えております。
 AF_INET*で代替可能の場合、特別な権限無しで問題ないはず。
 PF_PACKETが必要な場合、「main処理部」と「PF_PACKETを用いる処理」を別コンテナに分けることを検討
  コンテナごとに権限の設定ができるため、main処理部側での権限を制限できる。

上記の認識で問題ないでしょうか。
以上、よろしくお願いいたします。

> 太田です。
>
> ご回答ありがとうございます。
> ABOSDE をご使用とのことですね。
>
> >  armadillo、センサを同一ハブに有線LANで繋ぎ、データ収集をsocket通信を介して、
> > armadilloを使用したいと考えております。
> > Armadillo-IoT A9Eでもホストネットワーク設定、CAP_NET_RAW権限を与えることで正常動作しました。
> > 今回ArmadilloのDockerネットワーク設定をホストネットワーク設定としましたが、権限範囲は限定する方が望ましいと考えております。
> > 尚、別デバイスと関わる箇所は、他にcurlコマンドによるポスト処理(APIへのPOST処理)です。
>
> とのことですが、まずは PF_PACKET で行う必要があるのかご検討いただくのがいいかと思います。
> AF_INET* を使用すれば、ホストネットワーク設定とCAP_NET_RAW権限は必要ないため、より権限を狭めることが出来ます。
>
> PF_PACKET が必要な場合はその処理を行う部分のみ別のコンテナに分ける(その場合はプロジェクトをもう一つ作る必要があります)こともご検討頂ければと思います。
>
> どうぞよろしくお願いいたします。
>

at_satoshi.ohta

2025年8月25日 17時35分

太田です。

はい。
その認識で問題無いと思います。

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

金子です。

確認ありがとうございます。
お忙しいところご対応いただき、誠にありがとうございました。
引き続き、よろしくお願いいたします。

> 太田です。
>
> はい。
> その認識で問題無いと思います。
>
> どうぞよろしくお願いいたします。