• linux用户及用户组的分类、管理


    一、分类

    1.用户和用户组分类

    (1)用户分类

    • 超级用户(root)——它具有一切权限,只有进行系统维护(例:建立用户)或其他必要情形下才用超级用户登录,以避免系统出现安全问题。---UID:0
    • 系统用户(伪用户)——是linux系统正常工作所必需的内建用户---UID:201-999
    • 普通用户——是为了让使用者能够使用linux系统资源而建立的---UID:1000-60000

    (2)用户组分类

    • 基本组(私有组):创建用户时,默认情况下创建一个和用户同名的组
    • 附加组(公共组):可以容纳多个用户。
    • 系统组:创建系统时,创建一个和系统同名的组。

    在linux中,用户账号、密码、用户组信息和用户密码均是放在不同的配置文件中的

    文件功能文件名称
    用户账号文件/etc/passwd
    用户密码文件

    /etc/shadow

    用户组账号文件/etc/group
    用户组密码文件/etx/gshadow

    2.用户及组文件

    (1)用户账号文件---/etc/passwd

    超级用户root:x:0:0:root:/root:/bin/bash

                      账户名称:密码占位符:UID:GID:个人资料:主目录:shell

    字段说明

    字段含义
    账号名称用户登录linux系统使用的名称
    密码占位符此处只是密码占位符“x” 或“*”。若为“x”,说明密码经过了shadow的保护
    UID用户标识,数值,用来区分不同用户
    GID用户所在基本组的标识
    个人资料记录用户完整姓名、地址等等个人信息
    主目录

    用户的主目录(家目录)(普通用户的主目录,在home目录下面,和用户名同名)

    Shell

    定义用户登录后激活的Shell,默认是Bash Shell

    不允许登录:/sbin/nlogin;不允许交互:/bin/false

    (2)用户密码文件---/etc/shadow


    账号名称:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

    字段说明

    字段含义
    账号名称登录名
    加密口令使用SHA-512/SHA-256/MD5算法加密后的密码
    最后一次修改时间以距离1970年1月1日的天数表示
    最小时间间隔密码多少天内不能修改。默认为0,表示不限制
    最大时间间隔密码多少天内必须修改。默认99999,表示不进行限制
    警告时间提前多少天警告密码将过期,默认7天,0为不提供警告
    不活动时间密码过期多少天禁用用户
    失效时间以距离1970年1月1日的天数表示,默认为空,表示永久可用
    标志保留

    例:计算用户上次修改密码的日期

    1. [root@server ~]# head -1 /etc/shadow
    2. root:$6$ySIbEt.2ieNLyZRD$XC4ssD7iMSiGzJ.2wxGrH9tKSbwmetdtE75aKp9WtnH.0HiCC7zzD7DpAPIqT5OVO1rJ9RFA6ycE9KJ9Ht9CK/:19286:0:99999:7:::
    3. [root@server ~]# date -u -d "1970-01-01 UTC $((19286 * 86400 )) seconds"
    4. Fri Oct 21 00:00:00 UTC 2022

    (3)用户组账号文件---/etc/group


    系统中的每一个组,在/etc/group文件中都有一行记录

    字段说明:

    字段说明
    Groupname组的名字
    Passwd组的加密口令
    GID是系统区分不同组的
    Userlist用“,”分开的用户名。列出的是附加组的成员

    (4)用户组密码文件 --- /etc/gshadow

    二、管理

    1.用户

    (1)创建用户:

    • 格式: useradd [选项]
    • 常用选项:
    选项作用
    -c(注释信息)设定与用户相关的说明信息
    -d(目录)设定用户的家目录
    -e(YYYY-MM-DD)设定用户失效日期,过期不能使用该账号
    -f(天数)指定密码到期后多少天账号被禁用。0--到期立即禁用;-1--过期不被禁用
    -g(组名或GID号)为用户指定所属的基本组,该组在指定时必须已存在
    -M不创建用户家目录
    -N不创建与用户名同名的基本组
    -p(密码)指定用户的登录密码
    -s(shell)指定用户登陆使用的Shell,默认bash
    -u(用户号)设定账号UID,默认已有用户的最大UID加1。若有-o选项,则可重复使用其它用户标识号

    <1> 示例1:创建用户user1

    1. [root@server ~]# useradd user1
    2. [root@server ~]# grep user1 /etc/passwd---在passwd中查看含有user1的行
    3. user1:x:1001:1001::/home/user1:/bin/bash
    4. [root@server ~]# grep user1 /etc/group---在group中查看含有user1的行
    5. user1:x:1001:

    <2> 示例2:创建用户user2,uid为1111

    1. [root@server ~]# useradd -u 1111 user2
    2. [root@server ~]# grep user2 /etc/group
    3. user2:x:1111:
    4. [root@server ~]# grep user2 /etc/passwd
    5. user2:x:1111:1111::/home/user2:/bin/bash

    <3> 示例3:创建用户mysql,说明信息‘mysql server’,系统账号,可以登录

    1. [root@server ~]# useradd -c 'mysql server' -r mysql
    2. [root@server ~]# grep mysql /etc/passwd
    3. mysql:x:977:975:mysql server:/home/mysql:/bin/bash

    <4> 示例4:创建用户li4,指定用户的家目录为/usr/li4

    1. [root@server ~]# useradd -d /usr/li4 li4
    2. [root@server ~]# grep li4 /etc/passwd
    3. li4:x:1112:1112::/usr/li4:/bin/bash

    <5> 示例5:创建用户,为其设置密码

    1. [root@server ~]# openssl passwd -1 -salt `openssl rand -hex 8 ` '123456'---将123456设置成为随机数
    2. $1$efe34e21$k.sLYXp7oZ/W7IA2aFNXm1
    3. [root@server ~]# useradd -p '$1$efe34e21$k.sLYXp7oZ/W7IA2aFNXm1' user4—将设置为的随机数设置为密码
    4. 可用123456作为密码登录

    <6> 示例6:新建用户user5,指定用户附加组是user1

    1. [root@server ~]# useradd -G user1 user5
    2. [root@server ~]# grep user1 /etc/group
    3. user1:x:1001:user5

    (2)修改用户

    • 格式:usermod [选项] username
    • 常用选项:-c,-d,-m,-g,-G,-s,-u,-o这些选项的意义与useradd命令中的选项意义相同
    选项作用
    -l更改账户的名称,必须在该用户未登录的情况下才能使用
    -L锁定账户,令其不能登录使用
    -U解锁用户账户

    <1> 示例1:修改用户user1的失效时间为2022.11.07

    1. [root@server ~]# usermod -e '2022-11-27' user1
    2. [root@server ~]# grep user1 /etc/shadow

    <2> 示例2:修改用户li4为lis

    [root@server ~]# usermod -l lis li4

    <3> 示例3:锁定用户user4

    1. [root@server ~]# usermod -L user4(锁定当前用户)
    2. [root@server ~]# passwd -S user4---查看当前user4的状态
    3. user4 LK 2022-11-06 0 99999 7 -1 (Password locked.)

    <4> 示例4:解锁用户user4

    1. [root@server ~]# usermod -U user4(解锁当前用户)
    2. [root@server ~]# passwd -S user4
    3. user4 PS 2022-11-06 0 99999 7 -1 (Password set, MD5 crypt.)

    (3)删除用户账号

    • 格式:userdel [-r] 账户名
    • 常用选项:-r——在删除用户该账户的同时,一并删除该账户对应的主目录

    <1> 示例:删除用户user4

    [root@server ~]# userdel -r user4---连同用户的家目录以及邮件队列一起删除

    (4)用户设置密码(linux账户必须设置密码,才能登录系统)

    • 格式:passwd [账户名]
    • 常用选项
    选项功能
    -l锁定用户
    -u解锁用户
    -S显示用户当前状态信息
    -i口令过期多少天后停用账户
    -n指定口令最短存活期

    <1> 示例1:设置密码

    1. 1
    2. [root@server ~]# passwd user1
    3. 2:利用管道实现,将前面命令的标准输出作为后面命令的标准输入
    4. [root@server ~]# echo 2 | passwd --stdin user1
    5. 3
    6. [root@server ~]# echo "user1:3" | chpasswd

    <2> 强制用户下次登录修改密码

    [root@server ~]# chage -d 0 user1---强制user1下次登录修改密码

    (5)用户间切换

    • 格式:su [用户名]
    • 从root切换到任何用户不需要密码验证,普通用户到root用户或者其他用户均需要输入目标密码验证,验证成功才可正常切换。

    PS:su 和 su - 命令区别就是加载文件不一样

    • su 切换方式加载的文件为:~/.bashrc,/etc/bashrc
    • su - 切换方式加载文件为:/etc/bashrc,/etc/profile,~/.bashrc,~/.bash_profile

    (6)控制用户对系统命令的使用权限

    • 格式:sudo
    • 执行流程:
    当用户执行sudo时,会让用户输入自己的密码来确认(root执行sudo时不需要输入密码);
    若欲切换的身份与执行者身份相同,那也不需要输入密码。
    若密码输入成功,系统会去/etc/sudoers文件中查找该用户是否有执行sudo的权限;
    若用户具有执行sudo的权限,便开始sudo后续接的命令
    • 常用选项
    sudo -l
    列出当前用户可以执行的命令。只有在sudoers里的用户才能使用该选项
    sudo -u 用户名 命令
    以指定用户的身份执行命令。后面的用户是除root以外的,可以是用户名,也可以是UID
    sudo -k
    清除存活期时间,下次再使用sudo时要再输入密码
    sudo -b 命令
    在后台执行指定的命令
    sudo -p 提示语 <操作选项>
    可以更改询问密码的提示语,其中%u会代换为使用者账号名称,%h会显示主机名称。
    • 配置/etc/sudoers文件的两种方式
    1. [root@localhost ~]# vim /etc/sudoers或者[root@localhost ~]# visudo
    2. root ALL=(ALL) ALL
    3. 参数代表含义:
    4. 1、用户账号:系统哪个账号可以使用sudo这个命令。
    5. 2、登录者的来源主机名
    6. 3、可切换的身份:这个账号可以切换成什么身份来执行后续的命令。默认root可以切换成任何人。
    7. 4、可执行的命令:这个命令最好使用绝对路径编写。默认root可以切换任何身份且进行任何命令。
    8. 说明:ALL是关键字,代表任何身份、主机或命令

    例:为用户student增加添加用户和删除用户的权限

    1. [root@tianqinwei ~]# visudo --- 在管理员层面修改配置文件
    2. ## The COMMANDS section may have other options added to it.
    3. ##
    4. ## Allow root to run any commands anywhere
    5. root ALL=(ALL) ALL
    6. student ALL=(ALL) /usr/sbin/useradd,/usr/sbin/userdel --- 为student用户增加添加用户和删除用户的权限
    7. ## Allows members of the 'sys' group to run networking, software,
    8. ## service management apps and more.
    9. [student@tianqinwei ~]$ sudo -l --- 查看student用户的权限
    10. We trust you have received the usual lecture from the local System
    11. Administrator. It usually boils down to these three things:
    12. #1) Respect the privacy of others.
    13. #2) Think before you type.
    14. #3) With great power comes great responsibility.
    15. [sudo] password for student:
    16. Matching Defaults entries for student on tianqinwei:
    17. !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS
    18. DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS
    19. LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY
    20. LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET
    21. XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
    22. User student may run the following commands on tianqinwei:
    23. (ALL) /usr/sbin/useradd, /usr/sbin/userdel --- 其所拥有的权限
    24. [student@tianqinwei ~]$ sudo useradd z3 --- 用sudo命令创建用户z3(由于是分配的权限,所以得用sudo)
    25. [student@tianqinwei ~]$ sudo userdel -r z3 --- 删除用户z3

    2.用户组

    (1)创建用户组

    • 格式:groupadd [-r] 用户组名称
    • 常用选项:
    选项功能
    -g GID制定新用户组的标识号(GID),默认是已有最大GID值加1
    -r建立一个系统组账号,与-g不同时使用时,分配一个1-999的GID

    <1> 示例1:创建组hr

    [root@server ~]# groupadd hr

    <2> 示例2:创建组IT,gid为1234

    [root@server ~]# groupadd -g 1234 IT

    (2)修改用户组属性

    • 命令格式: groupmod 选项 用户组
    • 常用选项:
    选项功能
    -g GID为用户组指定新的组标识号
    -n将用户组的名字改为新名字,修改用户组的名称和用户组的GID值

    <1> 示例1:修改用户组hr为HR

    [root@server ~]# groupmod -n HR hr

    (3)管理组成员(root用户和组管理员才可使用)

    • 格式: gpasswd [选项] [用户] [组]

    • 常用选项
    选项功能
    -a将用户加入组
    -d将用户移出组
    -M同时添加多个用户
    -A给组指派管理员

    <1> 示例1:向组内添加成员:将user1添加到HR组

    1. 1
    2. [root@server ~]# usermod -a user1 -G HR
    3. [root@server ~]# grep HR /etc/group
    4. HR:x:1115:user1
    5. 2
    6. [root@server ~]# gpasswd -d user1 HR---将user1从HR组中移除
    7. Removing user user1 from group HR
    8. [root@server ~]# gpasswd -a user1 HR---将user1添加到HR组中
    9. Adding user user1 to group HR

    <2> 示例2:将user2和user1都加入IT组

    1. [root@server ~]# gpasswd -M user2,user1 IT
    2. [root@server ~]# grep IT /etc/group
    3. IT:x:1234:user2,user1

    <3> 示例3:设置user2为IT组管理员

    [root@server ~]# gpasswd -A user2 IT

    (4)删除组账户

    • 格式: groupdel 用户组名

    <1> 示例:删除用户组IT、HR

    1. [root@server ~]# groupdel IT
    2. [root@server ~]# groupdel HR

    附:信息显示

    命令格式作用
    uesrs | w | who显示当前用户信息(三条命令)
    id [用户名]显示当前用户或指定用户的ID,以及所属组ID
    groups [用户名]显示当前用户或指定用户所属组账号的信息

    三、查询

    1.查询用户和组信息

    1. [root@localhost ~]# id root --- 显示出某个用户的详细信息
    2. uid=0(root) gid=0(root) groups=0(root)
    3. [root@localhost ~]# id student
    4. uid=1000(student) gid=1000(student) groups=1000(student)
    5. [root@localhost ~]# groups root --- 显示出用户的所属组信息
    6. root : root
    7. [root@localhost ~]# groups student
    8. student : student

    2.查看用户登录系统的情况

    (1)users --- 查看当前登录系统的用户

    1. [root@localhost ~]# users
    2. root root

    (2)last --- 列出目前与过去登入系统的用户相关信息,该命令默认会去读取/var/log/wtmp文件,并把该文件记录的登入系统的用户名单全部显示出来

    1. [root@localhost ~]# last -2 --- 显示出最近登录的两条用户信息
    2. root pts/0 192.168.174.1 Fri Mar 3 13:56 still logged in
    3. root tty2 tty2 Fri Mar 3 13:56 still logged in
    4. wtmp begins Fri Oct 21 08:54:34 2022
    5. [root@localhost ~]# last -f /var/log/wtmp -n 2 --- 显示/var/log/wtmp文件中的最近两条登录信息
    6. root pts/0 192.168.174.1 Fri Mar 3 13:56 still logged in
    7. root tty2 tty2 Fri Mar 3 13:56 still logged in
    8. wtmp begins Fri Oct 21 08:54:34 2022

    (3)who --- 显示目前登录到系统的用户,who通常通过/var/run/utmp文件来获取信息

    1. [root@localhost ~]# who
    2. root tty2 2023-03-03 13:56 (tty2)
    3. root pts/0 2023-03-03 13:56 (192.168.174.1)
    4. [root@localhost ~]# who -s --- 仅显示名称、终端、时间字段信息和主机名,默认输出
    5. root tty2 2023-03-03 13:56 (tty2)
    6. root pts/0 2023-03-03 13:56 (192.168.174.1)
    7. [root@localhost ~]# who am i --- 列出关于当前终端的信息
    8. root pts/0 2023-03-03 13:56 (192.168.174.1)
  • 相关阅读:
    图论(欧拉路径)
    SDUT OJ《算法分析与设计》贪心算法
    Day 62 django form modelform组件
    MySQL知识总结 (十) 一条 SQL 的执行过程详解
    EventSource(SSE) 实时通信的服务器推送机制
    【31-业务开发-基础业务-品牌管理-级联类别信息业务功能实现-品牌管理和商品分类管理俩者业务关联出现数据冗余,导致数据不同步的问题-开启事务-项目测试】
    Go ---- godog的使用
    JSD-2204-Seata(续)-Sentinel-SpringGateway网关-Day04
    数据分析---开发环境
    数据分析三剑客
  • 原文地址:https://blog.csdn.net/weixin_62443409/article/details/128036522