用户与组
基于账号的访问控制
账号类型:用户账号(UID) 、组账号(GID)
用户账号简介
作用: 1.可以登陆操作系统
2.不同的用户具备不同的权限
唯一标识:UID(编号从0开始的编号,默认最大60000)
-
管理员root的UID:永远为0
-
系统用户的UID: 1-999(系统内定,不轻易修改)
-
普通用户的UID:默认从1000开始,60000结尾
#用户分为超级用户root、系统用户、普通用户。
组账号简介
作用: 方便管理用户
唯一标识:GID(编号从0开始的编号,默认最大60000)
原则:Linux一个用户必须至少属于一个组(基础组,不轻易修改该组的归属)
组账户的分类:
-
基本组 :一般情况与用户同名,一个用户必须有基本组,基本组只能有一个
-
附加组(从属组): 一个用户可以有多个附加组,也可以没有附加组
账号的存放类别
账号数据的存放
--存储在本机磁盘中--本地账户
本地帐号的数据文件
-
/etc/passwd 存放用户的基本信息
-
/etc/shadow 保存密码字串/有效期等信息
-
/etc/group,保存组帐号的基本信息
-
/etc/gshadow,组管理信息文件
解析账号文件
/etc/passwd保存用户账户的基本信息


7个字段
-
用户账号的名称
-
密码字符或占位符
-
用户账户的UID号
-
所属基本组的GID号
-
用户全名
-
用户的家目录
-
登入shell程序的路径
用户管理
useradd 添加用户
-格式:useradd [选项]... 用户名
-b, --base-dir BASE_DIR # 如果未指定 -d HOME_DIR,则系统的默认基本目录。如果未指定此选项,useradd 将使用 /etc/default/useradd 中的 HOME 变量指定的基本目录,或默认使用 /home。
-c, --comment COMMENT # 加上备注文字。任何文本字符串。它通常是对登录名的简短描述,目前用作用户全名的字段。
-d, --home HOME_DIR # 将使用 HOME_DIR 作为用户登录目录的值来创建新用户。
-D, --defaults # 变更预设值。
-e, --expiredate EXPIRE_DATE # 用户帐户将被禁用的日期。 日期以 YYYY-MM-DD 格式指定。
-f, --inactive INACTIVE # 密码过期后到帐户被永久禁用的天数。
-g, --gid GROUP # 用户初始登录组的组名或编号。组名必须存在。组号必须引用已经存在的组。
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]] # 用户也是其成员的补充组列表。每个组用逗号隔开,中间没有空格。
-h, --help # 显示帮助信息并退出。
-k, --skel SKEL_DIR # 骨架目录,其中包含要在用户的主目录中复制的文件和目录,当主目录由 useradd 创建时。
-K, --key KEY=VALUE # 覆盖 /etc/login.defs 默认值(UID_MIN、UID_MAX、UMASK、PASS_MAX_DAYS 等)。
-l, --no-log-init # 不要将用户添加到 lastlog 和 faillog 数据库。
-m, --create-home # 如果用户的主目录不存在,则创建它。
-M # 不要创建用户的主目录,即使 /etc/login.defs (CREATE_HOME) 中的系统范围设置设置为 yes。
-N, --no-user-group # 不要创建与用户同名的组,而是将用户添加到由 -g 选项或 /etc/default/useradd 中的 GROUP 变量指定的组中。
-o, --non-unique # 允许创建具有重复(非唯一)UID 的用户帐户。 此选项仅在与 -o 选项结合使用时有效。
-p, --password PASSWORD # crypt(3) 返回的加密密码。 默认是禁用密码。
-r, --system # 创建一个系统帐户。
-s, --shell SHELL # 用户登录 shell 的名称。
-u, --uid UID # 用户 ID 的数值。
-U, --user-group # 创建一个与用户同名的组,并将用户添加到该组。
-Z, --selinux-user SEUSER # 用户登录的 SELinux 用户。 默认情况下将此字段留空,这会导致系统选择默认的 SELinux 用户。
# 更改默认值
# 当仅使用 -D 选项调用时,useradd 将显示当前默认值。 当使用 -D 和其他选项调用时,useradd 将更新指定选项的默认值。 有效的默认更改选项是:
useradd 执行进程
-
会在/etc/passwd增加一行信息
-
会在/etc/shadow增加一行信息
-
会在/home新增用户家目录
-
会在/var/spool/mail增加用户邮件文件
-
会在/etc/group增加一行组信息(基础组)
-
会在/etc/gshadow增加一行组的管理信息
useradd -u [1000-60000] [用户名]
#创建用户的时候指定用户id

useradd -d [家目录] [用户名]
#创建用户的时候指定用户家目录


#linux在创建用户的时候,如果家目录/路径提前创建或者家目录的父目录不存在,在/etc/passwd上会记录路径,但是实际上该用户没有家。

---因为/opt/prefile存在,给student03指定家目录时会报错---
【注意】实际上/etc/passwd会将错误的信息写入

