[TOC]
用户账户构成了系统安全的基础。
- 系统中的每个进程(应用程序)都作为一个特定用户运行。
- 每个文件都有一个特定用户作为其所有者。
用户账户有三种主要类型
-
超级用户: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
文件存储用户的密码信息
# 查看用户 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,该字段始终为 x1000
该用户账户的 UID1000
该用户账户的 GIDsadmin
用户的真实姓名/home/sadmin
用户的家目录,是Shell启动时的初始工作目录,包含用户数据和配置设置/bin/bash
用户默认的 Shell 程序。如果用户不允许进行交互式登录,可能使用/sbin/nologin
一个用户必须隶属于一个组,不能独立于组而存在。组用于向一组文件授予文件访问权限。
组有组名称以及组ID或GID来区分不同的组。
系统使用 /etc/group
文件存储有关本地组的信息。每个组条目被分为以四个冒号分隔的字段。
[root@server1 ~]# grep sadmin /etc/group
sadmin:x:1000:
sadmin
组的名称x
过时的组密码字段,始终为x
1000
该组的 GID 号- 作为补充组的该组成员的用户列表。
-
查看 group
grep group1 /etc/group
-
groupadd
创建 groupgroupadd group1 groupadd -g 10000 group1
-
groupdel
删除 groupgroupdel 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”组中删除
# 创建 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的服务账号,其他用户可以使用该服务账号用户名和密码进行身份验证,使用 Web 服务或者文件传输服务,但是用户不能使用该账户直接登录系统。如果用户试图登录系统,nologin Shell 将关闭该连接。
[root@server1 ~]# su - bob
This account is currently not available.
用户信息被保存到了/etc/passwd、/etc/shadow以及/etc/group文件中,因此使用userdel命令实际就是帮助我们删除了指定用户在上述三个文件中的对应信息。
# 删除用户主目录及其中的任何文件
userdel -r bob
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
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