• Linux学习-Linux的账号与群组


    使用者识别码: UID 与 GID

    Linux 主机并不会直接认识 你的“帐号名称”的,他仅认识 ID 啊 (ID 就是一组号码啦)。 由于计算机仅认识 0 与 1,所 以主机对于数字比较有概念的;至于帐号只是为了让人们容易记忆而已。 而你的 ID 与帐号的 对应就在 /etc/passwd 当中。

    每个登陆的使用者至少都会取得两个 ID ,一个是使用者 ID (User ID ,简称 UID)、一个是群组 ID (Group ID ,简称 GID)。

    使用者帐号

    你输入帐号密码后,系统帮你处理了什么

    1. 先找寻/etc/passwd里面是否有你输入的帐号?如果没有则跳出,如果有的话则将该帐号 对应的 UID 与 GID (在 /etc/group 中) 读出来,另外,该帐号的主文件夹与 shell 设置 也一并读出;

    2. 再来则是核对密码表啦!这时Linux会进入/etc/shadow里面找出对应的帐号与UID,然 后核对一下你刚刚输入的密码与里头的密码是否相符?

    3. 如果一切都OK的话,就进入Shell控管的阶段 !

    • /etc/passwd 文件结构

    这个文件的构造是这样的:每一行都代表一个帐号,有几行就代表有几个帐号在你的系统中!里头很多帐号本来就是系统正常运行所必须要的,我们可以简 称他为系统帐号, 例如 bin, daemon, adm, nobody 等等,

    我们先来看一下每个 Linux 系统都会有的第一行,就是 root 这个系统管理员那一行好了, 你 可以明显的看出来,每一行使用“:”分隔开,共有七个咚咚,分别是:

    1. 帐号名称:就是帐号啦!用来提供给对数字不太敏感的人类使用来登陆系统的!需要用 来对应 UID 喔。例如 root 的 UID 对应就是 0 (第三字段);

    2. 密码:早期Unix系统的密码就是放在这字段上!但是因为这个文件的特性是所有的程序都能够读取,这样一来很容易造成密码数据被窃取, 因此后来就将这个字段的密码数据 给他改放到 /etc/shadow 中了。所以这里你会看到一个“ x ”!

    3. UID:这个就是使用者识别码 !通常Linux对于UID有几个限制需要说给您了解一 下:

    id范围 该ID使用特性
    0(系统管理员) 当UID是0时,代表这个账号是"系统管理员"!所以当你要其他的账号名称也具有root的权限时,将该账号的UID改为0即可,这也就时说,一部分系统上面的系统管理员不见得只有root,不过不建议多个账号的UID是0,容易让系统管理员混乱
    1~999 保留给系统使用的ID,其实除了0之外,其他的UID权限与特性并没有不一样。预设1000以下的数字给系统作为保留账号只是一个习惯,由于系统上面启动的网络服务或后台服务希望使用较小的权限去运行。因此不希望使用root的身份去执行这些服务,所以我们就得要提供这些运行中程序的拥有者账号才行。这些账号通常是不可登入,所以才会有/sbin/nologin的存在,根据系统账号的由来。通常这些账号又略微被区分两种:1~200:由 distributions自行建立的系统账号;201~999若使用者有系统账号需求时,可以使用的账号UID
    1000~60000(可登陆账号) 给一般使用者用的。事实上,目前的Linux核心已经可以支援到4294967295 (2^32-1) 这么大的UID号码
    1. GID:这个与/etc/group有关!其实/etc/group的观念与/etc/passwd差不多,只是他是 用来规范群组名称与 GID 的对应而已!

    2. 使用者信息说明栏:这个字段基本上并没有什么重要用途,只是用来解释这个帐号的意 义而已!不过,如果您提供使用 finger 的功能时, 这个字段可以提供很多的讯息呢!本 章后面的 chfn 指令会来解释这里的说明。

    3. 主文件夹:这是使用者的主文件夹,以上面为例,root的主文件夹在/root,所以当 root 登陆之后,就会立刻跑到 /root 目录里头啦!

    4. Shell:默认 shell 会使用 bash 呢?就是在这 个字段指定的 ! 这里比较需要注意的是,有一个 shell 可以用来替代成让帐号无法取得 shell 环境的登陆动作!那就是 /sbin/nologin。这也可以用来制作纯 pop 邮件帐 号者的数据呢!

    • /etc/shadow文件结构

    shadow 同样以“:”作为分隔符号,如果数一数,会发现共有九个字段啊,这九个字段的用途是这样的:

    1. 帐号名称:由于密码也需要与帐号对应啊~因此,这个文件的第一栏就是帐号,必须要 与 /etc/passwd 相同才行!

    2. 密码:这个字段内的数据才是真正的密码,而且是经过编码的密码(加密)啦!你只 会看到有一些特殊符号的字母!另外,由于各种密码编码的技术不一样,因此不同的编码系统会造成这个字段的长度不相同。由于固定的编码系统产生的密码长度必须一 致,因此“当你让这个字段的长度改变后,该密码就会失效(算不出来)”。 很多软件通 过这个功能,在此字段前加上 ! 或 * 改变密码字段长度,就会让密码“暂时失效”了。

    3. 最近更动密码的日期:这个字段记录了“更动密码那一天”的日期,计算 Linux 日期的时间是以 1970 年 1 月 1 日作为 1 而累加的日期,1971 年 1 月 1 日则为 366 啦! 得注意一下这个数据呦!

    4. 密码不可被更动的天数:(与第3字段相比)第四个字段记录了:这个帐号的密码在最 近一次被更改后需要经过几天才可以再被变更!如果是 0 的话, 表示密码随时可以更动 的意思。这的限制是为了怕密码被某些人一改再改而设计的!如果设置为 20 天的话,那 么当你设置了密码之后, 20 天之内都无法改变这个密码呦!

    5. 密码需要重新变更的天数:(与第3字段相比)经常变更密码是个好习惯!为了强制要 求使用者变更密码,这个字段可以指定在最近一次更改密码后, 在多少天数内需要再次 的变更密码才行。你必须要在这个天数内重新设置你的密码,否则这个帐号的密码将 会“变为过期特性”。 而如果像上面的 99999 (计算为 273 年) 的话,那就表示,呵呵, 密码的变更没有强制性之意。

    6. 密码需要变更期限前的警告天数:(与第5字段相比)当帐号的密码有效期限快要到的 时候 (第 5 字段),系统会依据这个字段的设置,发出“警告”言论给这个帐号,提醒 他“再过 n 天你的密码就要过期了,请尽快重新设置你的密码呦!”,

    7. 密码过期后的帐号宽限时间(密码失效日):(与第5字段相比)密码有效日期为“更新 日期(第3字段)”+“重新变更日期(第5字段)”,过了该期限后使用者依旧没有更新密 码,那该密码就算过期了。 虽然密码过期但是该帐号还是可以用来进行其他工作的,包 括登陆系统取得 bash 。不过如果密码过期了, 那当你登陆系统时,系统会强制要求你 必须要重新设置密码才能登陆继续使用喔,这就是密码过期特性。那这个字段的功能是什么呢?是在密码过期几天后,如果使用者还是没有登陆更改密 码,那么这个帐号的密码将会“失效”, 亦即该帐号再也无法使用该密码登陆了。要注意 密码过期与密码失效并不相同。

    8. 帐号失效日期:这个日期跟第三个字段一样,都是使用1970年以来的总日数设置。这 个字段表示: 这个帐号在此字段规定的日期之后,将无法再使用。 就是所谓的“帐号失 效”,此时不论你的密码是否有过期,这个“帐号”都不能再被使用! 这个字段会被使用通 常应该是在“收费服务”的系统中,你可以规定一个日期让该帐号不能再使用啦!

    9. 保留:最后一个字段是保留的,看以后有没有新功能加入。

    在某些情况下面你得要使用各种方法来处理这个文件的!

    • 一般用户的密码忘记了:这个最容易解决,请系统管理员帮忙, 他会重新设置好你的密 码而不需要知道你的旧密码!利用 root 的身份使用 passwd 指令来处理即可。

    • root 密码忘记了: 因此你可以使用各种可行的方法开机进入 Linux 再去修改。 例如重新开机进入单人维护模式后,系统会主动的给 root 权限的 bash 接口, 此时再以 passwd 修改密码即可;或以 Live CD 开机后挂载根目录去修改 /etc/shadow,将里面的 root 的密码字段清空, 再重新开机后 root 将不用密码即可登 陆!登陆后再赶快以 passwd 指令去设置 root 密码即可。

    关于群组: 有效与初始群组、groups, newgrp

    • /etc/group 文件结构

    这个文件每一行代表一个群组,也是以冒号:作为字段的分隔符,共分为四栏,每一字段的意义是:

    1. 组名:就是组名啦!同样用来给人类使用的,基本上需要与第三字段的 GID 对应

    2. 群组密码:通常不需要设定,这个设定通常是给群组管理员使用的,目前很少有这个机会设定群组管理员! 同样的,密码已经移动到 /etc/gshadow 去,因此这个字段只会存在一个x而已;

    3. GID:就是群组的 ID 啊。我们 /etc/passwd 第四个字段使用的 GID 对应的群组名,就是由这里对应出来的!

    4. 此群组支持的账号名称:我们知道一个账号可以加入多个群组,那某个账号想要加入此群组时,将该账号填入这个字段即可。

    输入图片说明

    请注意,新版的 Linux 中,初始群组的用户群已经不会加入在第四个字段!

    • 有效群组(effective group)与初始群组(initial group)

    还记得每个使用者在他的 /etc/passwd 里面的第四栏有所谓的 GID 吧?那个 GID 就是所谓的『初 始群组 (initial group) 』!也就是说,当用户一登入系统,立刻就拥有这个群组的相关权限的意思。举 例来说,我们上面提到 dmtsai 这个使用者的 /etc/passwd 与 /etc/group 还有 /etc/gshadow 相关的内容如下:

    [root@study ~]# usermod -a -G users dmtsai <==先设定好次要群组
    [root@study ~]# grep dmtsai /etc/passwd /etc/group /etc/gshadow /etc/passwd:dmtsai:x:1000:1000:dmtsai:/home/dmtsai:/bin/bash
    /etc/group:wheel:x:10:dmtsai <==次要群组的设定、安装时指定的
    /etc/group:users:x:100:dmtsai <==次要群组的设定
    /etc/group:dmtsai:x:1000: <==因为是初始群组,所以第四字段不需要填入账号
    /etc/gshadow:wheel:::dmtsai <==次要群组的设定
    /etc/gshadow:users:::dmtsai <==次要群组的设定
    /etc/gshadow:dmtsai:!!::
    

    仔细看到上面这个表格,在 /etc/passwd 里面,dmtsai 这个使用者所属的群组为 GID=1000 ,搜寻 一下 /etc/group 得到 1000 是那个名为 dmtsai 的群组啦!这就是 initial group。因为是初始群组, 使 用者一登入就会主动取得,不需要在 /etc/group 的第四个字段写入该账号的!

    但是非 initial group 的其他群组可就不同了。举上面这个例子来说,我将 dmtsai 加入 users 这个群 组当中,由于 users 这个群组并非是 dmtsai 的初始群组,因此, 我必须要在 /etc/group 这个文件中,找到 users 那一行,并且将 dmtsai 这个账号加入第四栏, 这样 dmtsai 才能够加入 users 这个群组。

    如果今天我要建立一个新的文件或者是新的目录,请问一下,新文件的群组是 dmtsai, wheel 还是 users ?这就得要检查一下当时的有效群组了 (effective group)。

    • groups: 有效与支持群组的观察

    如果我以 dmtsai 这个使用者的身份登入后,该如何知道我所有支持的群组呢? 很简单啊,直接输
    入 groups 就可以了!注意喔,是 groups 有加 s 呢!结果像这样

    [dmtsai@study ~]$ groups
    dmtsai wheel users
    

    在这个输出的讯息中,可知道 dmtsai 这个用户同时属于 dmtsai, wheel 及 users 这三个群组,而 且,第一个输出的群组即为有效群组 (effective group) 了。 也就是说,我的有效群组为 dmtsai。此时,如果我以 touch 去建立一个新档,例如:『 touch test 』,那么这个文件的拥有者为 dmtsai,而且群组也是 dmtsai 。

    • newgrp: 有效群组的切换

    那么如何变更有效群组呢?就使用 newgrp 啊!不过使用 newgrp 是有限制的,那就是你想要切换的 群组必须是你已经有支持的群组。举例来说, dmtsai 可以在 dmtsai/wheel/users 这三个群组间切换 有效群组,但是 dmtsai 无法切换有效群组成为 sshd 啦!使用的方式如下:

    [dmtsai@study ~]$ newgrp users
    [dmtsai@study ~]$ groups
    users wheel dmtsai
    [dmtsai@study ~]$ touch test2
    [dmtsai@study ~]$ ll test*
    -rw-rw-r--. 1 dmtsai dmtsai 0 Jul 20 19:54 test
    -rw-r--r--. 1 dmtsai users 0 Jul 20 19:56 test2 
    [dmtsai@study ~]$ exit # 注意!记得离开 newgrp 的环境喔!
    

    此时,dmtsai 的有效群组就成为 users 了。我们额外的来讨论一下 newgrp 这个指令,这个指令可 以变更目前用户的有效群组, 而且是另外以一个 shell 来提供这个功能,所以,以上面的例子来说,dmtsai 这个使用者目前是以另一个 shell 登入的,而且新的 shell 给予 dmtsai 有效 GID 为 users 就是了。如果以图示来看就是如下所示:

    输入图片说明

    你要加入一个群组有两个方式,一个是透过系统管理员 (root) 利用 usermod 帮你加入,如果 root 太忙了而且你的系统有设定群组管理员,那么你可以透过 群组管理员以 gpasswd 帮你加入他所管理的群组中。

    • /etc/gshadow

    这个文件内同样还是使用冒号『:』来作为字段的分隔字符,而且你会发现,这个文件几乎与 /etc/group 一模一样。这四个字段的意义为:

    1. 组名

    2. 密码栏,同样的,开头为 ! 表示无合法密码,所以无群组管理员

    3. 群组管理员的账号 (相关信息在 gpasswd 中介绍)

    4. 有加入该群组支持的所属账号 (与 /etc/group 内容相同!)

    这个 gshadow 最大的功能就是建立群组管理员啦!

  • 相关阅读:
    基于注解的ssh框架之spring配置文件
    hdu 4770 Lights Against Dudely
    便捷开发工具(未完)
    solr 简单搭建 数据库数据同步(待续)
    Nginx对某个文件夹或整个站点进行登录认证的方法
    swift 单例模式
    POJ 2823 Sliding Window(单调队列)
    Android 网络下载图片
    一个表空间offline后alert日志报ORA-01135 和ORA-01110的问题
    [c#]分析器错误消息: 发现不明白的匹配。
  • 原文地址:https://www.cnblogs.com/uetucci/p/7715474.html
Copyright © 2020-2023  润新知