docker 的 usb key 使用问题,实在搞不定了前来请求高人指点 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
GoodRui
V2EX    Docker

docker 的 usb key 使用问题,实在搞不定了前来请求高人指点

  •  
  •   GoodRui 2024-02-27 16:54:41 +08:00 1330 次点击
    这是一个创建于 670 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请问~

    容器内的程序,需要插入 usb key 授权使用,不论宿主机是Ubuntu还是CentOS,都不需要安装驱动什么的,只要读取到 usb key 的信息即可。运行容器的时候只要给与容器privileged权限,并将/dev/bus/usb路径挂载至容器内即可。compose 文件关键部分如下:

    version: '3' services: app: image: app privileged: true volumes: - /dev/bus/usb:/dev/bus/usb 

    如何在不给与容器privileged权限的情况下,使得容器能读取到 usb key 的信息?

    搜了好多信息,问 GPT 和 bing 都把它们问烦了。解决方法都是说使用privileged权限运行容器,或者使用--devices=/dev/tyUSB0这种授予容器访问某个 USB 设备的权限。我看这个--devices的方式应该是 USB 存储之类的设备,挂载了之后能直接/dev/sdb可访问路径。像 usb key 这种设备插上后,都没有/dev/ttyUSB这种路径。

    插上 usb key 后,使用 lsusb -D /dev/bus/usb/001/002是能看到的 usb key 的PIDVID这类信息的。而且看样子/dev/bus/usb/001/这个路径下的 001 002 003 ...应该是对应服务器上的 USB 接口。usb key 也有可能插在不同的接口上。

    还有没有高手,能给指点迷津呢?

    不胜感谢!

    12 条回复    2024-03-01 20:11:38 +08:00
    asilin
        1
    asilin  
       2024-02-27 17:12:34 +08:00   1
    volumes:
    - /dev:/dev

    试试
    0o0O0o0O0o
        2
    0o0O0o0O0o  
       2024-02-27 17:17:41 +08:00 via iPhone   1
    --device-cgroup-rule "c 189:* rmw" -v /dev/bus/usb:/dev/bus/usb

    usb key 不知道,容器内调试 Android 手机用的这个
    GoodRui
        3
    GoodRui  
    OP
       2024-02-28 10:11:26 +08:00
    @asilin 感谢,但是貌似是不行的,只挂载设备目录,没有 privileged 权限,容器内是无权读取物理机的硬件设备的。,我上面给出的 docker compose 文件中就挂载了/dev 目录的子目录,按说和挂载父目录进去是一样的,容器没权限读取这个目录。
    julyclyde
        4
    julyclyde  
       2024-02-28 12:00:48 +08:00
    你这个情况其实不适合用 docker 啊
    “有外部状态”的应用程序

    生成/dev/下面的文件,需要(古代 devfs ) udev (现代 systemd )支持吧?
    你容器里如果是只有应用程序这种瘦的,是不是不太行?
    GoodRui
        5
    GoodRui  
    OP
       2024-02-29 09:46:08 +08:00
    @julyclyde 是制作的服务容器内的一些文件,为了保密做了加密,需要使用 usb key 授权才可以解密正常运行。加解密其实很简单,关键是需要读取到 usb key 的存在就可以正常使用加过密的.so 库文件。
    GoodRui
        6
    GoodRui  
    OP
       2024-02-29 09:50:23 +08:00
    @julyclyde 只要容器内使用未加密的.so 文件,或者使用加密的.so 文件,拉起容器时给与 privileged 权限,然后挂载物理机 usb 设备的设备路径到容器内, /dev/bus/usb:/dev/bus/usb ,也可以正常运行。但是生产环境肯定最好不要给容器 privileged 权限啊,容器内程序本身的运行并不需要用到高权限,只是为了容器内读到 usb key ,所以说这个问题一直搞不定。
    GoodRui
        7
    GoodRui  
    OP
       2024-02-29 09:52:21 +08:00
    @0o0O0o0O0o 请问创建这个 cgroup 规则时,怎么才能知道设备的代码是哪个呢?就是 c 189:* 这部分
    0o0O0o0O0o
        8
    0o0O0o0O0o  
       2024-02-29 10:49:22 +08:00
    @GoodRui #7
    lsusb 看对应的第二和第四列数字例如 003 和 012
    然后 ls -l /dev/bus/usb/003/012 看 user 后面就依次是 major 和 miner
    julyclyde
        9
    julyclyde  
       2024-02-29 11:32:46 +08:00
    @GoodRui so 文件的加密是什么意思?
    GoodRui
        10
    GoodRui  
    OP
       2024-03-01 11:39:34 +08:00
    @julyclyde 就是开发写的 python 程序,里面的很多文件编译成了 so 文件,然后进行了加密。这套程序在系统中直接运行时,只需要插上 usb key 就可以使程序正常运行。如果做成 docker 镜像,需要把物理机的 usb 设备路径挂载到容器内,然后给与容器 privileged 权限,使得容器内也能正常读到这个 usb key 的信息,那容器内使用这些加密的 so 文件就可以正常跑起服务来。
    GoodRui
        11
    GoodRui  
    OP
       2024-03-01 15:13:23 +08:00
    @0o0O0o0O0o 感谢老哥,已经放弃了,加密狗的厂家也没解决,具体不知道什么机制。加了 privileged 就可以正常使用。这个加密狗好像和普通的 usb 设备还不一样,还牵扯到一个授权多环境应用的问题。但是都使用 privileged 起容器就没问题了。
    julyclyde
        12
    julyclyde  
       2024-03-01 20:11:38 +08:00
    @GoodRui 你这个所谓加密其实只是平白无奇啊
    并不涉及到特权

    只是运行需要特权而已
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3449 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 05:04 PVG 13:04 LAX 21:04 JFK 00:04
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86