什么是用户
用户账户在可以运行命令的不同人员和程序之间提供安全界限。
在Linux系统中,系统通过分配唯一的标识号(用户ID或UID)来区分不同的用户帐户。
在Linux系统中,用户帐户有以下三种主要类型:
- 超级用户
负责管理系统。超级用户的名称为root。UID为0,具有完全的系统访问权限。
- 系统用户
供提供支持服务的进程使用。用户无法使用系统用户帐户以交互式方式登录。
- 普通用户。
普通用户对系统具有有限的访问权限。
使用id命令可显示有关当前已登录用户的信息;
[root@localhost ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@localhost ~]# id user
uid=1000(user) gid=1000(user) groups=1000(user)
使用ls命令-l选项可以查看文件的所有者。
对以上字段的说明:
drwxr-xr-x. 表示权限,d表示为文件夹,通常为3段,第一段为user,第二段为group,第三段为others,它们的最高权限位rwx.
1 第二列内容表示链接
第三列root表示该文件或者文件夹的拥有者为root,即所属用户。
第四列root表示该文件或者文件夹的所属组为root,即所属组。
第五列表示文件的大小。
Jul 8 14:10 表示文件或者文件夹的修改时间。
最后一列表示文件名称或者文件夹名称。
默认情况下,系统使用/etc/passwd文件存储有关本地用户的信息。
user 此用户的用户名;
x: 用户的加密密码存储在这里,是一个占位符;
1000: 此用户帐户的UID编号;
1000: 此用户帐户的主要组的GID编号;
user: 此用户的简短注释、描述;
/home/user: 用户的主目录,以及登录shell启动时的初始工作目录;
/bin/bash: 此用户的默认shell程序,在登录时运行。
用户相关文件
/etc/passwd
:存储用户账户信息的文件。/etc/shadow
:存储用户密码及其相关信息的文件。/etc/group
:存储组信息的文件。
常用用户管理命令:
useradd:创建或添加一个新用户。
useradd 命令可以创建名为username的用户(username替换为实际创建的用户名)。它会设置用户的主目录和帐户信息,并为该用户创建一个私有组。
在rhel9中,useradd命令为新用户分配第一个大于或等于1000的可用UID,除非通过-u选项进行明确指定。
[root@localhost ~]# useradd user
[root@localhost ~]# id user
uid=1002(user) gid=1005(user) groups=1005(user)
usermod用于修改用户的各项参数信息。
usernod --help命令显示用于修改帐户的基本选项。
usermod选项 | 用法 |
-a --append | 与-G选项一起使用将补充组添加到用户当前的组成员集合中,而不是将补充组集合替换为新的集合。 |
-c --comment COMMENT | 将COMMENT文本添加到 注释字段。 |
-d,--home HOME_DIR | 为用户帐户指定一个主目录。 |
-g,--gid GROUP | 为用户帐户指定主要组。 |
-G | 为用户帐户指定补充组的逗号分隔列表。 |
-L, --lock | 锁定用户帐户。 |
-u,--unlock | 解锁用户帐户。 |
-m | 将用户的主目录移到新的位置。必须将其与-d选项搭配使用。 |
-s | 为用户帐户指定特定的登录shell。 |
[root@localhost ~]# mkdir /alex_home
[root@localhost ~]# usermod -d /alex_home alex #为用户指定新的主目录;[root@localhost ~]# usermod -u 8286 alex #为用户指定UID
[root@localhost ~]# id alex
uid=8286(alex) gid=1000(alex) groups=1000(alex)
[root@localhost ~]# usermod -L alex #锁定用户帐户
[root@localhost ~]# usermod -U alex #解锁用户帐户
[root@localhost ~]# usermod -aG docker alex #将用户添加到docker组中
userdel 命令从/etc/passwd中删除用户的详细信息,但用户的主目录保持不变。userdel -r 命令从/etc/passwd中删除用户,同时删除用户的主目录。
[root@localhost ~]# userdel -r alex
[root@localhost ~]# cat /etc/passwd | grep alex
删除用户不指定userdel -r选项的情况删除用户,会造成信息泄露。
passwd 命令可为username用户设置初始密码,或更改其现有的密码。
root用户可以将密码设置为任何值, 普通用户必须选择至少八个字符长的密码。不要使用字典词语、用户名或旧密码。
UID范围
UID 0: 超级用户root帐户UID。
UID 1-200: 静态分配给系统进程的系统帐户UID。
UID 201-999: 分配给不拥有此系统上文件的系统进程的UID。需要非特权UID的软件将会从这个可用池中动态分配UID。
UID 1000+: 分配给普通非特权用户的UID范围。
切换用户
通过使用su命令,用户可以切换至另外一个用户帐户。
如果从一个普通用户切换到另外一个普通用户,或者从普通用户切换到超级用户root,则需要提供要切换到的帐户的密码。以root用户身份切换普通用户时,则无需输入用户密码。
[user@localhost ~]$ su - alex
Password:
[alex@localhost ~]$ su root
Password:
[root@localhost alex]# su - user
如果普通用户切换用户时省略用户名,默认情况下su或su -命令会尝试切换到root。
[alex@localhost ~]$ su -
Password:
[root@localhost ~]#
su 和 su -区别:
- su 切换用户但保持当前环境。
- su - 切换用户并加载新用户的完整登录环境。
sudo命令在Linux中用于以超级用户或另一个用户的权限执行命令。它允许受限权限的用户执行需要更高权限的命令,而无需切换到超级用户身份。
与su命令不同,sudo通常要求用户输入其自己的密码以进行身份验证,而不是输入他们正尝试访问的用户帐户的密码。
下表总结了su、su - 和sudo命令之间的区别:
su | su - | sudo | |
成为新用户 | 是 | 是 | 依据升级的命令 |
环境 | 当前用户的 | 新用户的 | 当前用户的 |
需要密码 | 新用户的 | 新用户的 | 当前用户的 |
特权 | 与新用户相同 | 与新用户相同 | 由配置定义 |
记录的活动 | 仅su命令 | 仅su命令 | 依据升级的命令 |
管理本地组
组是用户的集合,用于简化对多个用户的权限管理。同一组内的用户可以共享对某些文件或目录的访问权限。
groupadd命令用于创建组。
[root@localhost ~]# groupadd group01
[root@localhost ~]# cat /etc/group | grep group01
group01:x:1000:
groupadd命令-g选项指定供组使用的特定GID。
[root@localhost ~]# groupadd -g 2024 group02
[root@localhost ~]# cat /etc/group | grep group02
group02:x:2024:
groupadd命令-r选项用于创建系统组。
[root@localhost ~]# cat /etc/group | grep group03
group03:x:978:
普通组是由系统管理员创建的,用于将多个用户组织在一起,以便共享文件和资源。普通组的ID(GID)通常在500(有些系统是1000)以上,这取决于系统配置。
系统组是系统默认创建的,用于分配系统进程和服务的权限。系统组的ID(GID)通常在0到499(或999)之间,这取决于系统配置。
groupmod命令可更改现有组的属性。
groupmod命令-n选项可指定组的新名称。
[root@localhost ~]# groupmod -n group22 group01
[root@localhost ~]# cat /etc/group | grep group22
group22:x:1000:
groupmod -g选项可指定新的GID。
[root@localhost ~]# cat /etc/group | grep group02
group02:x:2024:
[root@localhost ~]# groupmod -g 20000 group02
[root@localhost ~]# cat /etc/group | grep group02
group02:x:20000:
groupdel命令可删除组。
[root@localhost ~]# groupdel group03
[root@localhost ~]# cat /etc/group | grep group03
如果组是现有用户的主要组,则无法删除它。与使用userdel命令类似,首先检查以确保找到该组拥有的文件。
组成员资格通过用户管理进行控制。使用usermod -g命令来更改用户的主要组。
[root@localhost ~]# id user02
uid=1002(user02) gid=1002(user02) groups=1002(user02)
[root@localhost ~]# usermod -g group01 user02
[root@localhost ~]# id user02
uid=1002(user02) gid=1003(group01) groups=1003(group01)