• 用户和组群账户管理


    • 用户和组群账户管理

      用户账号简介

      用户账号是登录系统的唯一凭证,其中root用户是系统的最高管理者,该用户的UID是0,与用户和组群账户相关的配置文件有

      • /etc/passwd
      • /etc/shadow
      • /etc/group
      • /etc/gshadow
      用户账户分类
      • root用户

      用户角色通过UID标识 root用户UID=0,拥有最高权限,也称为超级管理员。拥有超越所有用户和组群,对文件或目录进行读取、修改和删除(在系统正常许可范围内);可以控制对可执行程序的执行和终止;可以对硬件设备执行添加、创建和移除等操作;也可对文件和目录的属性和权限进行修改,以适应系统管理的需要。

      • 系统用户

      也称为虚拟用户、伪用户或假用户,这类用户不仅不具有登录Linux系统的能力,但却是系统运行不可缺少的用户,比如bin、daemon、adm、ftp、mail等,这里用户都是系统自身拥有的,系统用户的UID为1~999.

      • 普通用户

      这类用户是系统管理员创建的,可以操作自己目录的内容,使用系统的权限受限。普通用户UID为1000~60000.

      /etc/passwd文件

      任何用户都可以读取/etc/passwd文件内容。例如:

      [root@localhost ~]# cat /etc/passwd
      root:x:0:0:root:/root:/bin/bash
      bin:x:1:1:bin:/bin:/sbin/nologin
      daemon:x:2:2:daemon:/sbin:/sbin/nologin
      adm:x:3:4:adm:/var/adm:/sbin/nologin
      lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
      sync:x:5:0:sync:/sbin:/bin/sync
      shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
      halt:x:7:0:halt:/sbin:/sbin/halt
      mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
      operator:x:11:0:operator:/root:/sbin/nologin
      games:x:12:100:games:/usr/games:/sbin/nologin
      ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
      nobody:x:99:99:Nobody:/:/sbin/nologin
      systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
      dbus:x:81:81:System message bus:/:/sbin/nologin
      polkitd:x:999:998:User for polkitd:/:/sbin/nologin
      sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
      postfix:x:89:89::/var/spool/postfix:/sbin/nologin
      chrony:x:998:996::/var/lib/chrony:/sbin/nologin
      linux:x:1000:1000:linux:/home/li:/bin/bash
      
      字段字段含义
      用户名 也称为登录名,在系统内用户名应该具有唯一性。在本例中,li就是用户名
      密码 存放加密用户的密码,看到的是x,其实密码已被映射到/etc/shadow文件中
      用户标识号(UID) 在系统内用一个整数标识用户ID号,每个用户的UID都是唯一的,root用户的UID是0,普通用户的UID默认从1000开始,本例中的用户lid的UID是1000
      组群标识号(GID) 在系统内用一个整数标识用户所属的主要组群ID号,每个组群的GID都是唯一的
      用户名全称 用户名描述,可以不设置。在本例中,linux用户的用户全称为linux(使用usermod -c 用户全名 用户名)可以修改用户的全名。
      主目录 用户登录系统后首先进入的目录,linux用户的主目录是/home/li
      登陆shell 用户使用的shell类型,linux系统默认使用的shell是/bin/bash
      用户UID

      用户ID标识,唯一性,UID区间0~60000.使用一些命令可以查看系统UID的最大值

      [root@localhost ~]# cat /etc/login.defs |grep UID_MAX
      UID_MAX                 60000
      SYS_UID_MAX               999
      

      root超级管理员的用户如果将某个用户的UID更改为0,则该用户就会被确认为root用户使用权限。

      /etc/shadow文件

      该文件内容包括:用户及被加密的密码,以及其他/etc/passwd无法包括的内容,比如用户账号的有效期限等。是/etc/passwd的影子文件,但并不是由/etc/passwd创建,是对应互补的关系。 /etc/shadow文件只有root用可以读取和操作,文件的权限不能随便更改为其他用户可读,这样做是非常危险的。 /etc/shadow文件的让你包括9个段位,每个段位之间用":"分割,下面是/etc/shadow文件的部分内容。

      [root@localhost ~]# cat /etc/shadow
      root:$6$M/6IGwJsnpEbbRVM$QIVH755.NUulvLKYT40jztl8bpHenliMuLu.ijsfuAXDss3OYlfXQBAg7rYvAG0e1vIXD1Jw7V4YTA46zjvY30::0:99999:7:::
      bin:*:17834:0:99999:7:::
      daemon:*:17834:0:99999:7:::
      adm:*:17834:0:99999:7:::
      lp:*:17834:0:99999:7:::
      sync:*:17834:0:99999:7:::
      shutdown:*:17834:0:99999:7:::
      halt:*:17834:0:99999:7:::
      mail:*:17834:0:99999:7:::
      operator:*:17834:0:99999:7:::
      games:*:17834:0:99999:7:::
      ftp:*:17834:0:99999:7:::
      nobody:*:17834:0:99999:7:::
      systemd-network:!!:18056::::::
      dbus:!!:18056::::::
      polkitd:!!:18056::::::
      sshd:!!:18056::::::
      postfix:!!:18056::::::
      chrony:!!:18056::::::
      linux:$6$BHFHeYTp$5BT6uGhmira9H/Qr9FJAJy/0VeRnXwVq9/NRebt.n18wJRGfm.q52IEnbXyoqbzwmZ2saeumlookJtNvv0uzJ1:18058:0:99999:7:::
      
      字段字段含义
      用户名 这里的用户名和/etc/passwd中的用户名
      加密密码 密码以及加密,如更有些用户在这里显示的是"!!",则表示这个用户还没有设置密码,不能登陆到系统
      用户最后一次更改密码的时间 从1970年1月1日算起到最后一次修改密码的时间间隔天数。
      密码允许更换前的天数 如果设置为0,则禁用此功能。该字段是指用户可以更改密码的天数
      密码需要更换的天数 如果设置为0,则禁用此功能。 该字段是指用户必须更改密码的天数
      密码更换前警告的天数 用户登录系统后,系统登陆程序题新用户密码将要过期
      账户被取消激活前的天数 表示用户密码过期多少天后,系统会禁用此用户,也就是说系统会不让此用户登陆,也不会提示用户过期,是完全禁用的。
      用户账户过期日期 指定用户账户禁用的天数(从1970年的1月1日开始到账户给禁用的天数)如果这个字段的值为空,账户永久可用。
      保留字段 目前为空,以备将来linux系统发展时使用。
      用户账户设置
      • useradd
      • usermod
      • userdel
      创建账户

      创建一个新账户--->为新用户分配用户UID、组群、主目录和登陆shell等资源,新创建的账号默认是被锁定的,无法使用,需要使用passwd目录设置密码以后才能使用。创建用户账户就是在/etc/passwd文件中为新用户增加一条记录,同时更新/etc/shadon和/etc/group文件

      语法:useradd [选项] [用户名]

      选项含义
      -d(主目录) 新账户每次登陆时所使用的注目录
      -e(过期日) 设置账户的有效期限,加上用户账户停止日期,日期格式为MM/DD/YY
      -f(失效日) 设置在密码过期后多少天即设定密码为失效状态
      -c(用户名全称) 设置用户账户的用户名全称
      -g(主要组群名) 指定用户账户所属的主要组群。组群名必须为现有存在的名称。
      -G(次要组群名) 指定用户账户为多个次要组群的成员。每个组群使用","来隔开
      -m 用户主目录如果不存在则自动建立
      -M 不建立用户主目录,即使/etc/login.defs文件设定要建立用户主目录
      -r 创建系统用户账户。不会建立用户主目录,也不会响应在文件/etc/login.defs中的定义的值。
      -s(shell 类型) 用户登陆后使用的shell类型
      -u(用户UID) 用户的UID值。数字不可以为负值

      例子:创建用户账号zhangsan并设置密码

      [root@localhost ~]# useradd zhangsan
      [root@localhost ~]# cat /etc/passwd|grep zhangsan
      zhangsan:x:1001:1001::/home/zhangsan:/bin/bash
      [root@localhost ~]# passwd zhangsan
      

      对用户账户设置密码和不设置密码的比较

      root@localhost ~]# useradd lisi
      [root@localhost ~]# useradd wangwu
      [root@localhost ~]# passwd wangwu
      Changing password for user wangwu.
      New password: 
      BAD PASSWORD: The password is shorter than 8 characters
      Retype new password: 
      passwd: all authentication tokens updated successfully.
      [root@localhost ~]# cat /etc/passwd|grep lisi
      lisi:x:1002:1002::/home/lisi:/bin/bash
      [root@localhost ~]# cat /etc/shadow|grep lisi
      lisi:!!:18097:0:99999:7:::
      [root@localhost ~]# cat /etc/passwd|grep wangwu
      wangwu:x:1003:1003::/home/wangwu:/bin/bash
      [root@localhost ~]# cat /etc/shadow|grep wangwu
      wangwu:$6$VO0QCht/$XMMLXG/GkOn7YaInrquUnjzDSiju.JzZhYodLIAPZ2uR5BOHXRcWOTAJ/mXPLQGG4AnHNOQMKJENQio8Bedst1:18097:0:99999:7:::
      

      查看/etc/shadow文件,显示在用户lisi的密码字段上显示的“!!",表示该用户还没有设置密码,不能登陆到linux系统上。

      查看/etc/shadow文件,显示在用户wangwu的密码字段上显示是加密的密码,表示该用户以及设置密码,能登陆到linux系统上。

      例子:创建用户moon,并设置该用户UID为1010

      [root@localhost ~]# useradd -u 1010 moon
      [root@localhost ~]# cat /etc/passwd|grep moon
      moon:x:1010:1010::/home/moon:/bin/bash
      

      例子:创建用户newuser,并设置该用户主目录为/home/www

      [root@localhost ~]# useradd -d /home/www newuser
      [root@localhost ~]# cat /etc/passwd|grep newuser
      newuser:x:1011:1011::/home/www:/bin/bash
      

      上图显示newuser用户的主目录是/home/www

      [root@localhost ~]# ls -l /home
      total 0
      drwx------. 2 linux    li       83 Jun 11 09:42 li
      drwx------. 2 lisi     lisi     62 Jul 20 05:06 lisi
      drwx------. 2     1004     1004 62 Jul 20 05:13 moon
      drwx------. 2 wangwu   wangwu   62 Jul 20 05:06 wangwu
      drwx------. 2 newuser  newuser  62 Jul 20 05:19 www
      drwx------. 2 zhangsan zhangsan 62 Jul 20 05:01 zhangsan
      

      使用ls长命令,可以看出用户主目录在创建用户时以及创建了

      例子:创建用户pp,并指定该用户是属于组群root的成员。

      [root@localhost ~]# useradd -g root pp
      [root@localhost ~]# cat /etc/passwd|grep pp
      pp:x:1012:0::/home/pp:/bin/bash
      

      显示用户pp的GID字段是0,0为root组群的GID.下面使用id命令,显示用户pp是属于组群root的成员。

      [root@localhost ~]# id pp
      uid=1012(pp) gid=0(root) groups=0(root)
      
      修改用户账户

      命令语法:usermod [选项] [用户名]

      选项含义
      -G 修改用户所属的次要组群(附加组群)
      -l(新登录名) 修改用户账户名称
      -L 锁定用户密码,使密码无效
      -s(shell类型) 修改用户登录后使用的shell。如果没有,系统将选用系统预设的shell
      -U 解除密码锁定
      -u 修改用户的UID
      -C 修改用户账户的用户名全称
      -d 修改用户登录时的主目录,如果指定-m选项,用户旧目录会移动到新的目录中,如旧目录不存在,则新建目录.单独使用-d时,必须使用mkdir命令手动创建主目录。
      -e 修改账户的有效期限,加上用户账户停止日期,日期格式为MM/DD/YY
      -f 修改在密码过期后多少天即设定密码为失效状态
      -g 修改用户所属的主要组群,组群名必须已存在
      -o 允许使用重复的UID
      -m 移动主目录的内容到新的位置

      例子:修改用户王五的主目录为/home/opop,并自动创建/home/opop

      [root@localhost ~]# ls /home
      li  lisi  moon  pp  wangwu  www  zhangsan
      [root@localhost ~]# cat /etc/passwd|grep wangwu
      wangwu:x:1003:1003::/home/wangwu:/bin/bash
      [root@localhost ~]# usermod -d /home/opop -m wangwu
      [root@localhost ~]# ls /home
      li  lisi  moon  opop  pp  www  zhangsan
      [root@localhost ~]# cat /etc/passwd|grep wangwu
      wangwu:x:1003:1003::/home/opop:/bin/bash
      

      例子:修改用户zhangsan账户的过期日期为2028年12月12日

      [root@localhost ~]# cat /etc/shadow|grep zhangsan
      zhangsan:$6$0ac0Spe6$TjT3lG36EEZTXhU/2d6ecpDRC0.mJXB/UJvHkgrF0FxYd6iSnCD2Zfq2br/rpNrCfjtkWTJmcdNLkug1mH3l3.:18097:0:99999:7:::
      [root@localhost ~]# usermod -e 12/12/2028 zhangsan
      [root@localhost ~]# cat /etc/shadow|grep zhangsan
      zhangsan:$6$0ac0Spe6$TjT3lG36EEZTXhU/2d6ecpDRC0.mJXB/UJvHkgrF0FxYd6iSnCD2Zfq2br/rpNrCfjtkWTJmcdNLkug1mH3l3.:18097:0:99999:7::21530:
      

      查看/etc/shadow文件,显示用户zhangsan的账户过期日期以及更改,21530是2028年12月12日减去1970年1月1日的天数

      例子:修改用户zhangsan的shell类型为/bin/ksh

      [root@localhost ~]# cat /etc/passwd|grep zhangsan
      zhangsan:x:1001:1001::/home/zhangsan:/bin/bash
      [root@localhost ~]# usermod -s /bin/ksh zhangsan
      [root@localhost ~]# cat /etc/passwd|grep zhangsan
      zhangsan:x:1001:1001::/home/zhangsan:/bin/ksh
      
      删除用户账户

      命令语法:userdel [选项] [用户名

      选项含义
      -r 在删除用户是,把用户的主目录和本地邮件存储的目录或文件一同删除
      -f 强制删除用户

      例子:删除用户lisi

      [root@localhost ~]# userdel lisi
      userdel: user 'lisi' does not exist
      [root@localhost ~]# ls /home
      li  lisi  moon  opop  pp  www  zhangsan
      

      使用userdel命令删除用户账户并不会删除该用户的主目录

      例子:删除用户moon,并且在删除该用户的同时一起主目录

      [root@localhost ~]# ls /home
      li  lisi  moon  opop  pp  www  zhangsan
      [root@localhost ~]# userdel -rf moon
      [root@localhost ~]# ls /home
      li  lisi  opop  pp  www  zhangsan
      

      组群账户

      含义:具有某种共同特征的用户集合就是组群。

      • 分类法一

      私有组群:当创建一个新的用户账户时,如果没有指定该用户属于哪一个组群,那么linux就会创建一个和该用户同名的组群,在这个私有组群中只包含这个用户。

      标准组群:普通组群,可以包含多个用户账户,如果使用标准组群,那么在创建一个新的用户账号时,一个指定该用户属于那个组群。

      两者关系:当把其他用户加入到私有组群中,那么这个私有组群就变成标准组群了。

      • 分类法二

      主要组群:当一个用户账号属于多个组群成员时,登录后所属的组群是主要组群,其他的组群是次要的组群,一个用户账户只能属于一个主要组群。

      次要组群:也称附加组群,一个用户账号可以属于多个次要组群。

      配置文件
      • /etc/group

      文件内容包括组群名、组群密码、GID及该组群所包含的用户,每个组群一条记录,一行有4隔断我,每个段位用“:”分隔。

      字段含义
      组群名 组群名称,如组群名root
      组群密码 存放加密的组群密码,看到一个x,密码已被映射到/etc/gshadow文件中
      组群标识号(GID) 在系统内用一个整数标识组群GID,每个组群的GID都是唯一的,默认普通组群的GID从1000开始,root组群的GID是0
      组群成员 属于这个组群的成员,如root组群的成员只有root

      组群GID:类似UID,是一个0开始的正整数,GID为0的组群是roo组群。linux会预留GID号1~999给系统虚拟组群使用,创建新组群GID是从1000开始的,查看系统创建组群默认的GID 范围应该查看/etc/login.defs中的GID_MIN和GID_MAX值,可以使用以下命令查看

      [root@localhost ~]# cat /etc/login.defs|grep GID
      GID_MIN                  1000
      GID_MAX                 60000
      SYS_GID_MIN               201
      SYS_GID_MAX               999
      
      • /etc/gshadow 含义:/etc/gshadow是/etc/group的加密文件,组群密码就是存放在这个文件中。两者是互补的两个文件;每个组群都有一条记录,一行有4个段位,每个段位用":"分隔。
      字段含义
      组群名 组群的名称
      组群密码 密码已经加密,如果有些组群在这里显示的是"!",表示这个组群没有密码。本例中组群zhangsan没有密码。
      组群管理者 组群的管理者有权在该组群中添加、删除用户
      组群成员 属于该组群的用户成员列表,如果有多个用户则用逗号分隔

      组群的账户设置

      • groupadd
      • groupmod
      • groupdel

      1.创建组群账户 命令语法:groupadd [选项] [组群名]

      选项含义
      -g 为组群设置GID
      -r 创建系统组群
      -o 允许使用和别的组群相同的GID创建组群
      -f 即使组群已经存在,还是强制创建组群
      -p 为新组群设置加密的密码

      例子:创建名为ou的组群,并且设置该组群的GID为1300

      [root@localhost ~]# groupadd -g 1300 ou
      [root@localhost ~]# cat /etc/group|grep ou
      dialout:x:18:
      systemd-journal:x:190:
      ou:x:1300:
      

      创建名为chinese的系统组群

      [root@localhost ~]# groupadd -r chinese
      [root@localhost ~]# cat /etc/group|grep chinese
      chinese:x:995:
      

      2.修改组群账户 命令语法:groupmod [选项] [组群名]

      选项含义
      -g 设置组群GID
      -o 重复使用组群GID
      -n 更改组群名称

      例子:修改组群ou的新组群名为shanghai

      [root@localhost ~]# groupmod -n shanghai ou
      [root@localhost ~]# cat /etc/group|grep shanghai
      shanghai:x:1300:
      

      3.删除组群账户 命令语法:groupdel [组群名] 例子:删除组群shanghai

      root@localhost ~]# groupdel shanghai
      [root@localhost ~]# cat /etc/group|grep shanghai
      

      用户和组群账户维护

      • passwd
      • gpasswd
      • su newgrp
      • groups
      • id

      命令语法:passwd [选项] [用户名]

      选项含义
      -d 删除用户密码,仅能以root用户操作
      -k 保持身份验证令牌不过期
      -l 锁住用户账户的密码
      -u 为用户账户解除密码
      -e 终止指名账户的密码
      -x<天数> 密码的最长有效时限(天)
      -n<天数> 密码的最短有效时限(天)
      -w<天数> 在密码过期前多少天开始提醒用户
      -i<天数> 当密码过期后结果多少天该账户会被禁用
      -S 查询用户的密码状态
      -f 强制执行操作

      命令语法:gpasswd [选项] [组群名]

      选项含义
      -a<用户> 将一个用户加入到一个组群中
      -d<用户> 将一个用户从一个组群中删除掉
      -r 取消一个组群的组群密码
      -R 限制其成员访问组
      -A<组群管理员> 指定组群的管理员
      -M<用户> 设置组群的成员列表

      命令语法:su [选项] [用户]

      选项含义
      - 改变登陆shell
      -l 登陆并改变用户shell环境
      -f 适用于csh与tsch,使shell不用去读取启动文件
      -m 不设置环境变量
      -s<shell类型> 指定要执行的shell类型
      -c<命令> 执行一个命令,然后退出所在的用户环境

      例子:把用户root切换为用户it进行登录,并且连shell环境也切换

      [root@localhost ~]# su - it
      [it@localhost ~]$ pwd
      /home/it
      

      root切换为用户it登录,shell环境不需要切换时

      [root@localhost ~]# su it
      [it@localhost root]$ pwd
      /root
      
      • newgrp命令可以让用户账户以另一个组群的身份进行登陆。如果不指定组群名称,则呢武功人品命令会登陆该用户名称的预设组群。

      命令语法:newgrp [组群名]

      • groups命令:可以显示指定用户账户的组群成员身份 groups [用户名]

      • id命令:可以显示用户的UID以及该用户所属组群的UID 命令语法:id [选项] [用户名] 选项|含义 ---|--- -g|显示用户所属主要组群的GID -G|显示用户所属组群的GID(主要组群和次要组群都会列出来) -u|显示用户UID 例子:显示用户it的UID、主要组群的GID以及归属组群的情况

      [root@localhost ~]# id it
      uid=1013(it) gid=1013(it) groups=1013(it)

      groups命令:可以显示指定用户账户的组群成员身份 groups [用户名]

    • id命令:可以显示用户的UID以及该用户所属组群的UID 命令语法:id [选项] [用户名] 选项|含义 ---|--- -g|显示用户所属主要组群的GID -G|显示用户所属组群的GID(主要组群和次要组群都会列出来) -u|显示用户UID 例子:显示用户it的UID、主要组群的GID以及归属组群的情况

    [root@localhost ~]# id it
    uid=1013(it) gid=1013(it) groups=1013(it)

    摘自:《Linux实用教程》人民邮电出版社出版发行 於岳编著
  • 相关阅读:
    luogu P2570 [ZJOI2010]贪吃的老鼠【二分+最大流】
    luogu P5358 [SDOI2019]快速查询【模拟(?)】
    CF360E Levko and Game【贪心+dijsktra】
    bzoj 2632: [neerc2011]Gcd guessing game【贪心】
    bzoj 2535: [Noi2010]Plane 航空管制2【拓扑排序+堆】
    Amazon免费CE2基于docker部署nginx,并实现访问
    使用FlashFXP,密钥方式连接Amazon的CE2实例
    python 提示 AttributeError: module 'json' has no attribute 'dumps'
    ueditor工具栏新增按钮教程
    Express4+Mongodb超简单入门实例
  • 原文地址:https://www.cnblogs.com/mylive/p/11228438.html
Copyright © 2020-2023  润新知