Linux 的用户与用户组
Linux 的用户与用户组
前言
结构化存储
组数据存放在目录 /etc/
中, 并以多个文件存储, 分别为:
- passwd: 用户信息, 公共读
- shadow: 用户密码, root 读
- group: 组信息, 公共读
- gshadow: 组密码,root 读
文件 passwd
公共读
, 每个用户位于单独的行上, 并以 分号 分割, 分别为:
- Username: 登录名
- Password: 加密密码. x 表示正在使用
shadow
文件管理密码 - UID: 用户 ID,
- GID: 组 ID
- GECOS: 历史遗留 见
- Home directory: 用户主目录
- Shell: 用户登录时自动启动的程序
例如: siweipancc:x:1000:1000:,,,:/home/siweipancc:/bin/bash
管理 Password
修改当前用户名密码执行 passwd
, 用 passwd <username>
以指定用户
可选项为:
-l
: 锁定用户密码-d
: 清楚用户密码
管理 GECOS
该字段为以逗号分割的 4 段式内容, 通过 finger
查询内容, 可通过 chfn
命令进入交互式修改, 可选项为:
-f
: 真实姓名-h
: 家中的电话号码-o
: 办公室的地址-p
: 办公室的电话号码
管理 UID / GID
执行 id
查看 用户 id, 输出包含 组 id, 可选项为:
-g
: 输出 有效组-G
: 输出 所有组-u
: 输出 有效的用户ID
以上可组合下列选项:
-n
: 打印名称而不是数字-r
: 打印真实ID而不是有效ID
例:
1 | id # uid=1000(siweipancc) gid=1000(siweipancc) groups=1000(siweipancc),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),116(netdev) |
管理 Shell
默认使用 /bin/bash
, 置空将使用 /bin/sh
, 如果指向错误将导致无法登录.
管理用户
使用 useradd
新建用户
-d
: 指定用户登入时的启始目录-D
: 变更预设值-e
: 指定帐号的有效期限-f
: 指定在密码过期后多少天即关闭该帐号-g
: 指定用户所属的群组-G
: 指定用户所属的附加群组-m
: 自动建立用户的登入目录-M
: 不要自动建立用户的登入目录-n
: 取消建立以用户名称为名的群组-r
: 建立系统帐号-s
: 指定用户登入后所使用的shell-u
: 指定用户id
使用 userdel
删除用户, 可选:
-r
:同时删除用户目录及文件
例:
1 | # 建议完成以下内容再阅读 |
文件 shadow
root 读
, 每个用户位于单独的行上, 并以 分号 分割, 分别为:
- 登录名
- 加密密码: 使用 crypt(3) 库函数或md5哈希算法对密码进行加密, 如果值为 ! 或 *. 则帐户被锁定. 不允许用户登录,如果值为 !! 则为密码以前从未设置过, 无法登录
- 上次更改密码的日期: 以天数表示, 计算基底为: 1970-1-1
- 可以更改密码之前的天数: 可以更改密码之前必须经过的最短天数
- 需要更改密码之前的天数:
必须
更改密码之前必须经过的天数 - 密码更改前警告的天数: 密码到
期前
警告用户即将到期的天数 - 密码过期未登录天数限制: 密码
过期
后帐户被禁用
之前的天数 - 帐户被禁用的日期: 以天数表示, 计算基底为: 1970-1-1
- 保留字段
例: binlog:$1$.QKDPc5E$SWlkjRWexrXYgc98F.:12825:0:120:5:20:13096:
- 登录名 binlog
- 密码最后更改时间为 2005 年 2 月 11 日
- 更改密码没有最短时间限制
- 密码必须每 120 天更改一次
- 用户将在必须更改密码前 5 天收到警告
- 密码过期 20 天后. 如果未尝试登录. 帐户将被禁用
- 该帐户将于 2005 年 11 月 9 日到期
文件 group
公共读
, 每个组位于单独的行上, 并以 分号 分割, 格式 Group name : Password : UID : GID : GECOS : Home directory : Shell
分别为:
- 组名
- 组密码: 加密密码. x 表示正在使用
gshadow
文件管理密码 - GID: 组 ID
- 成员列表: 属于该组的用户的逗号分隔列表
管理组
使用 groupmod [ops] <group>
管理组, 可选:
-n <new name>
: 修改 组名-g <new gid>
: 修改 组 ID
使用 groupadd [ops] <group>
增加组, 可选:
-g
: 指定新建工作组的id-r
: 创建系统工作组, 系统工作组的组ID小于500-K
: 覆盖配置文件/ect/login.defs
-o
: 允许添加组ID号不唯一的工作组
使用 groupdel [ops] <group>
删除组
使用 newgrp
对于初始数据:
1 | root@siweipancc-GZ:/etc# id siweipancc |
对组名跟 id 进行修改
1 | root@siweipancc-GZ:/etc# groupmod -n gpancc siweipancc |
1 | root@siweipancc-GZ:/etc# id siweipancc |
文件 gshadow
root 读
, 每个组位于单独的行上, 并以 分号 分割, 分别为:
- 组名称
- 加密密码
- 组管理员: 以逗号分隔, 用
gpasswd
添加删除人员 - 组成员: 以逗号分隔
管理组密码
使用 gpasswd <groupname>
进入交互模式
管理成员
使用 gpasswd [ops] <groupname>
命令, 可选:
-a
添加用户到组;-d
从组删除用户;-A
指定管理员;-M
指定组成员和-A的用途差不多;-r
删除密码;-R
限制用户登入组,只有组中的成员才可以用newgrp
加入该组。
额外
GECOS 字段含义
GECOS 代表通用电气综合运营主管. 贝尔实验室在最初的 UNIX 实现中使用了该字段. 实验室有许多不同的计算机. 其中一台运行 GECOS. 该字段用于存储 UNIX 系统向 GECOS 系统发送批处理和打印作业时的信息.
GECOS 字段部分无法修改
编辑文件 nano /etc/login.defs
,CTRL + w
输入 CHFN
定位到 CHFN_RESTRICT
行, 修改 为 frwh
, CTRL + s
, CTRL + x
保存并退出, 使用 finger
查询结果
切换用户密码的存储路径
使用 pwconv
将 /etc/passwd
的密码迁移到 /etc/shadow
(建议) 使用 pwunconv
逆转该过程(不建议)
切换组密码的存储路径
使用 grpconv
将 /etc/group
的密码迁移到 /etc/gshadow
(建议) 使用 grpunconv
逆转该过程(不建议)
使当前用户暂时加入组
使用 newgrp <groupname>
输入对应的组密码之后可以暂时该组权限与标记读取与修改文件等. 当该用户被使用 -r
标记删除时, 这些更改不会被删除.