• 请不要在回答技术问题时复制粘贴 AI 生成的内容
KomiSans
V2EX  ›  程序员

关于 fish shell 的一个误操作坑

  •  
  •   KomiSans ·
    KomiSans · Aug 29, 2021 · 6159 views
    This topic created in 1899 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

    这里面哪怕少出半个错都搞不出这种事儿。
    2i2Re2PLMaDnghL
    2i2Re2PLMaDnghL
    Aug 31, 2021
    48
    不过说起来,不存在一个 shell 读取本地配置而在远端或其他用户执行的吗?
    我可以在本地配置一堆风骚的配置,包括各种 alias 、fzf 替换 ^R,ESC ESC 会调用 thefuck 之类的
    enter root 之后,所有的操作都是 sudo 执行的
    enter remote_user@remote_host 之后,所有实际操作都是 ssh remote_user@remote_host -t 执行的
    甚至是 pushe pope 这样的
    这样一种将前端(用户界面)和后端(执行器)解耦的 shell,有没有搞头?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2174 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 62ms · UTC 00:27 · PVG 08:27 · LAX 16:27 · JFK 19:27
    ♥ Do have faith in what you're doing.