Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员(root)申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
用户和用户组相关的指令都需要 root 权限
用户标识符
用户
- 定义: 用户是系统中的一个实体,代表一个使用或登录系统的个体(人或程序)。
- 特点: 每个用户有唯一的用户名(用户名)和用户ID(UID)。
- 用户类型:
- 普通用户(Regular User): 一般用户,用于日常操作。
- 超级用户(Root): 系统管理员,拥有全部权限。UID为0。
用户组
- 定义: 用户组是多个用户的集合,用于批量管理权限和访问控制。
- 特点: 每个组有唯一的组名(Groupname)和组ID(GID)。
作用:
- 将多个用户归入同一组
- 赋予整个组的权限(如访问某个目录或文件)
每个用户都有用户 ID(User ID,UID)和群组 ID (Group ID,GID),每个用户在创建时都有一个用户主组(默认和用户同名,只能有一个),用户创建后可以添加任意个附加组。
用户信息
- 存用户相关信息的文件:
- 存储用户信息:/etc/passwd
用户名:密码:UID:GID:注释:家目录:解释器shell
这是 Linux 系统存放所有用户账号信息的文本文件,每一行代表一个用户账户。(有很多是系统账号)
密码(Password):
- 传统上存储用户的加密密码,但在现代系统中,实际密码的hash存储在 /etc/shadow 文件中,/etc/passwd 一般显示为“x”。
UID(User ID,用户编号):
- 系统为每个用户分配的唯一数字识别码。
- 意义:
- UID为0:这是超级用户(root),具有全部权限。
- UID为1~999:是系统账号或系统保留账号,用于操作系统的内部用途。
- UID为1000及以上:一般用户的 UID(普通用户账号)GID 是用
户主组的 ID
GID(Group ID,用户主组编号):
- 用户的主组ID,代表用户所属的主要用户组。
- GID对应的组信息存放在 /etc/group 文件中。
注释(Comment):
- 通常是描述用户的备注,例如:用户的全名、部门等。
家目录(Home Directory):
- 用户登录后所在的目录,比如 /home/john。
解释器shell(Shell):
- 登录后使用的命令行解释器(终端),比如 /bin/bash。
例如第一行:
- 用户名:dnsmasq
- 密码:x
- 用户编号:112
- 用户组编号:65534
- 注释:,,,(这里没写,比如用户全名、电话等,这里为空)
- 家目录:/var/lib/misc
- 解释器:/bin/false
存储用户组信息:/etc/group
- 组名:用户组密码:GID:属于用户组的成员账号
- 存储用户密码信息:/etc/shadow
账号名称:密码:密码更新日期:密码不可被更改的天数:密码需要被更改的天数:密码需要更改期限前的警告天数:密码失效日:账号失效日期:保留字段
例:
purr:$6$abc123...:18304:0:90:7:::
字段 | 内容或说明 |
---|---|
账号名称 | purr (用户名) |
密码 | $6$abc123... (表示用SHA-512算法加密的密码) |
密码最后更新时间(天数) | 18304 (自 1970-01-01 以来到目前为止的天数) |
密码不可更改的天数 | 0 (从密码设置起,到可以更改的期限,没有限制) |
密码需要更改的天数 | 90 (密码有效期为90天) |
密码过期前的警告天数 | 7 (到期前7天开始提醒用户更改密码) |
密码失效日 | 空(用空表示没有设定具体密码失效日) |
账号失效日期 | 空(用空表示账户没有到期时间限制) |
保留字段 | 空(暂无特殊用途) |
用户管理
1.whoami指令
查看当前用户
2.adduser指令
添加用户
- 用法:#adduser 选项 用户名
常用选项:
- gid:表示指定用户的用户主组,选项的值可以是用户组id,也可以是组名(默认创建同名的用户组)
- uid:用户的 id(用户的标识符),系统默认会从1000之后按顺序分配 uid,如果不想使用系统分配的,可以通过该选项自定义
- 验证是否成功:
- 验证 /etc/passwd 的最后一行,查看是否有 pointer 的信息
tail -n 1 /etc/passwd
加入最后一行输出:
pointer:x:1001:1001::/home/pointer:/bin/bash
说明这个用户 pointer 确实存在于 /etc/passwd 文件中。
- 验证是否存在家目录(自动创建家目录)
ls -ld /home/pointer
或者
test -d /home/pointer && echo "目录存在" || echo "目录不存在"
- 如果输出中显示目录信息,说明家目录存在。
- 如果提示“目录不存在”,说明家目录没有被自动创建或被删除了。
3.usermod指令
修改用户
- 用法:#usermod 选项 用户名
常用选项:
- g:指定用户主组
- u:指定 UID
- l:修改用户名
- G:指定附加组
- a:与 -G 合用(-a -G),增加附加组(保留原组)
附加组:
假设:
- 用户 john 的主要组是 users。
- john 还被加入了 developers 和 docker 这两个附加组。
这样:
john 的主要组是 users,但他还可以访问 developers 和 docker 组所拥有的权限和资源(比如:访问某些文件或运行某些程序)。
它帮助用户获得额外的权限,方便权限管理和控制。
修改用户主组:
修改用户UID:
修改用户名:
注意:修改用户名不会同步修改家目录下的目录名。如果想让家目录名和用户名一致,需要自己手动改动
4.passwd指令
设置/更改密码
- 用法:#passwd 用户名
默认修改 root 的密码
5.su指令
切换用户
用法:#su 用户名
如果用户名不指定则表示切换到 root 用户
sudo su pointer2:实际上是以管理员权限(root)切换到用户pointer2。
如果你是普通用户,有权限直接用 su pointer2 也可以切换,不用sudo。
注意事项:
- 从 root 往普通用户切换不需要密码,反之则需要 root 密码
- 切换用户之后前后的工作路径是不变的
- 普通用户没有办法访问 root 用户家目录,反之则可以
6.deluser指令
删除用户
- 用法:#deluser --remove-home 用户名
删除用户的同时,删除其家目录
注意:已经登录的用户删除的时候提示删除失败,没有登录的用户可以正常删除
用户组管理
1.addgroup指令
用户组添加
- 用法:#addgroup 选项 用户组名
常用选项:
- gid:设置 GID,默认从 1000 之后递增
2.groupmod指令
用户组编辑
- 用法:#groupmod 选项 用户组名
常用选项:
- -g:设置 GID
- -n:修改用户组名
3.delgroup指令
用户组删除
- 用法:#delgroup 用户组名
注意:不允许删除某个用户的主组,需要从组内移出所有用户才能删除。
四、文件的拥有者和所属用户组
1.chown指令
change owner,改变文件拥有者(属主)
用法1:chown 新用户名 待修改文件
用法2:chown -R 新用户名 待修改文件
含义:递归修改,连同目录下所有文件都变更
用法3:chown 新用户名:新用户组名 待修改文件
含义:修改拥有者和所属用户组
2.chgrp指令
change group,改变文件所属用户组
- 用法:chgrp 新用户组名 待修改文件
常用选项:
- R,递归
chgrp -R mygroup /path/to/directory
作用:将 /path/to/directory 这个目录及其所有子文件、子目录的所属用户组都变成 mygroup。
区别:
命令 | 作用 | 能修改哪些信息 | 是否需要超级用户权限 |
---|---|---|---|
chgrp |
改变文件或目录的所属用户组 | 仅修改用户组 | 非超级用户可以(前提有权限) |
chown |
改变文件或目录的所有者(用户) 和用户组 | 改变所有者(用户),也可以连同组修改 | 需要超级用户权限(root)或文件拥有者权限 |
区分附加组和主组
主组(Primary Group)
- 用户登录系统后,默认归属的组。
- 这是用户在创建文件时,文件的默认组。
- 一个用户只能有一个主组。
附加组(Secondary or Supplementary Groups)
- 用户除了主组外,还可以加入的其他组。
- 主要用来给用户授予额外的权限。
- 一个用户可以属于多个附加组。
进行区分
- 使用id命令查看用户的所有组:
id 用户名
输出:
uid=1001(purr) gid=1001(purr) groups=1001(purr), 1002(wheel), 1003(sudo)
gid=1001(purr):这是用户的主组(purr)。
groups=…:后面列出的是包括主组和所有附加组。
用 ls -l 查看文件的主组:
ls -l 文件
输出:
-rw-r--r-- 1 user group 1234 Jun 22 10:00 filename
- group:这是文件的主组。
- 用户如果属于该组,通常会有相关权限。
管理方法
- 主组:由 usermod -g或在用户创建时用 -g 设定。
- 附加组:用 usermod -aG 添加,比如:
sudo usermod -aG 组名 用户名
项目 | 主组 | 附加组 |
---|---|---|
数量 | 只有一个 | 多个可以加入 |
查看方式 | id 用户名 ,ls -l 看到的文件组 |
id 用户名 中列出,或用 groups |
作用 | 文件默认的“主要”所属组 | 用户额外的权限组 |