Linux-8 用户管理

Linux-8 用户管理

什么是用户?
  • Linux/Windows通过用户来管理和维护系统;

    • Windows下的管理员用户:Administrator
    • Linux下的管理员用户:root
  • Windows/Linux都是多用户系统

    • Windows同一时间只能使用1个用户
    • Linux可以多用户同时登陆,互相之间不影响
  • 用户识别的本质(Linux如何识别用户)

    • 人类:看用户名
    • Linux识别用户通过UID(用户的id号码)
      • root用户的UID是0
    [root@destiny ~]# id
    uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    [root@destiny ~]# id root
    uid=0(root) gid=0(root) groups=0(root)
    
  • Linux用户分类

    用户分类作用特点
    root(uid 0)管理维护整个系统老子天下第一
    普通用户(uid>=1000)只能查看和管理自己的一亩三分地管理特定服务
    虚拟用户(傀儡用户)(uid 1~1000)让linux下面服务正常运行所需要的为了服务正常运行所需要,并不需要登录到系统,设置密码,切换用户
    [root@destiny ~]# id hanyi
    uid=1000(hanyi) gid=1000(hanyi) groups=1000(hanyi)
    
为什么要有用户
  • Linux系统日常维护需要使用用户
  • 服务/进程运行也是需要用户
用户相关文件-/etc/passwd(熟练)
image-20230108112736169
  • /etc/passwd并不是用来记录密码
  • 记录的是用户的信息:用户名、uid、家目录、命令解释器
  • 格式:用户名:密码:UID:GID:用户说明信息:用户的家目录:用户使用的命令解释器shell
    • 密码:存放账户的口令,暂用x表示,密码保存在/etc/shadow
    • UID:user id 身份证号码 用户id
    • GID:group id 户口本号码、家庭号码 组id
    • 一般UID和GID是一样的
    • root家目录是/root,普通用户家目录存在/home/username(可自定义)
  • 用户使用的命令解释器
    • /bin/sh和/bin/bash是普通用户或者root用户
    • /sbin/nologin说明该用户是虚拟用户/傀儡用户
    • /bin/sh是/bin/bash的软链接,在一般的linux系统当中,使用sh调用执行脚本相当于打开了bash的POSIX标准模式,也就是说 /bin/sh 相当于 /bin/bash --posix
    • /bin/sh执行过程中,若出现命令执行失败,则会停止执行;/bin/bash执行过程中,若命令执行失败,仍然会继续执行
    • Ubuntu原来的命令解释器叫做/bin/dash
    • unix的命令解释器叫做csh或者tcsh
