16 - Linux 用户管理

第一节 了解:用户和组的概念

一、认识:用户和组的概念

★ 认识:用户和组的意义

在生活中  :我们每一人就是一个用户,我们所属的每一个集体就是一个组。
在计算机中:登录一台电脑,需要使用用户;
          :运行一个程序,需要使用用户,该用户的权限,也决定了该程序的权限;
          :读写一个文件,需要使用用户;
          :对一个组授权,就是对所有的组成员授权,提高了授权管理效率。

★ 认识:UID和GID的重要性

在所有操作系统中,均是依据UID和GID来判断用户和组的身份,而不是依据用户和组的名称!
 ♦ UID和GID类似于:生活中的身份证号和会员证号
 ♦ 注意1:只要 UID0,它就是超级管理员,拥有最大特权,root用户账户的 UID=0。
 ♦ 注意2:GID 为 0,不意味着拥有特权。
系统在新建用户和组账户过程中,根据<账户类型>来自动递增式分配<UID和GID>,当然,我们也可以自定义。
通常情况下,应当保证<UID和GID><唯一性>

二、了解:用户的分类

★ 用户分为三类:

超级用户:就是root 用户账户,拥有最大特权。
系统用户:也是普通用户账户,不拥有特权,不可登录电脑,专用于程序的运行。
普通用户:就是普通用户账户,不拥有特权,可以登录电脑,专用于人员的登录。

★ 用户的UID预设范围:

          	UID编号范围(CentOS 7/8)    	UID编号范围(CentOS 6)
root用户		0                            	0
系统用户		1-999                       	1-499
普通用户		1000 +                      	500 +

三、了解:用户和组的关系

在这里插入图片描述

四、认识:多用户操作系统的概念

★ 什么是单用户操作系统?

它意味着:一次只能有一个用户使用一台计算机。

★ 什么是多用户操作系统?

它意味着:一次可以有多个用户使用一台计算机。

★ 案例体验:多用户操作系统

## 创建:两个用户,一个叫 user01,另一个叫 user02
useradd user01
useradd user02
## 设置:两个用户的登录密码
echo 'user01:123' | chpasswd
echo 'user02:456' | chpasswd
## 尝试:两个用户同时终端登录
ssh user01@10.0.0.101
ssh user02@10.0.0.101
## 查看:两个用户同时终端登录的登录信息
w

在这里插入图片描述

第二节 掌握:组账户的管理

一、了解:组账户的属性要素

★ 组名称  	必须
★ 组密码  	可选,不常用
★ 组GID  	必须,会自动生成,也可自定义
★ 组成员  	可选,可后期添加

二、管理:组账户

1.创建:组账户

groupadd g01
groupadd g02

2.删除:组账户

groupdel g02

3.添加:组成员

useradd user01
useradd user02
groupmems -a user01 -g g01      ## 添加:单个组成员
gpasswd -a user02 g01           ## 添加:单个组成员

4.删除:组成员

groupmems -d user01 -g g01     ## 删除:单个组成员
gpasswd -d user02 g01          ## 删除:单个组成员

5.重置:组成员

useradd user03
useradd user04
gpasswd -M user03,user04 g01   ## 重置:组成员(可一次性设置:一个或多个组成员)
                               ## 注意:是重置组账户的组成员,而不是重置用户账户的附加组

6.清空:组成员

groupmems -p -g g01

7.列出:组成员

groupmems -l -g g01

8.修改:组账户

语法:groupmod -n <新组名称> <老组名称>      ## 更名:组账户
      ## 选项备注:
      ##     -n    ☚ 改名为 NEW_GROUP
语法:groupmod [-o] -g <新GID> <组名称>      ## 更改:组GID
      ## 选项备注:
      ##     --g   ☚ 将组 ID 改为 GID
      ##     --o   ☚ 允许使用重复的 GID

三、了解:组账户的相关配置文件

