• 3.5 Linux 用户管理


    1、账号 & 组账号

    inux基于用户身份对资源访问进行控制,Linux 属于多用户的操作系统

    a. Linux 用户

    按建立方式分类:

    • 内建账户: 由系统或程序自行建立的账户
    • 自定义账户: 管理员或特权人员手工建立

    按权限分类:

    • 特权账户: 有对系统或程序控制的权限
    • 普通账户: 仅拥有系统授予或特权账户授予的权限
    • 程序用户:在安装linux操作系统及部分应用程序时,会添加一些特定的低权限用户账号,这些账号一般不允许登录到系统,而仅用于用于维持系统或某个程序的正常运行,一般不允许登录到系统。例如:bin、daemon、ftp、mail等
    b. Linux 用户组

    linux用户组分为基本组(私有组)和附加组(公共组)。

    每一个用户账号至少属于一个组,这个组称为该用户的基本组(或私有组);若该用户同时还包含在其他的组中,则这些组称为该用户的附加组(或公共组)。

    对组账号设置的权限将适用于组内的每一个用户账号。

    c. UID 用户标识

    Linux系统中的每一个用户账号都有一个数字形式的身份标记,称为UID,对于操作系统来说,UID是区分用户的基本依据,原则上每个用户的UID号应该是唯一的,root用户的UID的固定值为0。1~999的UID默认保留给程序用户使用,普通用户组使用的UID号在1000~60000之间

    d. GID 组标识号

    与UID类似,每一个组账号也有一个数字形式的身份标识,称为GID。root组帐号的GID号为固定值0,而程序组账号的GID号默认为1~999,1000~60000的GID号默认分配给普通组使用。

    2、用户账号管理

    Linux 将用户的信息及密码全部通过文件的方式进行保存

    a. /etc/passwd

    存储用户信息

    基于系统运行和管理需要,所有用户都可以访问passwd文件中的内容,但是只有root用户才能进行更改。

    1. root:x:0:0:root:/root:/bin/bash
    2. operator:x:11:0:operator:/root:/sbin/nologin

    第一列:

    用户名称

    第二列:

    密码占位符

    第三列:

    UID

    第四列:

    GID

    第五列:

    详细信息

    第六列:

    宿主目录

    第七列:

    登录shell信息

    root

    x

    0

    0

    root

    /root

    /bin/bash

    operator

    x

    11

    0

    operator

    /root

    /sbin/nologin

    b. /etc/shadow

    Shadow文件又被称为“影子文件”,其中保存有各用户账号的密码信息,因此对shadow文件的访问应该进行严格限制,默认只有root用户能够读取文件中的内容,并且不允许root直接编辑该文件中的内容。

    1. root:$6$83f7/8SSOXkkAg8e$9a1rqdPn/n8ppeCVJU7TBxW.UcWiAyQcRFwRlykd8P4fUkNnyOmAo3GwxuUYAOn3QfTsAgR0C/t8Z9UYtPjOb.::0:99999:7:::
    2. bin :*:18353:0:99999:7:::
    3. daemon:*:18353:0:99999:7:::
    • 第一列:用户帐号的名称
    • 第二列:加密的密码字串信息。说明,$1$:加密算法是md5。$6$:加密算法是sha512。
    • 第三列:上次修改密码的时间(天数)
    • 第四列:密码的最短有效天数,默认值为0
    • 第五列:密码的最长有效天数,默认值为99999
    • 第六列:提前多少天警告用户口令将过期,默认值为7
    • 第七列:在密码过期之后多少天禁用此用户
    • 第八列:帐号失效时间,默认值为空
    • 第九列:保留字段(未使用)
    c. /etc/default/useradd

    用户默认的配置文件:

    1. # useradd defaults file
    2. GROUP=100 # 默认账户加入至 GID100
    3. HOME=/home # 账户默认主目录前缀为 /home
    4. INACTIVE=-1 # 禁用账号过期功能 (-1)
    5. EXPIRE= # 账号到期时间 , 不设置即不启用
    6. SHELL=/bin/bash # 指定用户默认所使用的 shell
    7. SKEL=/etc/skel # 指定用户所使用的 SHELL 环境文件
    8. CREATE_MAIL_SPOOL=yes # 创建账户名同名的文件作为账户的邮箱,系统邮箱位置在 /var/spool/mail 目录中
    d. /etc/login.defs

    用户限制文件:cat /etc/login.defs | grep -v ^# | grep -v ^$

    1. MAIL_DIR /var/spool/mail # 指定系统账户的邮箱所在位置
    2. PASS_MAX_DAYS 99999 # 密码最大有效期
    3. PASS_MIN_DAYS 0 # 两次密码修改最小间隔
    4. PASS_MIN_LEN 5 # 密码最小长度
    5. PASS_WARN_AGE 7 # 密码失效前天前 N 天提示用户
    6. UID_MIN 1000 # 本地自定义账户最小 UID
    7. UID_MAX 60000 # 本地自定义账户最大 UID
    8. SYS_UID_MIN 201 # 本地系统账户最小 UID
    9. SYS_UID_MAX 999 # 本地系统账户最大 UID
    10. GID_MIN 1000 # 本地自定义组最小 GID
    11. GID_MAX 60000 # 本地自定义组最大 GID
    12. SYS_GID_MIN 201 # 本地系统组最小 GID
    13. SYS_GID_MAX 999 # 本地系统组最大 GID
    14. CREATE_HOME yes # 默认创建用户主目录
    15. UMASK 077 # 用户主目录 umask 码
    16. USERGROUPS_ENAB yes #当用户删除后同名组没有成员时,同时删除此组
    17. ENCRYPT_METHOD SHA512 # 算法加密密码
    e. /etc/skel/*

    用户账号初始配置文件

    添加一个新的用户账号后,useradd命令会在用户的宿主目录中建立一些初始配置文件。这些文件来自于账号模板目录/etc/skel,基本上都是隐藏文件。

    .bash_logout:用户每次退出登录时执行

    .bash_profile:用户每次登录时执行 局部配置文件 /etc/profile全局配置文件

    .bashrc:每次进入新的Bash环境时执行(当然也包括登录系统)

    f. useradd 命令
    • 描述:添加用户账户
    • 语法:useradd [选项] 用户名

    -u: 指定 UID 标记号

    -d: 指定宿主目录,缺省为 /home/用户名

    -e: 指定帐号失效时间

    -f: 密码失效宽限期

    -g: 指定用户的基本组名(或UID号)

    -G: 指定用户的附加组名(或GID号)

    -M:不为用户建立并初始化宿主目录

    -s: 指定用户的登录Shell

    1. # 创建一个普通用户user1
    2. useradd user1
    3. # 创建一个普通用户user2,UID为2000
    4. useradd -u 2000 user2
    5. # 创建一个程序用户user3,不用登陆,不用家目录
    6. useradd -M -s /sbin/nologin user3
    7. # 添加一个临时账号。账户名为 thomas、初始组为 root、账户主目录为 /admin
    8. # 密码宽限期为 7 天、账号有效使用时间为从即日起30天
    9. useradd -g root -d /admin -f 7 -e 2023-12-15 thomas
    g. usermod 命令
    • 描述:修改用户账户
    • 语法:usermod [选项] 用户名

    -l: 更改用户帐号的登录名称

    -L: 锁定用户账户

    -U: 解锁用户账户

    -u: 修改 UID 标记号

    -d: 修改宿主目录

    -e: 修改帐号失效时间

    -g: 修改用户的基本组名(或UID号)

    -G: 修改用户的附加组名(或GID号)

    -s: 修改用户的登录Shell

    1. # 将thomas账户名改为 lemon
    2. usermod -l lemon thomas
    3. # 将lemon账户锁定
    4. usermod -L lemon
    h. passwd 命令
    • 描述:为用户账号设置密码
    • 语法:passwd [选项] 用户名

    -d: 清空用户的密码,使之无需密码即可登录

    -l: 锁定用户帐号

    -S: 查看用户帐号的状态(是否被锁定)

    -u: 解锁用户帐号

    -i: 设置密码宽限期 (shadow 区域 7)

    -n: 设置2次密码修改间隔时间 (shadow 区域 4)

    -x: 设置密码有效期 (shadow 区域 5)

    -w: 设置密码过期前警告天数 (shadow 区域 6)

    --stdin: 从标准输入中读取密码

    1. # 通过标准输入更改指定账户密码
    2. echo "123456" | passwd --stdin user3
    3. # 对 thomas 账户进行密码设定,要求
    4. # 密码有效期 7 天、提前3天给予警告、2次密码修改间隔时间为 2
    5. passwd -x 7 -w 3 -n 2 thomas
    i. chage 命令
    • 描述:更改账户密码过期信息
    • 语法:chage [ 选项 ] [ 账户名 ]

    -m 密码可更改的最小天数。为零时代表任何时候都可以更改密码。

    -M 密码保持有效的最大天数。

    -W 用户密码到期前,提前收到警告信息的天数。

    -E 帐号到期的日期。过了这天,此帐号将不可用

    -d 上一次密码更改的日期

    -i 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。

    -l 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期

    1. # 查看thomas账户密码设定情况
    2. chage -l thomas

    1. # 设置thomas密码有效期是90
    2. chage -M 90 thomas
    3. # 设置 thomas 登陆时强制修改口令
    4. chage -d 0 thomas
    5. # 强制 thomas登陆时修改口令 , 且密码可随时更改 ,
    6. # 但密码最大有效期为 90 天 , 提前 15 天发送警报消息,有效期至 2100-10-10
    7. chage -d 0 -m 0 -M 90 -W 15 -E 2100-10-10 thomas

    3、组账号管理
    a. /etc/group

    查看组相关信息

    1. rpc:x:32:
    2. cgred:x:995:
    3. named:x:25:
    4. marry:x:1001:
    5. zhangsan:x:30001:

    第一列:组名称

    第二列:组密码占位符

    第三列:GID号

    第四列:附加组成员

    zhangsan

    x

    1001

    marry

    x

    30001

    b. /etc/gshadown

    查看组密码相关信息

    1. rpc:!::
    2. cgred:!::
    3. named:!::
    4. marry:!::
    5. zhangsan:!::

    第一列:组名称

    第二列:组密码

    第三列:管理员

    第四列:附加组成员

    zhangsan

    marry

    c. groupadd 命令
    • 描述:添加组账号
    • 语法:groupadd [选项] 组名称

    -g 组ID号 指定组ID号

    1. # 指定张三组的id号为30001
    2. groupadd -g 30001 zhangsan
    3. cat /etc/group | tail -5

    d. gpasswd 命令
    • 描述:设置组帐号密码(极少用)、添加/删除组成员
    • 语法:gpasswd [选项] 组帐号名

    -a: 向组内添加一个用户

    -d: 从组内删除一个用户成员

    -M:定义组成员列表,以逗号分隔

    1. # 将 zhaoliu 添加到 zhangsan组中
    2. gpasswd -a zhaoliu zhangsan
    3. # 查看 /etc/group 文件查看zhangsan组
    4. zhangsan:x:30001:zhaoliu # 由此可见zhangsan组的附加人员
    5. # 将zhangsan组的附加成员zhaoliu删除
    6. gpasswd -d zhaoliu zhangsan
    7. # 在 张三组中 一次性添加多个附加组员
    8. gpasswd -M zhaoliu,wangwu zhangsan # zhangsan:x:30001:zhaoliu,wangwu
    e. groupmod 命令
    • 描述:修改现有组
    • 语法:groupmod [ 选项 ] 组名

    -g: 更改指定组的 GID

    -n: 更改指定组组名

    1. # 更改 zhangsan组名称为fawaikuangtu,更改id为 20001
    2. groupmod -g 20001 -n fawaikuangtu zhangsan #fawaikuangtu:x:20001:zhaoliu,wangwu
    4、查询账号信息
    a. id 命令
    • 描述:查询用户身份标识
    • 语法:id 用户名
    1. # 查看 zhaoliu 的账户信息
    2. id zhaoliu

    b. groups 命令
    • 描述:查询用户所属的组
    • 语法:groups 用户名
    1. # 查询 zhaoliu 的组信息
    2. groups zhaoliu # zhaoliu : zhaoliu fawaikuangtu
    c. finger 命令
    • 描述:查询用户相关信息
    • 语法:finger 用户名
    1. # 安装finger命令
    2. yum install -y finger
    3. # 查看 zhaoliu 相关信息
    4. finger zhaoliu

    d. 其他查询账户的命令
    • 查询已登录到主机的用户信息:users、w、who
    • 显示账户登录时间:last
    • 显示所有账户最后登录的时间:lastlog
  • 相关阅读:
    小车测距避障-通过串口(可蓝牙)控制
    如何通过 NFTScan API 按照 NFT 合约地址检索数据?
    MySQL锁问题
    redis大全
    C++ if 语句
    如何用prompt提示词开发Open AI项目?
    关于我在uni-app练手中遇到的坑
    操作系统实验三 进程间通信
    《TCP/IP网络编程》阅读笔记--Timewait状态和Nagle算法
    stm32知识记录
  • 原文地址:https://blog.csdn.net/Yuanshigou9/article/details/134448376