# Linux用户与组 **Repository Path**: xiaoxinbupa/linux-users-and-group ## Basic Information - **Project Name**: Linux用户与组 - **Description**: Linux learning must be inseparable from the management and configuration of users and permissions . - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-08-16 - **Last Updated**: 2024-08-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: 学习笔记 ## README # Linux用户与权限 #### 介绍 Linux learning must be inseparable from the management and configuration of users and permissions . ## 用户与组 ### 基于账号的访问控制 **账号类型**:用户账号(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保存用户账户的基本信息 ![image-20240507101340000](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507101340000.png) ![image-20240507101443826](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507101443826.png) ==7个字段== 1. 用户账号的名称 2. 密码字符或占位符 3. 用户账户的UID号 4. 所属基本组的GID号 5. 用户全名 6. 用户的家目录 7. 登入shell程序的路径 ### 用户管理 #### useradd 添加用户 -格式:useradd [选项]... 用户名 ```bash -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 执行进程 1. **会在/etc/passwd增加一行信息** 2. **会在/etc/shadow增加一行信息** 3. **会在/home新增用户家目录** 4. **会在/var/spool/mail增加用户邮件文件** 5. **会在/etc/group增加一行组信息(基础组)** 6. **会在/etc/gshadow增加一行组的管理信息** ##### **useradd -u [1000-60000] [用户名]** 创建用户的时候指定用户id ![image-20240507102653254](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507102653254.png) ##### **useradd -d [家目录] [用户名]** 创建用户的时候指定用户家目录 ![image-20240507104108655](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507104108655.png) ![image-20240507104205016](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507104205016.png) **linux在创建用户的时候,如果家目录/路径提前创建或者家目录的父目录不存在,在/etc/passwd上会记录路径,但是实际上该用户没有家。** ![image-20240507104500049](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507104500049.png) ---因为/opt/prefile存在,给student03指定家目录时会报错--- 【注意】实际上/etc/passwd会将错误的信息写入 ![image-20240507104617888](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507104617888.png) ##### **useradd -G [附加组名] [用户名]** 创建用户的时候指定加入附加组(-g 是指定基本组但不常用,不轻易修改基本组)![image-20240507105108417](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507105108417.png) 创建账户的时候,可以把用户加入多个附加组![image-20240507110009711](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507110009711.png) ##### **useradd -s [解释器] [用户名]** 创建用户的时候,指定用户的登入解释器 -s #指的是shell 基本的解释器 /bin/bas **『 /sbin/ nologin --是用户禁止登入解释器』** 用户操作的进程:用户--->解释器--->内核--->硬件 ![image-20240507111930908](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507111930908.png) 给用户设置密码 ![image-20240507112021421](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507112021421.png) 切换用户进入操作系统(以管理员身份切换、以普通用户身份切换) ![image-20240507112120293](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507112120293.png) ![image-20240507112254986](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507112254986.png) #### usermod修改用户 -格式:usermod [选项]... 用户名 ![image-20240507194548923](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507194548923.png) ##### **usermod -l [新用户名] 【用户名】** **#更改用户账户的登入名称 -l(login)** ![image-20240507113000098](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507113000098.png) ##### **usermod -u [1000-60000] [用户名]** **#更改用户id -u(userid)** ![image-20240507113135100](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507113135100.png) ##### **usermod -s [解释器] [用户名]** **#修改用户登入解释器 -s(shell)** ![image-20240507113351977](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507113351977.png) #修改用户的信息的时候也可以直接通过vim修改/etc/passwd里面保存着的用户信息 ![image-20240507114154707](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507114154707.png) ##### **usermod -d [家目录] 【用户名】** **#修改用户的家目录** ==#**-d 默认不会自动创建新的家目录---意思就是在/etc/passwd里面让新家目录覆盖原家目录**== ![image-20240507115841840](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507115841840.png) ![image-20240507120009525](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507120009525.png) ##### **usermod -md [家目录] 【用户名】** ==#**会自动创建新的家目录,并将相应的数据与权限转移**== ![image-20240507120200128](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507120200128.png) ![image-20240507120522894](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507120522894.png) ##### **usermod -G [附加组] 【用户名】** 修改用户的附加组 #重置附加组 (了解),注意的是修改写入会覆盖 ![image-20240507201517208](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507201517208.png) 覆盖了原来的组 ![image-20240507202022406](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507202022406.png) 覆盖,并写入多个组(用逗号隔开) ![image-20240507202249663](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507202249663.png) #### passwd 设置用户密码 •格式:passwd [选项]... 用户名 **交互式设置密码** ![image-20240507142011428](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507142011428.png) **passwd命令,支持非交互式设置密码** --stdin:从标准输入(比如管道)取密码![image-20240507142226699](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507142226699.png) #### 解析用户密码文件 ==/etc/shadow,保存密码字串/有效期等信息== **每个用户记录一行,以:分割为9个字段** [root@localhost ~]# grep stu /etc/shadow![image-20240507143256095](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507143256095.png) 【注意】上一次修改密码的时间:自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下的用户 ```bash [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/skel 是所用新创建用户家目录的模板】== 用户丢失家目录后 - 1、将/etc/skel 复制到家目录中 cp -r /etc/skel /home/[username] - 2、将用户家目录对应的权限修改 破坏家目录 ![image-20240508163644077](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240508163644077.png) 恢复家目录的内容 ![image-20240508163747105](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240508163747105.png) ![image-20240508163817910](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240508163817910.png) 修改对应权限 ![image-20240508163901707](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240508163901707.png) ### 组账号管理 - ==/etc/group,保存组帐号的基本信息== - ==/etc/gshadow,组管理信息文件== ``` 每个组记录一行,以:分割为4个字段 [root@localhost ~]# grep stugrp /etc/group stugrp:x:1504:nsd06 组名:组密码占位符:组的GID:组成员列表 ``` ![image-20240507155545303](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507155545303.png) #### gpasswd管理组成员 格式【语法】:gpasswd [选项]... 组名 ![image-20240507155745311](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507155745311.png) •常用命令选项 **-a:添加组成员,每次只能加一个** ![image-20240507160522596](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507160522596.png) **-d: 删除组成员,每次只能删一个** ![image-20240507160554372](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507160554372.png) **-M:定义(重置)组成员用户列表,可设置多个用户或者清空组员** 注意-M是覆盖写入 ![image-20240507160631220](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507160631220.png) gpasswd -M ' ' #组员信息是空,则清空组员 ![image-20240507160650732](https://gitee.com/xiaoxinbupa/linux-note/raw/master/linux_base_picture/image-20240507160650732.png) -A :设置组的管理员(与-M一样,都是覆盖写入) ==#组管理信息文件 /etc/gshadow== ```bash [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 删除组 **#删除组的时候,不可以删除基本组** ```bash [root@localhost ~]# groupdel tarena [root@localhost ~]# groupdel tmooc [root@localhost ~]# grep tmooc /etc/group [root@localhost ~]# grep tarena /etc/group ```