★ /etc/group 文件   	## 这是:组账户文件,主要包含:组账户名称、组账户GID号、附加的组成员名称。
★ /etc/gshadow 文件 	## 这是:组账户密码文件,主要包含:组账户名称、组密码、附加的组成员名称。

第三节 掌握:用户账户的管理

一、了解:用户账户的属性要素

★ 用户账户名(姓名)	                   	必须
★ 密码(登录口令)                     	可选,视<用户类型>而定,可后期设置<密码>
★ 用户UID(身份证号码)               	必须,会自动生成,也可自定义
★ 主要组(第一国籍)                	必须,会自动生成,也可自定义
★ 附加组(第N国籍)                	    可选,可后期添加
★ 辅助信息(记录其他的描述性信息)		可选,可后期添加
★ 家目录(用户私密空间))            	可选,视<用户类型>而定
★ 登录Shell(使用什么兵器)          	可选,视<用户类型>而定
★ 密码时限策略                       	可选,采用<默认的密码时限策略>,可后期修改
★ 账户有效期(工作时限)             	可选,视<人事要求>而定,可后期添加

二、管理:用户账户

1.创建:用户账户

★ 语法:useradd [选项] <用户账户名>
         ## 常用选项:
         ##     -u, --uid UID                 新账户的用户 ID
         ##     -o, --non-unique              允许使用重复的 UID 创建用户
         ##     -U, --user-group              创建与用户同名的组
         ##     -N, --no-user-group           不创建同名的组
         ##     -g, --gid GROUP               新账户主组的名称或 ID
         ##     -G, --groups GROUPS           新账户的附加组列表
         ##     -r, --system                  创建一个系统账户
         ##     -M, --no-create-home          不创建用户的主目录
         ##     -m, --create-home             创建用户的主目录
         ##     -b, --base-dir BASE_DIR       新账户的主目录的基目录
         ##     -d, --home-dir HOME_DIR       新账户的主目录
         ##     -s, --shell SHELL             新账户的登录 shell
         ##     -e, --expiredate EXPIRE_DATE  新账户的过期日期
         ##     -f, --inactive INACTIVE       新账户的密码不活动期
         ##     -c, --comment COMMENT         新账户的 GECOS 字段
★ 举例1:创建一个普通用户(其他属性均采用默认设置)
          useradd user01
★ 举例2:创建一个系统用户,不允许其Shell登录、不需要家目录(其他属性均采用默认设置)
          useradd -s /sbin/nologin -r user02  或者  useradd -s /sbin/nologin -M user02
★ 举例3:创建一个普通用户,指定其家目录为</tmp>(其他属性均采用默认设置)
          useradd -d /tmp user03

2.设置/清除:用户密码

passwd                                ## 交互式设置:当前用户的<用户密码>
passwd user01                         ## 交互式设置:指定用户的<用户密码>
echo 'root:a123456!' | chpasswd       ## 非交互式设置:指定用户的<用户密码>
echo 'user01:a123456!' | chpasswd     ## 非交互式设置:指定用户的<用户密码>
passwd -d user01                      ## 清除:指定用户的<用户密码>

3.删除:用户账户

userdel user01      ## 删除<用户账户>,保留<用户家目录>
userdel -r user02   ## 删除<用户账户>,删除<用户家目录>

4.查看:用户账户

id user01

在这里插入图片描述

5.加入/退出:用户账户的附加组

groupadd g01
groupadd g02
useradd -G g01 user01      	## 在创建用户账户的同时,加入指定的附加组
useradd user02
usermod -G g01 user02      	## 针对已经创建的用户账户,退出当前的附加组,然后加入新的附加组
usermod -aG g02 user02   	## 针对已经创建的用户账户,不退出当前的附加组,然后加入新的附加组
usermod -G "" user02        ## 针对已经创建的用户账户,退出当前的附加组

6.修改:用户账户的主要组