用户相关文件-/etc/shadow(了解)
image-20230108114400106
[root@destiny ~]# man 5 shadow
[root@destiny ~]# cat /etc/shadow
  • 密码信息

    字段名称						注释说明
    1.用户登陆名					//用户的账号名称
    2.加密后的密码				//用户密码,这时加密过的口令
    ------------------了解----------------------------------------------
    3.最近一次密码更改时间		//从1970年到最近一次更改密码时间之间过了几天
    4.密码最少使用几天				//密码最少使用几天才可以更改密码(0表示无限制)
    5.密码最长使用几天				//密码使用多少天需要修改密码(默认99999永不过期)
    6.密码到期前警告期限				//密码过期前多少天提醒用户更改密码(默认是过期提前7天警告)
    7.密码到期后保持活动的天数		//在此期限内,用户依然可以登录系统并更改密码,指定天数过后,账户								被锁定
    8.账户到期标志				//从1970年起,账户在这个日期前可使用,到期后失效
    9.标志							//保留
    
  • 查询某个特定的用户是否存在

    1. 使用grep

      [root@destiny ~]# grep "test" /etc/passwd | wc -l
      1		-->说明用户存在;则跳过判断;
      2		-->说明用户不存在;则进行创建操作;
      
    2. 使用id

      id username
      [root@destiny ~]# id root
      uid=0(root) gid=0(root) groups=0(root)
      
      $?  # 判断上一次的命令是否执行成功;0 成功;其他任何数字都是失败;
      
  • 创建用户会在系统的哪个配置中保存信息

    • /etc/passwd:用户信息;

      • root:x:0:0:root:/root:/bin/bash		#以冒号为分隔符
        

        第一列:用户名称

        第二列:用户的密码;x——>不可见——>/etc/shadow

        第三列:用户的UID

        第四列:用户组的GID

        第五列:用户的描述信息;(手机号;等等)

        第六列:用户的家目录

        第七列:用户的登录Shell类型 /bin/bash——>正常登录 /sbin/nologin——>禁止登陆

    • /etc/shadow:密码信息;

      • bin:*:18535:0:0:99999:7:2:66275:
        

        第一列:用户名称

        第二列:用户的密码;(一段不可读的密文;(* !! 说明这个用户没有密码;))

        第三列:最近一次变更密码,用户从1970年 到现在过了多少天;

        第四列:密码的最短使用天数;0为不限制;

        第五列:密码最长使用的天数;99999为不限制;

        第六列:密码到期前7天,系统会警告

        第七列:密码到期后,密码过期后2天强制提示用户更改密码

        第八列:账户失效时间,从1970年起,账户在这个日期前可使用,到期后失效;

    • 管理用户和密码的方式,不仅仅只有用户+密码这一种

      • 密钥;
      • 堡垒机;
      • ldap;
  • 如何创建用户,删除用户,修改用户?

    • 创建用户

      • useradd

      • adduser

      • [root@destiny ~]# which useradd
        /usr/sbin/useradd
        [root@destiny ~]# which adduser
        /usr/sbin/adduser
        
        # 它们都在同一个目录下
        
        [root@destiny ~]# ll /usr/sbin/adduser
        lrwxrwxrwx. 1 root root 7 Dec  6 16:55 /usr/sbin/adduser -> useradd
        
      • #1. 创建bgx用户,UID5001,基本组students,附加组sa 注释信息:2019 new student,登录shell:/bin/bash
        # 先创建组
        [root@destiny ~]# groupadd sa
        [root@destiny ~]# groupadd students
        # 再创建用户 useradd
        	# -u:指定UID
        	  -g:指定组名称
        	  -G:指定附加组名称
        	  -c:附加描述信息(可忽略)
        	  -s:指定登录Shell窗口的类型
        [root@destiny ~]# useradd -u 5001 -g students -G sa -c "2019 new student" -s /bin/bash bgx
        [root@destiny ~]# id bgx
        uid=5001(bgx) gid=1002(students) groups=1002(students),1001(sa)
        
        
        #2. 创建mysql系统 用户,
        	# -M:不建立用户家目录,
        	# -s:指定nologin使其用户无法登录系统
        	# -r:创建系统用户
        [root@destiny ~]# useradd mysql -r -M -s /sbin/nologin
        [root@destiny ~]# id mysql
        uid=996(mysql) gid=994(mysql) groups=994(mysql)
        
      • 基本组:原生家庭;

        附加组:认来的;

        ——————————>有一些操作无法执行;但是附加组是有权限的;加入附加组;就具备操作这类资源的权限;

    • 修改用户

      • usermod

      • #选项
        	# -u:指定要修改用户的UID
        	# -g:指定要修改用户基本组
        	# -G:指定要修改用户附加组,使用逗号隔开多个附加组,覆盖原有的附加组
        	# -d:指定要修改用户家目录
        	# -s:指定要修改用户的bash Shell
        	# -c:指定要修改用户注释信息
        	# -l:指定要修改用户的登录名
        	# -L:指定要锁定的用户
        	# -U:指定要解锁的用户
        	
        # 1.检查此前创建的用户信息
        [root@destiny ~]# grep "bgx" /etc/passwd
        bgx:x:5001:1002:2019 new student:/home/bgx:/bin/bash
        # 2.修改bgx用户uid,gid,附加组
        [root@destiny ~]# groupadd -g 5008 network_sa
        [root@destiny ~]# groupadd -g 5009 devops
        [root@destiny ~]# usermod -u 6001 -g5008 -a -G 5009 bgx
        # 3.修改bgx用户的注释信息,用户家目录,登录shell,登录名
        [root@destiny ~]# usermod -c "2019 new student" -md /bgx -s /bin/sh -l change_bgx bgx
        #检查是否修改成功
        [root@destiny ~]# grep "bgx" /etc/passwd
        change_bgx:x:6001:5008:2019 new student:/bgx:/bin/sh
        [root@destiny ~]# id change_bgx
        uid=6001(change_bgx) gid=5008(network_sa) groups=5008(network_sa),1001(sa),5009(devops)
        [root@destiny ~]# ll -d /bgx
        drwx------. 2 change_bgx network_sa 62 Jan 12 08:44 /bgx
        
    • 删除用户

      • userdel

      • #选项 -r:删除用户同时删除它的目录
        # 1.删除user1用户,但不删除用户家目录和mail spool
        [root@destiny ~]# userdel user1
        
        # 2.-r参数可以连同用户家目录一起删除(慎用)
        [root@destiny ~]# userdel -r user1
        
        # 有进程正在使用该用户,无法删除;只有进程退出后,用户没有被占用,才可以处理;
        [root@destiny ~]# userdel www
        userdel: user www is currently used by process 2559
        
    • 与用户相关的还有很多命令,以下简单列举一些,但都不是常用命令,所以了解即可

      1. 使用finger命令查询用户信息以及登录信息,示例:finger UserName
      2. 使用chfn命令修改用户信息,示例:chfn UserName
      3. 使用chsh命令修改用户登录Bash Shell,示例:chsh UserName
      4. 使用who、whoami、w检查用户登陆情况
  • 如何为用户设定密码,又如何修改密码?

    1. 不能太简单;容易被暴力破解;

    2. 太复杂;记不住;

      不用记住密码;就要复杂;——>专门存储密码的文件或软件;lastpass 1password

      使用passwd命名来实现:

      1. 超级管理员

        1. 随意修改任何人的密码
        2. 密码强度可以随意
      2. 普通用户执行

        1. 仅修改自己的,不可以修改其他人
        2. 密码强度必须要满足8个字符及以上
      3. passwd使用方法:

        交互式修改密码:

        ​ passwd username

        #root用户
        [root@destiny ~]# passwd dba
        Changing password for user dba.
        New password: 
        BAD PASSWORD: The password is shorter than 8 characters
        Retype new password: 
        passwd: all authentication tokens updated successfully.
        
        #普通用户
        [dba@destiny ~]# passwd dba
        passwd: Only root can specify a user name.
        [root@destiny ~]# passwd
        Changing password for user dba.
        Changing password for dba.
        (current) UNIX password:
        New password: 
        BAD PASSWORD: The password is shorter than 8 characters
        New password: 
        Retype new password: 
        passwd: all authentication tokens updated successfully.
        

        非交互式修改密码:

        [dba@destiny ~]# echo "123" | passwd --stdin dba
        Changing password for user dba.
        passwd: all authentication tokens updated successfully.
        

        ​ 强度较高的密码:

        # -l 长度
        # -d 数字
        # -c 小写
        # -C 大写
        # -s 特殊字符
        [root@destiny ~]# mkpasswd -l 10 -d 3 -c 3 -C 3 -s 1
        0BAuH|8hz0
        [root@destiny ~]# mkpasswd -l 10 -d 3 -c 3 -C 3 -s 1
        6jj|JsF90Y
        
        #设定一个随机密码
        [root@destiny ~]# echo "$(mkpasswd -l 10 -d 3 -c 3 -C 3 -s 1)" | tee ok.txt  | passwd --stdin dba
        Changing password for user dba.
        passwd: all authentication tokens updated successdully.
        [root@destiny ~]# cat ok.txt
        Hp7uHEc=32
        
