Skip to content

Latest commit

 

History

History
299 lines (214 loc) · 8.74 KB

06-用户和组管理.md

File metadata and controls

299 lines (214 loc) · 8.74 KB

Chapter 6 - 用户和组管理

返回

[TOC]

1. 用户

用户账户构成了系统安全的基础。

  • 系统中的每个进程(应用程序)都作为一个特定用户运行。
  • 每个文件都有一个特定用户作为其所有者。

用户账户有三种主要类型

  • 超级用户:root, uid 为0, 对系统具有完全的访问权限

  • 系统用户:供服务进程使用。

  • 普通用户:对系统具有有限的访问权限。uid 范围 1000 - 60000

    cat /etc/login.defs 
         44 #
         45 # Min/max values for automatic uid selection in useradd
         46 #
         47 UID_MIN                  1000
         48 UID_MAX                 60000
         49 # System accounts
         50 SYS_UID_MIN               201
         51 SYS_UID_MAX               999
    

用户和密码文件

  • 系统使用 /etc/passwd 文件存储本地用户的信息,每一行存储一个用户信息
  • 系统使用/etc/shadow 文件存储用户的密码信息

grep getent 查看用户和密码信息

# 查看用户 sadmin 的账户信息
[sadmin@server1 ~]$ grep sadmin /etc/passwd
sadmin:x:1000:1000:sadmin:/home/sadmin:/bin/bash
[sadmin@server1 ~]$ getent passwd sadmin
sadmin:x:1000:1000:sadmin:/home/sadmin:/bin/bash

# 查看用户 sadmin 的密码信息
[root@server1 ~]# grep sadmin /etc/shadow
sadmin:...t/::0:99999:7:::
[root@server1 ~]# getent shadow sadmin 
sadmin:...t/::0:99999:7:::

# 密码的加密算法
[root@server1 ~]# passwd -S sadmin
sadmin PS 1969-12-31 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

用户信息格式

每一行用户信息都是以七个冒号分隔的字段

sadmin:x:1000:1000:sadmin:/home/sadmin:/bin/bash

  • sadmin 用户的用户名
  • x 用户的密码曾经以加密格式存储于此处,现在存储于 /etc/shadow,该字段始终为 x
  • 1000 该用户账户的 UID
  • 1000 该用户账户的 GID
  • sadmin 用户的真实姓名
  • /home/sadmin 用户的家目录,是Shell启动时的初始工作目录,包含用户数据和配置设置
  • /bin/bash 用户默认的 Shell 程序。如果用户不允许进行交互式登录,可能使用/sbin/nologin

2. 组

一个用户必须隶属于一个组,不能独立于组而存在。组用于向一组文件授予文件访问权限。

组有组名称以及组ID或GID来区分不同的组。

系统使用 /etc/group 文件存储有关本地组的信息。每个组条目被分为以四个冒号分隔的字段。

[root@server1 ~]# grep sadmin /etc/group
sadmin:x:1000:
  • sadmin 组的名称
  • x 过时的组密码字段,始终为 x
  • 1000 该组的 GID 号
  • 作为补充组的该组成员的用户列表。

3. 组管理

  • 查看 group

    grep group1 /etc/group
  • groupadd 创建 group

    groupadd group1
    
    groupadd -g 10000 group1
  • groupdel 删除 group

    groupdel group1
  • groupmod 修改组的属性

    # 修改组名称
    groupmod -n newgroup group1
    
    # 修改组的 GID
    groupadd -g 10001 group1
  • 查看用户的组

    [sadmin@server1 ~]$ groups bob
    bob : sadmin root
  • gpasswd -a 将用户加入到组里面

    # 将 bob 用户加入到 group1 中
    [root@server1 ~]# gpasswd -a bob group1
    正在将用户“bob”加入到“group1”组中
    
    [root@server1 ~]# groups bob
    bob : sadmin group1 root
  • gpasswd -d 将用户从组里面删除

    [root@server1 ~]# gpasswd -d bob group1 
    正在将用户“bob”从“group1”组中删除
    

4. 用户管理

useradd 创建用户

# 创建 userx 用户
useradd userx

常见选项

  • -c, --comment 备注信息,将用户的真实姓名添加到注释字段
  • -d, --home 指定家目录
  • -s, --shell 指定特定的 Shell
  • -M 不创建家目录,优先于/etc/login.defs文件设定
  • -m, --move-home 用户目录不存在时则自动创建
  • -g, --gid 指定主组,不创建同名组
  • -G, --groups 指定附属组
  • -u 指定 uid
  • -e 用户终止日期,日期的格式为YYYY-MM-DD