★ 什么是主要组?
    主要组也称为<effective group有效组>,它是默认被授予UNIX权限的组。
    用户必须有且只能有1个主要组。
    文件和目录的UNIX权限中,默认将主要组作为所属组来予以授权。
    针对用户家目录和家目录中的内容,系统会实时跟踪并更新:用户的主要组。

useradd user01
groupadd g01
usermod -g g01 user01    ## 针对已经创建的用户账户,修改其主要组

7.修改:用户账户的其他属性

★ 语法:usermod [选项] <用户账户名>
         ## 常用选项:
         ##     -l, --login LOGIN               新的登录名称
         ##     -u, --uid UID                   用户帐号的新 UID
         ##     -o, --non-unique                允许使用重复的(非唯一的) UID
         ##     -g, --gid GROUP                 强制使用 GROUP 为新的<主要组>
         ##     -G, --groups GROUPS       	    重新设置用户的附加组列表 GROUPS
         ##     -a, --append GROUP        	    追加设置用户的附加组,须与 -G 合并使用
         ##                                     注意:不会在<其它附加组>中删除<此用户>
         ##     -r, --system                    创建一个系统账户
         ##     -d, --home HOME_DIR       	    用户的新主目录
         ##     -m, --move-home            	    将家目录内容移至新位置 (仅于 -d 一起使用)
         ##     -s, --shell SHELL               该用户帐号的新登录 shell
         ##     -e, --expiredate EXPIRE_DATE    设定帐户过期的日期为 EXPIRE_DATE
         ##     -f, --inactive INACTIVE         过期 INACTIVE 天数后,设定密码为失效状态
         ##     -c, --comment 注释信息          账户的注释信息
         ##     -L, --lock                      锁定用户帐号
         ##     -U, --unlock                    解锁用户帐号
★ 举例:
   usermod -c "张总" user01         ## 针对已经创建的用户账户,修改其<辅助性描述信息>
   usermod -e "2021-12-31" user01   ## 针对已经创建的用户账户,修改其<账户有效期>
   usermod -l "zhangzong" user02    ## 针对已经创建的用户账户,更改其<用户账户名>

8.更改:账户过期策略

chage -l root                                 ## 显示:<root用户>当前的<密码更改和过期策略>
chage -E 2020-03-28 root                      ## 设置:<用户账户>的<帐户过期日期=2020-03-28>
chage -E $(date -d +180days +%Y-%m-%d) root   ## 设置:<用户账户>的<帐户过期日期=180天之后>

9.锁定/解锁:用户账户

★ 锁定:用户密码
usermod -L user01  或者  passwd -l user01
★ 解锁:用户密码
usermod -U user01  或者  passwd -u user01

10.id命令:查看<用户帐户UID>及<所属组GID>

★ 用法:id [OPTION]... [USER]
         ☞ 选项:
            不带任何选项      显示:一些可供识别用户身份的有用信息
            -a               忽略:<与其他版本>之间的兼容性
            -g, --group      查看:<用户><主要组><GID>
            -G, --groups     查看:<用户>隶属的所有的<><GID>
            -n, --name       查看:<用户和组><NAME名称>,而不是<UID/GID号>,请结合-u、-g、-G来使用
            -r, --real       查看:<用户和组><UID/GID号>,而不是<NAME名称>,请结合-u、-g、-G来使用
            -u, --user       查看:<用户><UID>
            -Z, --context    查看:<当前用户><安全上下文>
★ 用例:
   id user04
   id -un root    ## 显示:<用户账户>的<用户名>
   id -gn root    ## 显示:<用户账户>的<主要组的名称>
   id -ur root    ## 显示:<用户账户>的<用户UID号>
   id -gr root    ## 显示:<用户账户>的<主要组的GID号>

11.chsh:设置<用户的shell解释器>

echo $SHELL                 ## 查看:当前的<shell解释器>
chsh -l                     ## 列出:<shell解释器>列表,其实就是显示</etc/shells文件>中的内容

在这里插入图片描述

chsh -s /bin/bash user01    ## 设置:<user01用户>的<shell解释器>为</bin/bash>

