摘要:这一篇足够你快速了解 Linux 用户与用户组、用户管理操作等知识。
欢迎关注这个啥都要懂一点的男人:
知乎 ——> 多面手程序员
微信公众号 ——> 多面手程序员
如果觉得这篇文章还不错,还请不吝点赞~
知乎原文链接:一篇读懂Linux用户管理与操作
目录
- Linux 是多用户系统
- 用户与用户组的概念
- 文件所有者
- 用户组成员
- 其他人
- 具体例子
- 0号用户—— root
- 用户与用户组在 Linux 中的记录
- Linux 用户账号管理
- 新增、修改、删除用户
- 新增、修改、删除用户组
- 用户身份切换
- 查询用户信息
一、Linux 是多用户系统
我们知道,任何操作系统都存在 “用户的概念” ,Linux 也不例外。
Linux 允许使用者在 Linux 系统上通过规划不同类型、不同层级的用户,并公平地分配系统资源与工作环境。
而与 Windows 系统最大的不同,在于 Linux 允许不同的用户同时登录主机,同时使用主机的资源,因此 Linux 被称为是多用户系统。
基于此,我们必须详细了解 Linux 对于用户和用户组的规划,才能更好地理解 Linux 作为多用户、多任务系统的优势,也才能地使用 Linux 支持我们日常的开发工作。
二、用户与用户组的概念
Linux 作为多用户系统,如何区分不同用户对于文件的权限的问题成为了不可避免的问题。
例如,小 A 希望个人文件不被其他用户读取,而如果不对文件进行权限设置,共享了主机资源的小 B 也可以读取小 A 的个人文件,这是不合理的,不同用户对不同文件所拥有的权限应该不尽相同。
因此,Linux 以 “用户与用户组” 的概念,建立用户与文件权限之间的联系,保证系统能够充分考虑每个用户的隐私保护,很大程度上保障了 Linux 作为多用户系统的可行性。
或者说,“用户与用户组” 与文件权限息息相关。(关于文件权限的概念,会在下一篇文章进行讲解)
因此,从文件权限的角度出发,“用户与用户组” 引申为三个具体的对象——文件所有者、用户组成员、其他人。每一个对象对某一个文件的持有权限是不同的。
2.1、文件所有者(User)
当一个用户创建了一个文件,这个用户就是这个文件的文件所有者。文件所有者对文件拥有最高权限,同时排他性地拥有该文件。
换句话说,除非文件所有者开放权限,否则其他人无法对文件执行查看、修改等操作。
这也是 Linux 系统能够保护用户隐私的最关键的原因。
在文件所有者占有文件之后,需要文件所有者对其他用户开放权限,其他用户才能查看、修改文件。
如果仅区分 “文件所有者” 和 “其他用户”,那么文件所有者对其他用户开放权限后,所有其他用户均能查看、修改文件。
但是,若文件所有者希望仅对部分用户开放,那么仅仅区分 “用户所有者” 和 “其他用户” 显然不满足需求。
这就引入了 “用户组的概念”。
2.2、用户组成员(Group)
将 “其他用户” 区分为用户组成员和其他人后,若文件所有者希望对部分用户开放权限,而对其他人继续保持私有,则只需要将这部分用户与文件所有者划入一个用户组。
这样,这部分用户就成了与文件所有者同组的用户组成员。用户可以对用户组成员开放文件权限,用户组成员则具备了查看、修改文件的权限,而对其他无关用户保持私有。
用户组成员在团队开发中非常有帮助。
例如,团队成员之间保持文件资源共享,但对非团队成员保持私有,这就需要将文件所有者与团队成员用户划分为同一个用户组,再对用户组成员开放权限即可。
需要注意的是,一个用户可在多个用户组中。
2.3、其他人(Others)
顾名思义,就是与文件所有者没有任何联系的其他用户。
2.4、具体例子
至此,我们知道了 Linux 系统下,每一个文件都具有 “文件所有者”、“用户组”、“其他人” 三种身份。
我们举一个具体例子,来详细地了解 “文件所有者”、“用户组”、“其他人” 这三个角色的含义。
假设有一个班级,有一名老师。老师根据自己编写的教案(老师的教案不能分享给其他任何人),指导本班同学共同完成一个黑板报任务。老师为本班同学提供了黑板,并允许本班同学能够查看、修改黑板上的内容,不允许非本班的学生查看、修改黑板上的内容。
我们将这个例子与 Linux 中 ”文件所有者“、”用户组成员“、”其他人“ 进行映射:
老师——教案和黑板的 ”文件所有者“
教室——用户组,老师和学生同属一个用户组
学生——用户组成员
非本班学生——其他人
教案不能分享给任何人——老师是 “文件所有者”,将 ”教案“ 的权限对其他所有人保持私有。
黑板允许班级学生修改,但是不允许非本班人员修改——老师是 “文件所有者”,将 “黑板” 的权限对用户组成员开放权限,而对非用户组成员保持私有
2.5、0号用户——root
在这里不得不提 Linux 系统中,具有最高权限的用户——root。
root 用户是系统中唯一的一个超级管理员,拥有了系统中的所有权限,可以执行任何想要执行的操作,也正因为如此,处于安全考虑,一般情况下不推荐使用 root 用户进行日常使用。
root 用户所在的用户组称为 “root组”,处于 root 组的普通用户,能够通过 sudo 命令获取 root 权限。该部分会在本文第四部分说明。
三、用户与用户组在 Linux 中的记录
Linux 将用户账号、密码等相关的信息分别存储在四个文件夹下:
- /etc/passwd —— 管理用户UID/GID重要参数
- /etc/shadow —— 管理用户密码
- /etc/group —— 管理用户组相关信息
- /etc/gshadow —— 管理用户组管理员相关信息
这些文件中,每一行代表一个用户或一个用户组,并存储了相关的用户或用户组信息。
3.1、/etc/passwd
该文件中,每一行的存储格式为:
账号名称 : 密码 : UID : GID : 用户信息说明列 : 主文件夹 : shell
root : x : 0 : 0 : root : /root : /bin/bash
其中,
密码项显示 “x” 是出于安全考虑,Linux 将密码信息移到 /etc/shadow 进行存储;
每一个用户都有一个UID、GID,对应的含义就是UserID、GroupID,UID 会映射到 /etc/shadow 以获得密码信息,GID 会映射到 /etc/group 以获取用户的用户组信息
3.2、/etc/shadow
该文件中,每一行的存储格式为:
账号名称 : 密码 : 最近改动密码的日期 : 密码不可被改变的天数 : 密码需要重新更改的天数 : 更改提醒天数 : 密码过期后账号的宽限时间 : 账号失效日期 : 保留
root : (字符串,此处打码) : 200 : 0 : 99999 : 7 : : :
其中,
第二列表示密码加密后的字符串。
/etc/passwd 通过 UID,在该文件中找出对应 UID 的用户,并提取对应密码用于登陆验证。
3.3、/etc/group
该文件中,每一行的存储格式为:
用户组名称 : 用户组密码 : GID : 此用户组包含的账号名称
root : x : 0 : root
其中,
用户组密码通常是为了设置用户组管理员存在的,其信息也移动到 /etc/gshadow 中;
/etc/passwd 通过 GID,在该文件中找到对应的用户组,并提取用户组相关信息;
另外,由于一个用户可以在多个用户组中,因此就有一个初始用户组的有效用户组的概念。
所谓的初始用户组,就是用户所记录的 GID,是在创建用户时生成或指定的用户组;
所谓的有效用户组,就是利用命令 groups 查看并输出的首个用户组,即有效用户组;
用户在登录的时候,以初始用户组身份工作,用户可以用 newgrp 命令实现有效用户组的切换。
3.4、/etc/gshadow
该文件中,每一行的存储格式为:
用户组名 : 密码 : 用户组管理员账号 : 该用户组包含的账号名称
root : : : root
一般用户组不使用用户组管理员,相应地也就不需要设置密码。
————————————————
(未完,第四部分碍于篇幅,若有兴趣,请移步原文链接阅读)
原文链接:一篇读懂Linux用户管理与操作
————————————————
本文为原创文章,若要转载还请 原链转载