用户创建的流程
  • 系统创建用户参考的两个配置文件

    • /etc/login.defs

      [root@destiny ~]# grep -vE "^#|^$" /etc/login.defs
      MAIL_DIR	/var/spool/mail
      PASS_MAX_DAYS	99999
      PASS_MIN_DAYS	0
      PASS_MIN_LEN	5
      PASS_WARN_AGE	7
      # 定义普通用户的UID范围
      UID_MIN                  1000
      UID_MAX                 60000
      # 定义系统用户的UID范围
      SYS_UID_MIN               201
      SYS_UID_MAX               999
      # 定义组的GID范围
      GID_MIN                  1000
      GID_MAX                 60000
      #定义系统组的GID范围
      SYS_GID_MIN               201
      SYS_GID_MAX               999
      
      CREATE_HOME	yes
      UMASK           077
      USERGROUPS_ENAB yes
      ENCRYPT_METHOD SHA512
      
    • /etc/default/useradd

      # useradd defaults file
      GROUP=100
      HOME=/home	#把用户的家目录建在/home中
      INACTIVE=-1		#是否启用账号过期停权,-1表示不启用
      EXPIRE=		#账号终止日期,不设置表示不启用
      SHELL=/bin/bash		#新用户默认所有的shell类型
      SKEL=/etc/skel		#配置新用户家目录的默认文件存放路径
      CREATE_MAIL_SPOOL=yes	#创建mail文件
      
  • 当使用useradd创建用户时,创建的用户家目录下会存在.bash_*环境变量相关的文件,这些环境变量文件默认从/etc/skel目录中拷贝。这个默认拷贝环境变量为u之是由/etc/defaults/useradd配置文件中定义的

    #故障案例,在当前用户家目录执行了rm -rf .*,喜爱次登陆系统时出现-bash-4.1$,如何解决:
    -bash-4.1$ cp -a /etc/skel/.bash* ./
    -bash-4.1$ exit
    [root@destiny ~]# 	#重新连接即可恢复
    
  • 如果在创建时,我们自行指定了参数,那么优先使用定义的;如果没有定义则使用默认配置(/etc/login.defs | /etc/default/useradd)

