怎么禁止直接调用命令,但是脚本中可以使用? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nyxsonsleep
V2EX    问与答

怎么禁止直接调用命令,但是脚本中可以使用?

  •  
  •   nyxsonsleep 2024-09-26 15:54:19 +08:00 1410 次点击
    这是一个创建于 381 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如 rm 这个命令禁止在 console 中直接调用 rm tmp ,但是如果在 test.sh 中存在 rm tmp 不影响其功能。

    18 条回复    2024-09-27 10:04:29 +08:00
    la2la
        1
    la2la  
       2024-09-26 16:15:00 +08:00
    有个想法,指定专门执行 sh 的 user 有 rm 权限,其他 user 没有
    nyxsonsleep
        2
    nyxsonsleep  
    OP
       2024-09-26 16:20:28 +08:00
    不方便吧,脚本里面如果既有创建又有删除。
    创建的文件的所有者会到处都搞乱了。
    nyxsonsleep
        3
    nyxsonsleep  
    OP
       2024-09-26 16:20:46 +08:00
    @la2la #1 不方便吧,脚本里面如果既有创建又有删除。
    创建的文件的所有者会到处都搞乱了。
    wheeler
        4
    wheeler  
       2024-09-26 16:50:20 +08:00 via iPhone
    ebpf uprobe 拦截 bash readline
    shadowyue
        5
    shadowyue  
       2024-09-26 16:54:39 +08:00
    这种问题麻烦请说你的原始需求,你分析过后的二次需求很可能有偏差
    KagurazakaNyaa
        6
    KagurazakaNyaa  
       2024-09-26 16:57:47 +08:00
    也许可以试试用 polkit 进行限制
    fgwmlhdkkkw
        7
    fgwmlhdkkkw  
       2024-09-26 16:58:54 +08:00
    你自己实现一个 shell 就行……
    duanxianze
        8
    duanxianze  
       2024-09-26 17:18:20 +08:00
    你把 rm 重命名一下就行,改一下只有你知道的名字,然后在你的脚本里调用
    nyxsonsleep
        9
    nyxsonsleep  
    OP
       2024-09-26 17:25:59 +08:00
    @shadowyue #5 这个就是原始需求,禁止某些不安全的命令在用户手里直接调用。但是在脚本中不要阻塞。
    shadowyue
        10
    shadowyue  
       2024-09-26 17:42:27 +08:00
    #9
    我觉得你找个需求还是能继续往上追溯根本诉求是啥?

    因为看起来,你所说的用户能在 console 中执行命令,同时你认为在命令行执行 rm 不安全。
    那么你的用户能自己编写脚本吗?
    如果能,那用户自己写一个 test.sh 在里边执行 rm 不就可以了?
    如果用户不能自己编写脚本,我不认为一个连 rm 这么简单脚本都搞不定的用户会去随意执行 rm 命令。
    如果用户能查看脚本但是不能编辑,那按上面其他人提到的方案,看你一下的脚本不就知道你的花招具体怎么搞的了?
    知道你的花招实现,就总有办法去破解了。
    nyxsonsleep
        11
    nyxsonsleep  
    OP
       2024-09-26 17:54:33 +08:00
    已解决。添加到 rc 文件即可。
    alias rm='echo "The 'rm' command is disabled."'
    if [ -z "$PS1" ]; then
    unalias rm
    fi

    这个方法是存在一点缺陷的,但是对我来说已经够用了,echo 可以接收参数来执行命令,(这下注入攻击了 \doge
    可以将上述中的 echo 替换为一个脚本,这个脚本单独忽略参数即可。
    另外还可以检测环境变量,交互式 shell 中和脚本中的环境变量是不完全相同的。
    nyxsonsleep
        12
    nyxsonsleep  
    OP
       2024-09-26 17:58:21 +08:00
    @fgwmlhdkkkw #7
    这样的答案确实让人耳目一新,仿佛在说:“如果你想要解决一个小问题,那就制造一个更大的工程来解决它!”真是太有启发性了!
    nyxsonsleep
        13
    nyxsonsleep  
    OP
       2024-09-26 17:58:52 +08:00
    @duanxianze #8 如果从外部下载的脚本如何执行呢?
    duanxianze
        14
    duanxianze  
       2024-09-26 18:34:10 +08:00
    @nyxsonsleep 外部下载的?如果只是 rm ,那添加特定权限就好了,如果你是想安全执行外部脚本,那你应该考虑虚拟化方案
    zihuyishi
        15
    zihuyishi  
       2024-09-26 18:46:00 +08:00
    @nyxsonsleep 这不是掩耳盗铃么...
    nyxsonsleep
        16
    nyxsonsleep  
    OP
       2024-09-26 19:45:49 +08:00
    @zihuyishi #15 不审题做什么都是错的。
    churchmice
        17
    churchmice  
       2024-09-27 07:24:49 +08:00 via Android
    你直接给 rm 包个 wrapper ,真正的 rm 叫做 rm.real
    wrapper 里面根据$- 变量判断当前的执行环境是否是 interactive mode,也就是用户直接在 console 执行
    用 rm alias 的坏处是好多脚本里面会直接用\rm bypass 你的 alias
    nyxsonsleep
        18
    nyxsonsleep  
    OP
       2024-09-27 10:04:29 +08:00
    @churchmice #17 > 用 rm alias 的坏处是好多脚本里面会直接用\rm bypass 你的 alias

    怎么理解这句话?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5560 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 07:27 PVG 15:27 LAX 00:27 JFK 03:27
    Do have faith in what you're doing.
    ubao 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