12.chfn:编辑<用户辅助信息>

★ 用法:chfn [选项] [用户名]
         ☞ 选项:
            -f, --full-name <全名>      真实姓名
            -o, --office <办公>         办公地址
            -p, --office-phone <电话>   办公电话
            -h, --home-phone <电话>     住宅电话
★ 用例:
   chfn -f 张三 -o 武汉 -p 027-88888888 -h 6666666 user01
   cat /etc/passwd | grep -E "^user01"

三、了解:用户账户的相关配置文件

1.简介:用户账户的相关配置文件

/etc/passwd          文件   ## 保存:<用户账户>的<账户信息>
/etc/shadow          文件   ## 保存:<用户账户>的<密码信息>
/etc/skel/           目录   ## 定义:<用户home家目录>的<模板内容>
/etc/default/useradd 文件  	## 定义:<useradd命令>的<默认参数>

2.详解:/etc/passwd 配置文件

★ 格式:<:冒号>分隔,一共为7段,每一行记录一个用户账号信息

root:x:0:0:root:/root:/bin/bash
※   字段1:用户账号的名称
※   字段2:用户账号的用户密码,此字段值为x,而真正的组密码则存储在</etc/shadow>中
※   字段3:用户账号的<UID>
※   字段4:用户账号所属的主要组GID,即:用户登录时,一开始就属于这个组
※   字段5:用户账号的注释信息
※   字段6:用户账号的home家目录
※   字段7:用户账号的登录shell

3.详解:/etc/shadow 配置文件

★ 格式:<:冒号>分隔,一共为8段,每一行记录一个用户账号信息

user01:$6$aK9cnC......WcPL0HF0:18865:0:99999:7:1:18992:
※   字段1:用户账号的名称
※   字段2:默认MD5加密的用户密码,如果此字段值以 ! 开头,则表示:密码被 usermod -L 锁定
※   字段3:用户密码的最后一次的更改日期(天数,以1970.1.1为参照点)
※   字段4:用户密码的最短使用期限(天数)
※   字段5:用户密码的最长使用期限(天数)
※   字段6:提前警告密码过期的天数,即:临近密码过期时,可以提前多少天予以警告(天数)
※   字段7:密码到期之后的宽限期(天数)
※   字段8:用户账号的账号过期日期(天数,以1970.1.1为参照点)
※   字段9:保留

★ 注意:

提问1:两个用户的密码都是 123456 一样的,那么 shadow 中加密的 HASH 值一样吗? 
       答:不一样,因为采用了 salt(撒盐哈希算法)。
           salt(撒盐哈希算法)是通过对密码添加一个随机前缀或随机后缀之后,再计算HASH值,从而实现针对<相同的密码>计算出<不同的HASH值>,从而防止<查表法、反向查表法和彩虹表>针对<密码HASH值>的暴力破解。
提问2:把 2 段加密的互换还能登陆吗?salt在什么时候执行的?
       答:可以登录。
           在设置用户密码的过程中,系统就自动通过salt(撒盐哈希算法)来保护了密码的机密性。

4.详解:/etc/skel/ 目录

★ /etc/skel 目录 :包含着<用户登录>之后所需的<用户级别的环境配置文件>。
    ☞ 如果我们创建了一个<用来登录主机的用户账户>,则系统会自动复制</etc/skel 目录>中的<用户级别的环境配置文件>到<用户的家目录>,从而为用户操作提供<必需的环境配置参数>,否则,<用户>除了不能获得<用户级别的环境配置>之外,还将无法调用<etc/bashrc 全局环境配置文件>。

ls -al /etc/skel/

在这里插入图片描述

5.解析:/etc/default/useradd 配置文件

★ /etc/default/useradd 配置文件:定义了<useradd命令>的<默认参数>。