用户组如何管理
  • 什么是组?

    在整个网络中,各个访问网络的用户的权限可能是各不相同的,可以将具有相同权限的用户划为一组。

  • 组的分类

    • 默认组:创建与用户同名的组;
    • 基本组:用户的主要的组; -g 指定
    • 附加组:额外指定的组; -G 指定
    • useradd kk -G video,book
      • 创建kk用户;创建一个默认组kk;
      • 将kk用户添加到video组 和 book组;
  • 创建组

    groupadd

    选项:-g :指定gid

    [root@destiny ~]# groupadd g1 -g 1456
    [root@destiny ~]# tail -1 /etc/group
    g1:x:1456:
    
    • 四列:
      1. 组名称
      2. 组密码
      3. 组gid
      4. 附加组成员
  • 修改组

    groupmod

    [root@destiny ~]# tail -1 /etc/group
    g1:x:1456:
    [root@destiny ~]# groupmod g1 -g 5656
    [root@destiny ~]# tail -1 /etc/group
    g1:x:5656:
    
  • 删除组

    groupdel

    [root@destiny ~]# groupdel g1
    
    • 组中存在成员怎么办?

      • 附加组还是基本组

        • 附加组:

          如果组中只有附加组成员,直接删除;用户附加组信息会自动被移除;

        • 基本组

          1. 直接创建用户,会创建一个同名的组

            [root@destiny ~]# useradd nice
            [root@destiny ~]# id nice
            uid=1007(nice) gid=1010(nice) groups=1010(nice)
            
            #用户存在,不可以直接删除组
            [root@destiny ~]# groupdel nice
            groupdel: cannot remove the primary group of user 'nice'
            
          2. 创建一个组;有一些成员加入,该如何删除该组;

            [root@destiny ~]# useradd zhangsan -g dev
            [root@destiny ~]# useradd lisi -g dev
            [root@destiny ~]# id zhangsan
            uid=1007(zhangsan) gid=1010(dev) groups=1010(dev)
            [root@destiny ~]# id lisi
            uid=1008(lisi) gid=1010(dev) groups=1010(dev)
            [root@destiny ~]# groupdel dev
            groupdel: cannot remove the primary group of user 'zhangsan'
            
            # 移除所有用户即可删除该组
            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游子无寒衣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值