# 创建指定的用户信息,但不创建家目录,亦不让登录系统
useradd -M -s /sbin/nologin user1

# 创建指定的用户信息,并追加指定组为该账户的扩展组
useradd -G root user2

# 创建用户,并指定过期时间
useradd -e "2023/01/01" user3

useradd -c "Uncle Bob" -s /sbin/nologin -d /bob -g sadmin -G root bob

设置密码

用户刚创建成功时,用户是没有密码的,此时的用户处于锁定状态。可以通过如下命令来查看用户的状态。

[root@server1 ~]# useradd -c "Uncle Bob" \
> -s /sbin/nologin \
> -d /bob \
> -g sadmin \
> -G root \
> bob
[root@server1 ~]# passwd -S bob
bob LK 2022-12-06 0 99999 7 -1 (密码已被锁定。)

如果要设置用户的密码,可以通过如下命令

# 将 bob 的密码设置为 redhat
[root@server1 ~]# echo redhat | passwd --stdin bob
更改用户 bob 的密码 。
passwd:所有的身份验证令牌已经成功更新。

# 密码设置成功后,用户就不再锁定了
[root@server1 ~]# passwd -S bob
bob PS 2022-12-06 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

[root@server1 ~]# getent passwd bob
bob:x:1001:1000:Uncle Bob:/bob:/sbin/nologin

nologin Shell

nologin Shell 可以防止用户以交互方式登录系统,但不会阻止所有的访问。比如对于一个使用了nologin的服务账号,其他用户可以使用该服务账号用户名和密码进行身份验证,使用 Web 服务或者文件传输服务,但是用户不能使用该账户直接登录系统。如果用户试图登录系统,nologin Shell 将关闭该连接。

[root@server1 ~]# su - bob
This account is currently not available.

userdel 删除用户

用户信息被保存到了/etc/passwd、/etc/shadow以及/etc/group文件中,因此使用userdel命令实际就是帮助我们删除了指定用户在上述三个文件中的对应信息。

# 删除用户主目录及其中的任何文件
userdel -r bob

usermod 修改用户属性

c<备注> 修改用户账号的备注文字
-d<登入目录> 修改用户登入时的家目录
-e<有效期限> 修改账号的有效期限
-f<缓冲天数> 修改在密码过期后多少天即关闭该账号
-g<群组> 修改用户所属的群组
-G<群组> 修改用户所属的附加群组
-l<账号名称> 修改用户账号名称
-L 锁定用户密码,使密码无效
-s 修改用户登入后所使用的shell
-u 修改用户ID
-U 解除密码锁定
# 修改 bob shell
usermod -s /bin/bash bob

# 锁定用户
# 用户锁定了之后,root 用户可以 su 过去,但是其他用户是不能 su 过去的,且bob用户无法登录系统
usermod -L bob

# 解锁用户
usermod -U bob

# 将用户添加到组
usermod -g group1 bob

# 将用户添加到附属组
usermod -aG group1 bob

5. 修改密码策略

chage命令是用来修改帐号和密码的有效期限;这个信息由系统用于确定用户何时必须更改其密码。

参数 说明
-M, --maxdays 密码保持有效的最大天数。过了这个天数还不修改密码,账户将被锁定
-m, --mindays 密码保持最小使用天数。两次修改密码的间隔不得低于这个天数。
-W, --warndays 用户密码到期前,提前收到警告信息的天数。
-E, --expiredate 帐号到期的日期,会禁止此帐号;1:立即过期,-1:永不过期
-d, --lastday 上一次更改的日期
-I, --inactive 达到最大使用天数之后还没有修改密码,不会立即锁定账户,再给几天缓冲期。缓冲期内登录系统会强迫修改密码。
-l, --list 显示账户年龄信息
[root@server1 ~]# chage -d 2022-12-7 bob
[root@server1 ~]# chage -E -1 bob

[root@server1 ~]# chage -l bob
最近一次密码修改时间					:12月 07, 2022
密码过期时间					:从不
密码失效时间					:从不
帐户过期时间						:从不
两次改变密码之间相距的最小天数		:0
两次改变密码之间相距的最大天数		:99999
在密码过期之前警告的天数	:7

chage -m 0 -M 90 -W 7 -I 14 bob

返回