useradd -G [附加组名] [用户名]
#创建用户的时候指定加入附加组(-g 是指定基本组但不常用,不轻易修改基本组)

#创建账户的时候,可以把用户加入多个附加组

useradd -s [解释器] [用户名]
#创建用户的时候,指定用户的登入解释器
-s #指的是shell
基本的解释器 /bin/bas 『 /sbin/ nologin --是用户禁止登入解释器』
用户操作的进程:用户--->解释器--->内核--->硬件

给用户设置密码

切换用户进入操作系统(以管理员身份切换、以普通用户身份切换)


usermod修改用户
-格式:usermod [选项]... 用户名

usermod -l [新用户名] 【用户名】
#更改用户账户的登入名称 -l(login)

usermod -u [1000-60000] [用户名]
#更改用户id -u(userid)

usermod -s [解释器] [用户名]
#修改用户登入解释器 -s(shell)

++#修改用户的信息的时候也可以直接通过vim修改/etc/passwd里面保存着的用户信息++

usermod -d [家目录] 【用户名】
#修改用户的家目录
#-d 默认不会自动创建新的家目录---意思就是在/etc/passwd里面让新家目录覆盖原家目录


usermod -md [家目录] 【用户名】
#会自动创建新的家目录,并将相应的数据与权限转移


usermod -G [附加组] 【用户名】
修改用户的附加组 #重置附加组 (了解),注意的是修改写入会覆盖

#覆盖了原来的组

#覆盖,并写入多个组(用逗号隔开)

passwd 设置用户密码
•格式:passwd [选项]... 用户名
交互式设置密码

passwd命令,支持非交互式设置密码
--stdin:从标准输入(比如管道)取密码

解析用户密码文件
/etc/shadow,保存密码字串/有效期等信息
每个用户记录一行,以:分割为9个字段
[root@localhost ~]# grep stu /etc/shadow
【注意】上一次修改密码的时间:自1970-1-1到达上一次修改密码的时间,所经历的天数
9个字段
-
字段1:用户帐号的名称
-
字段2:加密后的密码字符串
-
字段3:上次修改密码的时间
-
字段4:密码的最短有效天数,默认0
-
字段5:密码的最长有效天数,默认99999
-
字段6:密码过期前的警告天数,默认7
-
字段7:密码过期后多少天禁用此用户账号
-
字段8:帐号失效时间,默认值为空
-
字段9:保留字段(未使用)
用户初始配置文件
主要的初始配置文件
~/.bashrc:每次进入新的Bash环境时执行(开启新的终端)
/etc/bashrc:全局配置文件,影响全体用户 (开启新的终端)
【注意:前者针对的是单个用户、后者对所有用户都适用。案例在前面笔记alias有所体现】
userdel删除用户
userdel命令
格式:userdel [-r] 用户名
添加 -r 选项,家目录/用户邮件也一并删除
【注】userdel 删除不掉家目录不再/home下的用户
[root@localhost ~]# userdel -r nsd18 #连同家目录一并删除
[root@localhost ~]# userdel nsd20 #不删除家目录,只删除用户信息
userdel 删除的进程
-
1.会在/etc/passwd删除一行信息
-
2.会在/etc/shadow删除一行信息
-
3.会在/home删除用户家目录(如果没有-r,跳过这一行)
-
4.会在/var/spool/mail删除用户邮件文件
-
5.会在/etc/group删除一行组信息
-
6.会在/etc/gshadow删除一行组的管理信息
组账号管理
-
/etc/group,保存组帐号的基本信息
-
/etc/gshadow,组管理信息文件
每个组记录一行,以:分割为4个字段
[root@localhost ~]# grep stugrp /etc/group
stugrp:x:1504:nsd06
组名:组密码占位符:组的GID:组成员列表

gpasswd管理组成员
格式【语法】:gpasswd [选项]... 组名

•常用命令选项
-a:添加组成员,每次只能加一个

-d: 删除组成员,每次只能删一个

-M:定义(重置)组成员用户列表,可设置多个用户或者清空组员
#注意-M是覆盖写入

gpasswd -M ' ' #组员信息是空,则清空组员

-A :设置组的管理员(与-M一样,都是覆盖写入)
#组管理信息文件 /etc/gshadow
[root@localhost ~]# grep tarena /etc/gshadow
tarena:!:nb:
组名:密码加密字符串:组的管理员列表:组成员列表
[root@localhost /]# gpasswd -A 'nb,kenji' tarena #设置多个组管理员
[root@localhost /]# grep tarena /etc/gshadow
[root@localhost /]# gpasswd -A '' tarena #删除所有的组管理员
[root@localhost /]# grep tarena /etc/gshadow
groupdel 删除组
#删除组的时候,不可以删除基本组
[root@localhost ~]# groupdel tarena
[root@localhost ~]# groupdel tmooc
[root@localhost ~]# grep tmooc /etc/group
[root@localhost ~]# grep tarena /etc/group