Linux账号和群组
Linux系统登录需要用户名和密码,但是不同的用户拥有不同的权限。有一位特殊的存在:root—— 系统管理员,它在系统中拥有全部权限,可以管理用户的文件权限、目录权限等等。接下来就围绕账号与群组进行具体讨论。
Linux账号与群组
UID和GID
对于用户,记住Linux系统的用户名和密码足矣,然而对于Linux主机,则需要记住用户的UID(User ID)和密码。首先我们要有一个概念:Linux系统由文件组成,包括目录也是文件组成。 Linux规定所有的配置文件都保存在/etc目录下,而每个用户名和UID的对应则保存在/etc/passwd文件中。以前用户的密码也保存在/etc/passwd文件中,但是目前用户的密码在/etc/shadow文件中密文保存。
每个用户都必须属于一个组,在未指定所属组的情况下,用户的组为自己本身。同样,组由于GID(Group ID)被Linux主机记住,组名和GID的对应保存在/etc/group文件中。
每个Linux文件都属于用户和组,Linux系统依据/etc/passwd和/etc/group中的内容,找到UID/GID对应的用户名和组名显示出来。因此,若随意更改/etc/passwd中用户的UID,会导致此用户的文件无法显示名字,并且/home/用户 无法登入(因为UID更改,而家目录所属UID未变)。
用户账号与群组
用户登录Linux系统,需要利用tty1~tty6终端机的login接口,并且输入用户名和密码。或者使用ssh进行远程登录。而输入用户名和密码后,Linux系统的验证流程如下:
- 进入/etc/passwd,查找是否存在这个用户名,如果有再读出UID和GID,shell和家目录。
- 进入/etc/shadow,核验用户名和密码是否对应,如果对应则用户进入到Shell界面。
/etc/passwd的每一行代表了一个用户,而其中的某些为系统用户,例如bin,deamon等等。
而每一行的固定格式为:
用户名:密码(x):UID:GID:用户信息说明栏:家目录:Shell
需注意,UID为0代表用户为系统管理员,因此root的UID为0,除此之外设置其余用户的UID为0也可以做到让其变为系统管理员。
/etc/shadow的每一行存储了密码相关的字段,固定格式为:
用户名:密码:最近更改密码的日期:密码不可更动的天数:密码需要重新更动的天数:密码需要变更期限前的提醒天数:密码过期后的宽限天数:用户失效日期:保留字段
举个例子:
root:xxx:16659:5:60:7:5:16679:
密码可更改的日期:16664
密码提醒更改的日期:16722-16729
密码更改宽限的日期:16734
用户失效日期:16679
其中,/etc/shadow中查看加密方式,$1$表示MD5加密,$5$表示SHA-256,$6$表示SHA-512。
/etc/group的每一行代表一个群组,格式为:
组名:密码:GID:支持的用户名
账号相关文件之间的UID/GID与密码相关性示意图
群组
有效群组(effective group):每个用户可以同属多个群组,用户的有效群组决定了新建文件的所属组。
1 | groups [user] |
1 | newgrp [group] #在所属群组的范围中,临时切换有效群组,退出当前shell即还原有效群组 |
初始群组(initial group):用户一登录系统便拥有初始群组的所有权限。
/etc/gshadow格式
组名:密码:群组管理员账号:群组成员
总结
Linux账户与群组是Linux系统权限划分的有效工具,不同角色,不同群组可以有不同的权限。
账号和群组管理
新增账号
1 | #普通建立账号 |
/etc/default/useradd
普通建立账号的默认值可从本文件编辑,其中:
- GROUP=100,为公共群组的GID,而RHEL、CENTOS中为私有群组,因此GID会由系统自动分配
- HOME=/home,为用户家目录的基础目录(basedir)
- INACTIVE=-1,密码过期后是否会失效,过多久失效的设置
- EXPIRE=,账号的失效日期
- SHELL=/bin/bash,默认SHELL名称
- SKEL=/etc/skel,用户家目录参考目录,新建账号时会从/etc/skel/*复制到用户家目录
- CREATE_MAIL_SPOOL=yes,是否建立用户的mailbox
除了以上账号的基本设定值以外,UID/GID和密码等其他默认参数由/etc/login.defs决定,此处省略对login.defs的介绍。
用户建立以后,需要马上设定密码,否则无法登录:
1 | #普通设置密码 |
更详细地显示密码参数
1 | #显示详细参数 |
修改账号信息
方式1:通过/etc/passwd和/etc/group修改
方式2:通过usermod命令修改
1 | usermod -L/-U [user] # 同passwd -l/-u |
删除账号
用户的相关数据都会在账号被删除的时候清除,相关数据有:
- 用户账号、密码数据:/etc/passwd,/etc/shadow
- 群组数据:/etc/group,/etc/gshadow
- 个人文件数据:/home/username,/var/spool/mail/username…
1 | #普通删除账号 |
用户功能
- 查看id(UID/GID)
1 | id [user] |
增删改群组
1 | #普通增加群组 |
成员管理
- gpasswd
1 | #给群组设置密码(root) |
改变文件所属组
- chgrp
1 | #普通更改 |
- chown
1 | #更改属主和属组 |
总结
给出了关于账号和群组的增删查改相关的命令。