cat /etc/default/useradd
    ## 显示内容如下:
    # useradd defaults file
    GROUP=100              ## 设置:<用户组账号>的<起始GID>
    HOME=/home             ## 设置:<用户账号>的<home家目录>
    INACTIVE=-1            ## 设置:<用户密码>的<宽限期>,-1表示<永久有效>
    EXPIRE=                ## 设置:<用户帐户>的<到期时间>,<空>表示:禁用<此限制>
    SHELL=/bin/bash        ## 指定:<shell解释器>
    SKEL=/etc/skel         ## 设置:<家目录>的<模板目录>
    CREATE_MAIL_SPOOL=yes  ## 设置:是否创建<用户邮件目录>,<yes>表示:创建

第四节 管理:用户密码策略

一、管理:用户密码时限策略

1.方式1:全局性设置(/etc/login.defs 文件)

★ 了解:/etc/login.defs 文件内容 ☚ 对root 账户及root 操作无效

● 功能:
  全局性定义:用户的站内邮件目录
  全局性定义:用户的用户密码策略
              ☛ PASS_MAX_DAYS   99999  # 用户密码的最长使用期限(天数)
                                        # 99999  表示:密码永不过期
                                        # N      表示:当天+N天之后,密码将会过期,须更新密码
                                        # 1      表示:当天+1天之后,密码将会过期,须更新密码
                                        # 0      表示:当天之后,密码将会过期,须更新密码
              ☛ PASS_MIN_DAYS     0    # 用户密码的最短使用期限(天数)
                                        # 0      表示:可以立即修改
                                        # 非0	  表示:N天之后,方可修改
              ☛ PASS_MIN_LEN      5    # 密码最小长度
              ☛ PASS_WARN_AGE     7    # 提前警告密码过期的天数
                                        # 0     	表示:不提前警告
                                        # 非0  	表示:提前 N 天,当用户登录时,提醒用户修改密码
              注意:
                  ♦ 由于:Linux 系统以<UTC格林格林威治统一时间 00:00 点>作为天数的计时点
                  ♦ 因此:中国时区的Linux 系统就显现为:以<CST 8:00 点>作为天数的计时点
  全局性定义:用户ID号的生成策略
  全局性定义:组ID号的生成策略
  全局性定义:是否创建用户home家目录、用户home家目录的umask 值
  全局性定义:用户密码的加密算法
              ☛ ENCRYPT_METHOD   SHA512  # 设置:用户密码的加密算法

二、管理:用户密码复杂性策略

1.方式1:/etc/login.defs 文件(用于 CentOS 6)

★ 了解:/etc/login.defs 文件内容 ☚ 对root 账户及root 操作无效

● 功能:
  全局性定义:用户的站内邮件目录
  全局性定义:用户的用户密码策略
              ☛ PASS_MAX_DAYS   99999   # 用户密码的最长使用期限(天数)
              ☛ PASS_MIN_DAYS   0       # 用户密码的最短使用期限(天数)
              ☛ PASS_MIN_LEN    5       # 密码最小长度
                                         # 需要<pam_cracklib 模块>,用于CentOS 6
                                         # CentOS 7 默认取消了对<pam_cracklib 模块>的使用
              ☛ PASS_WARN_AGE   7       # 提前警告密码过期的天数
  全局性定义:用户ID号的生成策略
  全局性定义:组ID号的生成策略
  全局性定义:是否创建用户home家目录、用户home家目录的umask 值
  全局性定义:用户密码的加密算法
              ☛ ENCRYPT_METHOD  SHA512  # 设置:用户密码的加密算法

2.方式2:/etc/security/pwquality.conf(用于 CentOS 7)

★ CentOS7/RHEL7 开始使用pam_pwquality模块进行密码复杂性策略的控制管理。
★ pam_pwquality 模块替换了Centos6/RHEL6中的pam_cracklib 模块,并向后兼容。
★ 了解:/etc/security/pwquality.conf

