V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
KomiSans
V2EX  ›  程序员

关于 fish shell 的一个误操作坑

  •  
  •   KomiSans ·
    KomiSans · 2021-08-29 14:08:30 +08:00 · 4756 次点击
    这是一个创建于 942 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前发现 fish bash 交互做的挺不错的然后打算用段时间,装完了后 chsh 改默认 shell,结果另一个员工把 fish 给卸了导致 root 用户无法进行 SSH 远程登录,后来经过一晚上的折腾进入 centOS 的安全模式后新增用户并赋予管理员权限才缓解过来...,有惊无险的一个 8 月 13 日晚上,主要是当时主机上有 Jira Software 而且开发商务什么的都还在用着

    48 条回复    2021-08-31 01:17:13 +08:00
    also24
        1
    also24  
       2021-08-29 14:11:20 +08:00
    尝试着理解了一下,这里的关键『误操作』是『另一个员工把 fish 给卸了』 是么?
    KomiSans
        2
    KomiSans  
    OP
       2021-08-29 14:12:12 +08:00
    @also24 绑定后卸载
    also24
        3
    also24  
       2021-08-29 14:15:22 +08:00
    @KomiSans #2
    我大致搜索了一下,似乎不需要新增用户,应该只需要进入恢复模式修改 /etc/passwd 就可以。

    参考:
    https://www.logcg.com/archives/3003.html
    KomiSans
        4
    KomiSans  
    OP
       2021-08-29 14:16:35 +08:00
    @also24 当时为了赶快恢复暂时增加了个临时用户并赋予权限
    jdhao
        5
    jdhao  
       2021-08-29 14:17:57 +08:00 via Android   ❤️ 2
    你用 root 用户装的 fish shell? 那的确是作死了
    jdhao
        6
    jdhao  
       2021-08-29 14:18:54 +08:00 via Android
    @jdhao 另外你们都没有权限控制吗?所有用户都用一个 root 登陆?
    KomiSans
        7
    KomiSans  
    OP
       2021-08-29 14:19:02 +08:00
    @jdhao chsh 害人不浅
    KomiSans
        8
    KomiSans  
    OP
       2021-08-29 14:19:39 +08:00
    @jdhao 小公司嘛,不注重这个
    KomiSans
        9
    KomiSans  
    OP
       2021-08-29 14:20:09 +08:00
    @also24 文章不错,受教了
    heyjei
        10
    heyjei  
       2021-08-29 14:22:31 +08:00   ❤️ 3
    你这标题起的不对,这个和 chsh,还有 fish shell 真的没有什么关系,不是 chsh 害人不浅,是 root 敢死队害人不浅。建议标题改成“root 敢死队的误操作坑”
    KomiSans
        11
    KomiSans  
    OP
       2021-08-29 14:23:37 +08:00
    @heyjei 所以就应该和 samba 服务器设置多用户才对
    wangxn
        12
    wangxn  
       2021-08-29 14:35:10 +08:00
    我觉得关键是为啥会把一个公用账户的 default shell 改掉?而且还是 root 。
    fish 魔改了很多东西,别人未必用得惯。
    KomiSans
        13
    KomiSans  
    OP
       2021-08-29 14:36:25 +08:00
    @KomiSans 只能怪我手欠
    ulosggs
        14
    ulosggs  
       2021-08-29 14:36:28 +08:00
    所有人都能用 root. 真牛皮
    KomiSans
        15
    KomiSans  
    OP
       2021-08-29 14:37:31 +08:00
    @ulosggs 毕竟内部测试机,小公司嘛,没啥规范
    shuimugan
        16
    shuimugan  
       2021-08-29 14:53:40 +08:00
    经历过一次类似的,测试机默认 shell 不知道被谁改成了 zsh,然后 ssh 登不上了.幸好跑了一个 portainer,通过 web 界面启动个容器把 /etc 和 /root 挂进去分析出来问题,改好之后就好了.
    KomiSans
        17
    KomiSans  
    OP
       2021-08-29 14:55:23 +08:00
    @shuimugan 所以最好是自己用自己的不要随便绑定默认 shell
    CEBBCAT
        18
    CEBBCAT  
       2021-08-29 14:59:16 +08:00   ❤️ 3
    这跟 fish 毫无关系吧,第一个是猪队友为什么删一个 shell,第二个是为什么改公有账号的 shell,关键是它和 bash 不完全兼容啊

    隔天了还认为原因出在 chsh 上,我只能说你真的需要关注你的睡眠状况了

    相关:fish 用户
    KomiSans
        19
    KomiSans  
    OP
       2021-08-29 15:01:32 +08:00
    @CEBBCAT 本来就不应该绑定的不是么,更何况单用户
    Kobayashi
        20
    Kobayashi  
       2021-08-29 15:07:15 +08:00
    这和 shell 、chsh 有个毛线关系。你们自己操作不规范怪谁。
    KomiSans
        21
    KomiSans  
    OP
       2021-08-29 15:07:48 +08:00
    @Kobayashi 没听懂什么是误操作么
    liaojl
        22
    liaojl  
       2021-08-29 15:26:28 +08:00
    你这标题很容易让人以为是 fish 的坑,实际上这和 fish 一毛钱关系都没有,你换成 zsh 一样会有这个问题。
    KomiSans
        23
    KomiSans  
    OP
       2021-08-29 15:27:06 +08:00
    @liaojl
    KomiSans
        24
    KomiSans  
    OP
       2021-08-29 15:37:21 +08:00
    最可笑的是我的同事认为 fish 是流氓软件...
    ooops
        25
    ooops  
       2021-08-29 15:53:56 +08:00 via Android
    说到底还是楼主的问题。。。给服务器换小众 shell
    KomiSans
        26
    KomiSans  
    OP
       2021-08-29 15:55:25 +08:00
    @ooops 我的锅,也有公司从不分配用户的烂习惯
    hei1000
        27
    hei1000  
       2021-08-29 15:57:47 +08:00 via Android
    @KomiSans #24 很明显,这个同事被招进来才是误操作
    Veneris
        28
    Veneris  
       2021-08-29 16:04:03 +08:00
    不要给 root 用户换 shell,建立自己的用户换
    hxsf
        29
    hxsf  
       2021-08-29 17:21:13 +08:00 via iPhone   ❤️ 2
    ssh xxxx 后面可以接命令的....
    KomiSans
        30
    KomiSans  
    OP
       2021-08-29 17:37:06 +08:00   ❤️ 1
    @hxsf ssh [email protected] -t /bin/bash
    zoharSoul
        31
    zoharSoul  
       2021-08-29 22:55:24 +08:00
    @ooops #25 fish 不算小众吧...
    noyidoit
        32
    noyidoit  
       2021-08-30 02:33:41 +08:00
    @zoharSoul 感觉 bash>>>>zsh>fish
    msg7086
        33
    msg7086  
       2021-08-30 04:30:55 +08:00
    这个是真的不应该,ssh 的时候直接调用 bash 就行了,又不是非得启动默认 Shell 。
    KomiSans
        34
    KomiSans  
    OP
       2021-08-30 06:21:40 +08:00 via Android
    @msg7086 也是,没必要系统里改
    shilianmlxg
        35
    shilianmlxg  
       2021-08-30 08:51:50 +08:00 via iPhone
    @noyidoit 大佬。bash 能装自动补全之类的插件嘛
    Varobjs
        36
    Varobjs  
       2021-08-30 09:27:36 +08:00
    大家一起用的服务器就不要装 fish zsh,各种主题了,
    你习惯不代表别人习惯的。
    justrand
        37
    justrand  
       2021-08-30 10:05:23 +08:00
    我就想问问,线上服务器你们也可以安装 fish OR zsh ?
    snuglove
        38
    snuglove  
       2021-08-30 10:34:31 +08:00
    登录主要是 passwd 文件里边指定的 root 登录 shell,跟卸载不卸载没关系的.
    看你的描述是装了 chsh 没有改成默认 shell 导致的,因为还是默认 fish,卸载之后导致 root 没有默认 shell,所以无法登陆
    boris93
        39
    boris93  
       2021-08-30 10:35:09 +08:00 via iPhone
    @KomiSans #15 一个用于内部测试的机器,上面跑着面向生产的 JIRA ?
    先把 root 敢死队改了,不然迟早出大事。服务器上也老老实实就用 bash,至少别动 root 的 shell,你自己的账号随便玩
    cctrv
        40
    cctrv  
       2021-08-30 11:37:58 +08:00
    沒有 VNC 的連結模式嗎?
    只依賴 SSH 然後把 SSH 弄沒了。也沒 VNC 的話,只能去機房處理了。

    然後各大雲服務器都有一個 VNC 的模式,相當於真實機器的終端。
    KomiSans
        41
    KomiSans  
    OP
       2021-08-30 11:50:21 +08:00
    @cctrv @boris93 受教了
    cmdOptionKana
        42
    cmdOptionKana  
       2021-08-30 13:28:40 +08:00 via Android
    不是大公司小公司的区别,就算自己一个人用,也不该直接用 root
    KomiSans
        43
    KomiSans  
    OP
       2021-08-30 14:54:12 +08:00
    @cmdOptionKana 说白了,多用户就行,root 不 root 无所谓
    tomychen
        44
    tomychen  
       2021-08-30 16:03:37 +08:00
    这个问题关 fish shell 什么事?
    默认的 bash 你的另一个员工给卸了,不也一样会导致这样的问题?
    KomiSans
        45
    KomiSans  
    OP
       2021-08-30 16:32:54 +08:00
    都太爱杠...
    KomiSans
        46
    KomiSans  
    OP
       2021-08-30 16:33:47 +08:00
    @cctrv 话说用 VNC 的话还需要图形化界面什么的,有点占资源
    2i2Re2PLMaDnghL
        47
    2i2Re2PLMaDnghL  
       2021-08-31 01:06:29 +08:00   ❤️ 1
    @KomiSans VNC 不需要图形化界面,可以传递伪终端的。

    1. root 应避免日常使用,并彻底禁止远程登录
    2. 生产服务器安装卸载和配置变更均应进行控制甚至审批(虽然 V2 不少人抱怨这茬)
    3. 包管理器里可以查询这个软件是啥——不要跟我说是直接 rm 的……
    4. ssh 命令可以带命令行,不一定要使用默认 shell

    这里面哪怕少出半个错都搞不出这种事儿。
    2i2Re2PLMaDnghL
        48
    2i2Re2PLMaDnghL  
       2021-08-31 01:17:13 +08:00
    不过说起来,不存在一个 shell 读取本地配置而在远端或其他用户执行的吗?
    我可以在本地配置一堆风骚的配置,包括各种 alias 、fzf 替换 ^R,ESC ESC 会调用 thefuck 之类的
    enter root 之后,所有的操作都是 sudo 执行的
    enter remote_user@remote_host 之后,所有实际操作都是 ssh remote_user@remote_host -t 执行的
    甚至是 pushe pope 这样的
    这样一种将前端(用户界面)和后端(执行器)解耦的 shell,有没有搞头?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2049 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 16:15 · PVG 00:15 · LAX 09:15 · JFK 12:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.