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

Linux 中保存用户账号的文件是/etc/passwd,保存密码的却是/etc/shadow,没人觉得奇怪么? passwd 不是 password 么,应该保存密码呀!谁来解释解释~~

  •  
  •   Mark24 · 2015-12-10 16:15:30 +08:00 · 5070 次点击
    这是一个创建于 3300 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题
    强迫症……谁能给个解释

    29 条回复    2015-12-12 14:54:01 +08:00
    bsns
        1
    bsns  
       2015-12-10 16:22:28 +08:00
    账号别人看见无所谓,密码难道要所有人都可见?
    passwd 下的是加密过的,真正的密码放在 shadow 下。
    这个问题有点像————“元顺帝为什么叫“顺帝”,没人觉得奇怪吗?”
    sun1991
        2
    sun1991  
       2015-12-10 16:31:54 +08:00   ❤️ 2
    历史原因. 很早以前 password 确实是保存在 passwd 的, 后来安全原因, 改了.
    dot
        3
    dot  
       2015-12-10 16:42:02 +08:00
    如果是明文密码,那么密码与用户 ID 等信息是存储在 passwd 里面的, shadow 里面是加密过的密码……
    ryd994
        4
    ryd994  
       2015-12-10 16:50:39 +08:00 via Android
    以前大家觉得密码加密过,放 passwd 也安全
    后来世道变了……
    话说你为什么不问问神奇海绵, shadow 的历史呢?
    gamexg
        5
    gamexg  
       2015-12-10 16:51:13 +08:00 via Android   ❤️ 1
    一些操作要求获得用户 id 、名称等信息,所以 passwd 谁都有权限读取。当时加密后的密码也在里面,造成可以暴力破解。之后决定单独弄一个文件存放密码,只有 root 能访问。
    mzer0
        6
    mzer0  
       2015-12-10 16:52:11 +08:00 via iPhone
    passwd 里面没密码吗?那串 ANSI 是什么?
    Mark24
        7
    Mark24  
    OP
       2015-12-10 17:51:33 +08:00 via Android
    @mzer0 passwd 密码位只有一个 x ,密码在 shadow 里
    mzer0
        8
    mzer0  
       2015-12-10 18:21:34 +08:00 via iPhone
    @Mark24 但我可以在 passwd 里见到一串 ANSI 串(就是 Aa6BkIGGJK0 这样的)
    wsy2220
        9
    wsy2220  
       2015-12-10 18:55:54 +08:00 via Android
    早期的 unix 是明文放在 passwd 里
    sunjourney
        10
    sunjourney  
       2015-12-10 19:18:37 +08:00
    以前是放 passwd 里的并且明文,后来换 shadow 并加密了
    Comphuse
        11
    Comphuse  
       2015-12-10 19:36:37 +08:00
    @mzer0 给个 uname -a 和 cat /etc/*release 输出?
    mzer0
        12
    mzer0  
       2015-12-10 20:00:12 +08:00 via iPhone
    @Comphuse 不在电脑前。 Linode & CentOS7
    sinxccc
        13
    sinxccc  
       2015-12-10 21:33:57 +08:00 via iPhone
    很早的时候把机器的 /etc/passwd 抓下来用 John the ripper 跑一夜就能把密码跑出来…
    inmyfree
        14
    inmyfree  
       2015-12-10 21:49:28 +08:00
    @sinxccc 现在呢?有办法吗
    msg7086
        15
    msg7086  
       2015-12-10 21:50:35 +08:00
    @inmyfree 现在密码只有 root 才能读。
    wtbhk
        16
    wtbhk  
       2015-12-10 22:27:52 +08:00
    二楼是正解。原来的 passwd 是保存密码的,后来莓保存了。
    wtbhk
        17
    wtbhk  
       2015-12-10 22:28:06 +08:00
    @wtbhk 莓->没(fix
    dndx
        18
    dndx  
       2015-12-11 05:01:38 +08:00   ❤️ 1
    因为 passwd 是所有人可读的,后来为了安全起见就把哈希存在只有 root 可读的 shadow 了。
    cheng007
        19
    cheng007  
       2015-12-11 09:17:04 +08:00
    历史原因啦,你要是看一下以前的攻击 linux 获得主机账号密码的攻击方式,你就能明白,为嘛不能按照你想的干了
    Mark24
        20
    Mark24  
    OP
       2015-12-11 09:17:30 +08:00
    @dndx 明白了~
    @all 谢谢大家的耐心解答!
    Comphuse
        21
    Comphuse  
       2015-12-11 09:18:19 +08:00
    uname -a
    cat /etc/*release
    rpm -Vv shadow-utils
    用的定制过的系统模板?运行过网上别人提供的脚本?用过第三方软件源?照着各种教程文章改过系统什么地方?
    Comphuse
        22
    Comphuse  
       2015-12-11 09:18:38 +08:00
    @mzer0 uname -a
    cat /etc/*release
    rpm -Vv shadow-utils
    用的定制过的系统模板?运行过网上别人提供的脚本?用过第三方软件源?照着各种教程文章改过系统什么地方?
    Comphuse
        23
    Comphuse  
       2015-12-11 09:19:10 +08:00
    没 @ 到,回复错了。
    Comphuse
        24
    Comphuse  
       2015-12-11 09:21:43 +08:00
    @mzer0 /etc/login.defs 也贴出来。
    julyclyde
        25
    julyclyde  
       2015-12-11 21:28:38 +08:00
    shadowsuite 软件包里有个命令可以弄回来
    mzer0
        26
    mzer0  
       2015-12-11 22:45:44 +08:00
    @Comphuse

    感谢. 但我记错了, 我说的字符串应该是之前使用 cygwin 的时候看到的...... 不过我还是有一些问题, 希望你不吝赐教, 谢谢.

    Step 1. 新建一个用户 testuser, 密码为 v2exdiscuss, 我可以在 /etc/passwd 里找到:

    testuser:x:1001:1001::/home/testuser:/bin/bash


    Step 2. 我可以在 /etc/shadow 里找到:

    testuser:$6$m76FBSOe$jvvb1T7kwCRof//Gyqd8UD7Y03J5/rFXdZeF/BSsCB0weQJrsENaRSOqQjoNrWpbCobEq5rBJ.jZyrzD63xBt1:16780:0:99999:7:::

    Question 1. 在 Step 1.和 Step 2.中显示的内容, 分别有什么含义? '$', ':', '.'代表什么? (字符'$',
    ':', '.'不属于 ANSI, 因此不会是编码的一部分). 似乎和 PAM 有关?

    -------------------------------------------------------------------------------

    Question 2. 在 /etc/passwd 中还可以找到许多内容, 例如

    1) bin:x:1:1:bin:/bin:/sbin/nologin
    2) sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

    为什么这些内容会与用户信息放在一起? 他们有什么含义?

    --------------------------------------------------------------------------------

    Question 3. 在 /etc/shadow 中还可以找到许多内容, 例如

    1) bin:*:16231:0:99999:7:::
    2) sshd:!!:16258::::::

    这些内容和 Question 2.中的内容是成对的, 如果不是密码, 他们有什么意义吗?

    --------------------------------------------------------------------------------

    我没用过 shadow-utils, 不太清楚它的用处......

    --------------------------------------------------------------------------------

    $ uname -r

    4.1.5-x86_64-linode61

    $ cat /etc/*release

    CentOS Linux release 7.1.1503 (Core)
    NAME="CentOS Linux"
    VERSION="7 (Core)"
    ID="centos"
    ID_LIKE="rhel fedora"
    VERSION_ID="7"
    PRETTY_NAME="CentOS Linux 7 (Core)"
    ANSI_COLOR="0;31"
    CPE_NAME="cpe:/o:centos:centos:7"
    HOME_URL="https://www.centos.org/"
    BUG_REPORT_URL="https://bugs.centos.org/"

    CENTOS_MANTISBT_PROJECT="CentOS-7"
    CENTOS_MANTISBT_PROJECT_VERSION="7"
    REDHAT_SUPPORT_PRODUCT="centos"
    REDHAT_SUPPORT_PRODUCT_VERSION="7"

    CentOS Linux release 7.1.1503 (Core)
    CentOS Linux release 7.1.1503 (Core)
    mzer0
        27
    mzer0  
       2015-12-11 23:02:30 +08:00
    @Comphuse 我用 lastlog 看了一下, bin 也是 CentOS 的用户之一???
    julyclyde
        29
    julyclyde  
       2015-12-12 14:54:01 +08:00
    这些问题太基础,去看文档吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   945 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:45 · PVG 06:45 · LAX 14:45 · JFK 17:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.