retry=N    	定义:登录/修改密码失败时,可以重试的次数;
Difok=N    	定义:新密码中必须有几个字符要与旧密码不同。
                  但是如果新密码中有1/2以上的字符与旧密码不同时,该新密码将被接受;
minlen=N  	定义:用户密码的最小长度;
dcredit=N  	定义:用户密码中必须包含多少个数字;
ucredit=N  	定义:用户密码中必须包含多少个大写字母;
lcredit=N  	定义:用户密码中必须包含多少个小些字母;
ocredit=N  	定义:用户密码中必须包含多少个特殊字符(除数字、字母之外);
                  如果 =-1 表示:至少有一个

★ 了解:authconfig 命令

命令语法:authconfig [选项] {--update | --updateall}
          ## 常用选项:
          ##     --passminlen=<number>        	    密码最小长度
          ##     --passminclass=<number>      	    密码中,字符类的最小数量
          ##     --passmaxrepeat=<number>    	    密码中,连续相同字符的最大数量
          ##     --passmaxclassrepeat=<number>	    密码中,连续同类字符的最大数量
          ##     --enablereqlower                	密码中至少需要一个小写字符
          ##     --disablereqlower               	密码中不需要小写字符
          ##     --enablerequpper               	密码中至少需要一个大写字符
          ##     --disablerequpper               	密码中不需要大写字符
          ##     --enablereqdigit                 	密码中至少需要一个数字
          ##     --disablereqdigit                	密码中不需要数字
          ##     --enablereqother                	密码中至少需要一个其他字符
          ##     --disablereqother                	密码中不需要其他字符
          ##     --update                        	采用<新设置>来更新<配置文件>
          ##     --updateall                      	采用<新设置>来更新<所有配置文件>

★ 案例演示:仅限制密码最小长度 10 位,不限制其他内容

authconfig --passminlen=10 \
           --disablereqlower \
           --disablerequpper \
           --disablereqdigit \
           --disablereqother \
           --update
useradd user03
echo 'user03:123' | chpasswd
su -l user03
passwd

在这里插入图片描述

★ 课后作业

1.当前服务器需要运行一个程序,为了防止程序因漏洞造成的非法提权隐患,要求该程序以一个test用户身份来运行,请问:我应该如何创建这个test用户?
2.现在有一个user01用户,它当前隶属于kaifa开发组,现在因为工作需要,需要进入cheshi测试组开展工作,同时保留他的kaifa开发组成员身份,请问:我该如何配置user01用户加入cheshi测试组?
3.当前zhangsan张三用户试用期3个月已过,公司决定正式录用,合同期从当天日期开始计算,为期一年,请问:我该如何配置zhangsan张三用户,让其用户账户的有效期顺延一年?
4.当我cat查看/etc/shadow文件时,发现user01用户的密码字段是以 ! 开头,请问:这说明了什么?
5.现在liujun刘军用户因工作需要,被暂时调离了工作岗位,请问:出于工作维系与安全考虑,我该如何处置liujun刘军用户?
6.由于 root 用户大家都知道,因此我想让jack杰克用户直接具备root用户一模一样的特权。请问:我该如何做?
7.由于大家密码安全意识淡薄,因此我需要在密码安全策略方面,增加密码的最小长度限定。请问:我该如何做。
8.我创建了一个tom汤姆用户,但是我不小心执行了rm -rf /home/tom/.*命令,从这之后,每当tom用户登录之后,就会看到如下图的命令行提示符:
   在这里插入图片描述
   请问:我该如何使之恢复正常?
9.企业A有三个部门,分别为:销售部、财务部、生产部。
   销售部有三名员工
   财务部有二名员工
   生产部有四名员工
   总经理:王二
   要求:每个部门的员工需要隶属于每个部门小组。
              总经理要隶属于所有的部门小组。
   要求:销售部员工小张离职,你该如何处理其用户账户?
              生产部员工小王暂时借调到销售部协助工作,你该如何处理其用户账户?
              财务部员工小赵结婚,需要停薪留职,你该如何处理其用户账户?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值