V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jurassic2long
V2EX  ›  问与答

ssh 的私钥就放在~/.ssh 下,不是很容易泄露吗,什么软件都能去读,为什么说比密码安全?

  •  
  •   jurassic2long · 2022-08-19 10:48:55 +08:00 · 7248 次点击
    这是一个创建于 829 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,题主对网络攻防完全外行,只是从日常使用中感觉是这样。

    45 条回复    2024-03-11 19:15:28 +08:00
    gtgc2005
        1
    gtgc2005  
       2022-08-19 10:52:03 +08:00
    日常不建议用 root 用户操作,非 root 权限无法操作 /root 目录
    haozi1986
        2
    haozi1986  
       2022-08-19 10:52:52 +08:00
    难道你没设置文件权限?……
    jurassic2long
        3
    jurassic2long  
    OP
       2022-08-19 10:58:04 +08:00
    @gtgc2005
    @haozi1986
    不用 root ,有权限,但是用户自身的账号权限也能读取呀;
    还有 Windows 系统的情况,很多时候好像自带管理员权限,user 文件夹随便访问。
    leavic
        4
    leavic  
       2022-08-19 11:02:56 +08:00
    安全的是可以防止弱密码,如果 key 随便丢,那和用 123456 做密码一样。
    jurassic2long
        5
    jurassic2long  
    OP
       2022-08-19 11:04:39 +08:00
    @leavic 不是随便丢,就是再它原来的位置,只是觉得什么软件都能去读它。
    liuxey
        6
    liuxey  
       2022-08-19 11:06:11 +08:00
    是这样子的,自从给.ssh 文件夹上了监控,发现不少软件会读这个文件夹。
    zhzy0077
        7
    zhzy0077  
       2022-08-19 11:06:26 +08:00
    1. 私钥是可以上密码的
    2. 密码验证会被中间人,密钥不会
    3. 2048 bit 的 RSA 密钥*大概*相当于 log64(2^2048) = 341 长度的随机密码
    jurassic2long
        8
    jurassic2long  
    OP
       2022-08-19 11:08:18 +08:00
    如果我是攻击者,我会写个有点用又看起来人畜无害的小程序,然后悄悄去扫~/.ssh

    再进一步说,xshell 、putty 等类似的软件是不是掌握了巨量的密码、密钥,想想就不太安全
    yfugibr
        9
    yfugibr  
       2022-08-19 11:08:21 +08:00 via Android   ❤️ 4
    ssh 密钥是可以设置密码也推荐设置密码的。
    我理解 ssh 密钥是为了增强安全性(防止直接爆破服务器),而不是简化操作(无密码登录,如果可以保证本地设备安全的话,确实可以这么干)
    jurassic2long
        10
    jurassic2long  
    OP
       2022-08-19 11:10:01 +08:00
    @zhzy0077 确实,我一直用无密码的密钥,都忘记可以上密码这茬了,感觉这个习惯不好。。
    jurassic2long
        11
    jurassic2long  
    OP
       2022-08-19 11:10:41 +08:00
    @yfugibr 嗯嗯 这么理解感觉就通顺了
    singerll
        12
    singerll  
       2022-08-19 11:21:19 +08:00 via Android
    说他安全主要是说的服务端,没说客户端比较安全。
    gtgc2005
        13
    gtgc2005  
       2022-08-19 11:21:31 +08:00
    @zhzy0077 学习了
    Felldeadbird
        14
    Felldeadbird  
       2022-08-19 11:57:00 +08:00
    我认为这么理解。
    1. 你有私钥,你登录目标服务器,只有你可以登录。

    2.你登录后,在服务器乱装软件,软件权限还给得很高。软件把服务器 IP 和~/.ssh 的密钥搞下来了。

    3. 你私钥泄露了。任何人都可以访问了。
    momocraft
        15
    momocraft  
       2022-08-19 12:13:34 +08:00
    不要执行你不相信的软件
    AoEiuV020CN
        16
    AoEiuV020CN  
       2022-08-19 12:21:48 +08:00
    正常.ssh 放的不是当前 linux 的登录私钥,
    linux 桌面用户少,.ssh 存放了服务器私钥的 linux 桌面用户更少,在这基础上还乱运行闭源未知软件的用户就更更少了,
    楼主说的确实有可能,但考虑用户量,就算真有人开发针对这些人病毒木马,感觉也未必能收回成本,
    wtsamuel
        17
    wtsamuel  
       2022-08-19 12:30:20 +08:00
    你不信任的软件就应该丢进虚拟机里
    estk
        18
    estk  
       2022-08-19 12:49:35 +08:00
    任意路径不都是强制 chmod 600 才允许使用吗?
    luxor
        19
    luxor  
       2022-08-19 12:58:46 +08:00
    authorized_keys 是公钥
    nightwitch
        20
    nightwitch  
       2022-08-19 13:04:49 +08:00
    服务端~/.ssh 不会放私钥,只会放公钥。

    如果你说的是自己桌面端~/.ssh 的私钥,ssh 提供加密的功能。
    q1angch0u
        21
    q1angch0u  
       2022-08-19 13:04:50 +08:00
    authorized_keys 放的是可以用来登录的私钥对应的公钥,泄漏其实也无妨,况且目录和文件都是 0600 权限的
    tool2d
        22
    tool2d  
       2022-08-19 13:11:22 +08:00
    “不用 root ,有权限,但是用户自身的账号权限也能读取呀;”

    我看了一眼服务器,并不是。
    .ssh 目录默认只能 root 用户自己读取,除非你改过授权了。
    heyjei
        23
    heyjei  
       2022-08-19 13:14:19 +08:00
    @jurassic2long 是的,很早之前百度有一个软件中心,专门提供各种软件的下载,就和 360 软件库一样。然后他里面的 Putty 就被加了木马,所有使用过这个版本 putty 的用户,登陆信息全被上传到一个服务器。

    事发后,rj.baidu.com 这个域名直接被取消解析。百度软件中心这个产品一夜之间被砍。
    ospider
        24
    ospider  
       2022-08-19 13:15:38 +08:00
    前两天不是刚有个讨论 chrome 在本地明文存储密码的?本地明文才是常态啊……
    xzysaber
        25
    xzysaber  
       2022-08-19 13:16:35 +08:00
    你确定那是私钥吗?
    felixcode
        26
    felixcode  
       2022-08-19 13:23:32 +08:00 via Android
    你不知道 chmod 600 设置权限吗?
    dcsuibian
        27
    dcsuibian  
       2022-08-19 13:28:51 +08:00
    mangoDB
        28
    mangoDB  
       2022-08-19 13:47:50 +08:00
    目录权限
    forbreak
        29
    forbreak  
       2022-08-19 14:01:25 +08:00
    你.ssh 目录都被人 copy 走了。那你还谈什么安全? 安全是防中间过程。
    yohn89
        30
    yohn89  
       2022-08-19 14:27:50 +08:00
    你把车钥匙锁在你家保险箱里面,你的保险箱被小偷进来偷走了,然后你说车钥匙不安全?
    duanxianze
        31
    duanxianze  
       2022-08-19 14:40:07 +08:00
    你对安全的理解有错误,能接触到物理实机的情况下大多数安全措施都没意义了,防的是网络攻击
    nu11ptr
        32
    nu11ptr  
       2022-08-19 15:26:20 +08:00
    ~/.ssh 下的私钥如果不是 600 权限,会报错
    确实相同用户权限就能访问,最好在创建密钥时额外设置密码
    ch2
        33
    ch2  
       2022-08-19 17:00:17 +08:00
    有了你的私钥,知道你这个私钥能在哪用吗
    bleaker
        34
    bleaker  
       2022-08-19 17:03:22 +08:00
    黑客知道了我的私钥,可以 ssh 到我电脑上帮我修 bug 吗。。
    halberd
        35
    halberd  
       2022-08-19 18:15:13 +08:00
    私钥加 passphrase
    如果嫌每次都要输 passphrase 麻烦,可以用 ssh-agent 记住密码,这样唯一风险在于被读 ssh-agent 的内存,但那就需要 root 权限了。
    GHvyuR7N
        36
    GHvyuR7N  
       2022-08-19 18:21:37 +08:00 via iPhone
    密钥登录普通账户,想 sudo 提权老老实实输入密码...
    wonderfulcxm
        37
    wonderfulcxm  
       2022-08-19 18:24:00 +08:00 via iPhone
    安全是相对的,跟别的普通文件区别不过是权限限定 600 ,只能保证其他用户无法读写,无法保证以你身份执行应用的扫描。
    不过 mac 好像有个功能,应用要读写某个目录,会弹出一个提示问是否允许。
    theChampion
        38
    theChampion  
       2022-08-19 18:25:27 +08:00
    不安全,user 用户安装的软件,绝大多数的所有者都是 user 本身,这意味着软件想要访问家目录下的.ssh 文件夹不会有任何权限问题。所以私钥一定要设置密码,并且不要运行来历不明的软件。
    fuzzsh
        39
    fuzzsh  
       2022-08-19 19:01:33 +08:00 via Android
    DAC 限制不到,要上 MAC 级别的功能
    可以买商业解决方案
    也可以用 NSA 开发及众多组织和个人参与贡献在 kernel 的 selinux 🌚

    我为什么要强调 NSA ?因为遇到很多一听到这个缩写都是闻风丧胆,需求立马砍掉或购买商业解决方案


    selinux 建议吃透概念并自行配置,CTRL C V 大概率会导致服务器失联
    panzhc
        40
    panzhc  
       2022-08-20 10:53:47 +08:00
    很多人都没有看懂 OP 的问题,其实我也一直有一样的担心,目前想到的办法也就是:
    1. 给密钥加密码;
    2. 服务器 2FA ;
    3. 目前主要用 Linux 办公,常用软件都是开源的,没有 XX ,涉及到各种 IM 软件都在 Mac 上;
    4. 做个虚拟机或者其他机器当作跳板,key 放在跳板上。
    panzhc
        41
    panzhc  
       2022-08-20 10:56:25 +08:00
    另外,有段时间还给服务器设置了登录通知,也可以记录到数据库,但是通知太多就没怎么看了。
    endle
        42
    endle  
       2022-08-21 04:05:26 +08:00   ❤️ 2
    在讨论安全的时候,是要有一些假设的。把私钥存储在 ~/.ssh 下,要假设本机是安全的。

    如果你怀疑你当前使用的机器已经被挂了木马或是恶意软件,~/.ssh 被未经你允许的软件读取了,那无论是用密码还是密钥对登录,都是不安全的行为。
    julyclyde
        43
    julyclyde  
       2022-08-22 13:41:28 +08:00
    能读.ssh 目录的程序,不是以你自己的身份,就是以更高的 root 身份运行的
    谁运行谁负责
    justaname
        44
    justaname  
       2023-01-03 17:29:01 +08:00
    @panzhc 感觉强密码就够了吧,让 ssh-agent 记住密码的话也只需要输入一次,普通程序能读取 ssh-agent 的内部信息的话整个安全体系就已经形同虚设了吧
    liuidetmks
        45
    liuidetmks  
       259 天前
    @justaname 普通程序就是能读取 ssh-agent 啊, 不然 git 是怎么读取的,用 gpt 问了下,直接就能遍历私钥,只是比读取文件稍微多了一些代码

    // 遍历私钥
    LIBSSH2_AGENT_PUBLICKEY* identity;
    while ((identity = libssh2_agent_get_identity(identities, 0)) != NULL) {
    // 在这里可以使用 identity 中的信息,如 identity->comment 和 identity->blob
    // 例如,你可以打印私钥的注释信息
    printf("Private Key Comment: %s\n", identity->comment);
    }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1797 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:38 · PVG 00:38 · LAX 08:38 · JFK 11:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.