特定のユーザーグループに SocketCAN へのアクセスを制限します。

特定のユーザーグループに SocketCAN へのアクセスを制限します。

CAN(SocketCANを使用)を介してロボットが接続されたPCがあります。可能であれば、グループを介してロボットにコマンドを送信できる人を制御したいです(つまり、「use_robot」グループのユーザーだけがCANを介して何でも送受信する権限を持っています)。

この目標をどのように達成できますか?私が理解したように、SocketCANはネットワークインターフェースを使用しているので、どのようにiptablesと連携できますか?

ベストアンサー1

可能であれば、グループを介してボットにコマンドを送信できる人を制御したいと思います。

今日はこれを見てみるのに時間を過ごしました。グループメンバーをブロックできます送るnftables ルールセットを使用する CAN インターフェイスへのトラフィックは次のとおりです。

table netdev canfilter {
        chain can1egress {
                type filter hook egress device can1 priority filter; policy accept;
                skgid 1000 counter drop;
        }
}

counter上記のルールセットの内容は必要ありません。出力にパケット数を追加するだけですnft list ruleset。)

これにより、グループ1000のメンバーがインターフェイスを介して送信するのを防ぐことができますcan1cangen can1gid 1000を使用してユーザーとして実行しようとすると、次のようになります。

$ sudo -u testuser cangen can1
write: No buffer space available

ただし、グループに属していないユーザーと同じ操作を実行するとうまく機能します(そしてcandump他のリンクを使用してトラフィックを受信することもできます)。

私はこれがあなたの目標を達成したと思います。


制限することはできないと思います。レセプションuidで次のように生成されたログを表示します。

table netdev canfilter {
        chain can0ingress {
                type filter hook ingress device can0 priority filter; policy accept;
                log group 0;
        }
}

受信側ではuid / gidメタデータにアクセスできないようです(パケットがローカルシステム以外の場所から来ている可能性があるため、これは意味があります)。


cangenこれをテストするためにandcandumpユーティリティを使用しました。can-utilsプロジェクトとulogdCANインターフェイスには分離された名前空間を使用しているため、ロギングに使用します(したがって、一般的なカーネルロギングはオプションではありません)。


テストを簡素化し、すべてをオンラインにしました。ここ

おすすめ記事