Linux操作系统运维-用户与用户组管理
用户种类与标识查看
- 超级用户(root):可以不受限制地执行所有操作,拥有系统最高权限,修改系统设置与管理用户均需要root权限
- 系统用户(system):它是系统本身或应用程序使用的账户,分为系统安装时创建的账户和用户自定义的系统账户
- 普通用户(regular):该账户是常规用户,在系统中不执行系统管理任务,只执行日常应用
Linux使用UID作为账户的唯一标识,并且有以下特殊UID:
账户类型 | UID范围 |
---|---|
root | UID=0 |
系统账户 | UID=1~499、65534 |
普通账户 | UID≥1000 |
- 很多linux的发行版也以500开始作为为普通用户编号
- 65534是Linux系统中预留的一个保留UID,通常用于指示某个文件或进程不属于任何实际用户或组。这个UID通常被称为“无主账户”(nobody)。它不是一个真正的账户编号,也不应该被用于创建新的用户账户。
查看当前与用户相关信息指令
命令 | 作用 |
---|---|
id | 直接展示当前账户的UID与GID |
id [用户名] | 查看指定用户的 UID 和 GID |
who | 查看当前所有用户登录列表 |
whoami | 查看当前用户登录的账户名 |
cat /etc/passwd | 查看当存在的所有用户与信息 |
使用root权限管理系统
对于普通用户是没有权限进行修改系统设置和管理其他用户的,只有root用户和授予了管理员权限的用户才能够管理维护系统,但是root用户权限过高,很多linux发行版禁用了root账户,转而使用具有管理员权限的账户(即后文中提到用户组中sudo组成员用户),通常需要使用sudo命令来暂时提升权限或者使用su命令切换用户。
sudo命令与常见选项
sudo
(Superuser Do)是一个在Unix和类Unix操作系统中使用的命令行工具,允许普通用户以超级用户(root)的身份执行特定命令,通常是系统管理任务。使用sudo
可以提高系统的安全性,因为它允许管理员授予特定用户执行特定任务的权限,而无需将完整的超级用户权限授予他们。
sudo [option] [command ...]
选项 | 说明 |
---|---|
sudo command | 使用sudo 加上命令用于提升权限至root执行后面的命令 |
-u, --user=user command | 指定要以哪个用户的身份执行命令。 |
-g, --group=group command | 指定要以哪个用户组的身份执行命令。 |
-l, --list | 列出当前用户的sudo 权限。 |
-b, --background | 在后台运行命令。 |
-e, --edit | 使用默认编辑器编辑sudoers 文件。 |
-E, --preserve-env | 保持环境变量,不清除用户的环境变量。 |
-H, --set-home | 将HOME 环境变量设置为目标用户的家目录。 |
-i, --login | 以目标用户的环境登录,不指定用户即默认为root环境 |
-k, --reset-timestamp | 重置sudo 的时间戳。 |
-V, --version | 显示sudo 的版本信息。 |
则有以下切换到root用户的方法:我们可以用sudo -i
切换到root用户登录(需要当前用户的密码),最后使用exit命令退出当前登录shell
即可
su命令与常见选项
su
命令(Switch User)是在Unix和类Unix操作系统中用于切换用户身份的命令。通过su
命令,可以在当前终端会话中切换到另一个用户的环境,通常默认切换到超级用户(root)。普通用户切换为其他用户需要提供对应用户的密码,而root用户切换到其他用户不需要提供密码
su [option] [userName]
选项 | 说明 |
---|---|
su | 直接切换到root用户,但保留当前用户的环境变量 |
su - | 直接切换到root用户,并加载其环境变量 |
su userName | 切换到指定用户 |
-c, --command=COMMAND | 在切换用户后执行指定的命令。 |
-s, --shell=SHELL | 指定要使用的shell。默认为目标用户的登录shell。 |
-l, --login | 登录目标用户,加载其环境变量。 |
-m, --preserve-environment | 保留原始用户的环境变量。 |
临时切换用户命令后,我们也可以通过exit
退出:
切换至root用户的方式汇总
指令 | 描述 |
---|---|
su root | 切换到 root 用户 |
sudo -i | 保留当前环境变量并使用 root 用户登录 shell |
su | 切换到 root 用户(等同于 su root ) |
su - | 切换到 root 用户并启动新的登录 shell,加载 root 用户的环境变量 |
注意:在服务端的linux系统中还可以使用logout
来退出当前用户的登录
sudoers文件定义用户规则
sudoers
文件是一个用于配置sudo
命令的配置文件,定义了哪些用户、哪些主机以及在执行sudo
命令时允许执行哪些命令。这个文件通常位于/etc/sudoers
。编辑sudoers
文件时应使用visudo
命令,因为它会在保存文件时进行语法检查,防止可能导致系统安全问题的错误,其中规则对应的以某身份执行命令指的是使用sudo
或su
命令以其他用户身份执行命令
用户规则:
user host=(runas_user:runas_group) command
允许user
在指定的host
上以runas_user:runas_group
的身份执行特定的command
。
组规则:
%group host=(runas_user:runas_group) command
允许group
的成员在指定的host
上以runas_user:runas_group
的身份执行特定的command
。
免密码规则:
user host=(runas_user) NOPASSWD: command
允许user
在指定的host
上以runas_user
的身份无需输入密码执行特定的command
。
命令别名:
Cmnd_Alias CMD_ALIAS = /path/to/command, /path/to/another_command
定义一个命令别名,使得可以在规则中引用这个别名而不必列出所有的命令。
主机别名:
Host_Alias HOST_ALIAS = host1, host2
定义一个主机别名,使得可以在规则中引用这个别名而不必列出所有的主机。
用户别名和组别名:
User_Alias USER_ALIAS = user1, user2
%Group_Alias = group1, group2
分别定义用户别名和组别名,以便在规则中引用它们而不必列出所有的用户或组。
默认规则:
Defaults option
设置sudo
的默认选项,如允许或禁止使用sudo
的一些功能,或者定义默认的PATH
等(在sudoers
文件的前半段就是默认配置信息)。
用户的创建与管理
useradd命令与常见选项
useradd [option] [userName]
选项 | 说明 |
---|---|
-c, --comment COMMENT | 设置用户的注释信息。 |
-d, --home DIRECTORY | 指定用户的主目录。 |
-g, --gid GROUP | 指定用户的初始登录组。 |
-G, --groups GROUPS | 指定用户的附加组。多个组之间使用逗号分隔。 |
-m, --create-home | 创建用户的同名主目录。 |
-s, --shell SHELL | 指定用户的登录 shell。 |
-u, --uid UID | 指定用户的用户ID。 |
-e, --expiredate EXPIRE | 指定用户的过期日期。 |
-r, --system | 创建一个系统用户。 |
-U, --user-group | 创建与用户名同名的用户组,并将用户添加到这个组中。 |
-M, --no-create-home | 不创建用户的主目录。 |
注意:在未指定用户组的情况下,系统会默认创建与用户同名的用户组
userdel命令与常见选项
userdel -r [用户名] # 删除用户与其主目录
选项 | 说明 |
---|---|
-r, --remove | 删除用户的主目录和邮箱目录。 |
-f, --force | 强制删除用户,即使用户当前登录。 |
-Z, --selinux-user | 指定删除用户时关联的 SELinux 用户。 |
-h, --help | 显示帮助信息。 |
passwd命令与常见选项
passwd
命令用于更改用户的密码。这个命令允许用户更改自己的密码,或者超级用户(root)可以更改其他用户的密码。在Linux系统中,密码是存储在 /etc/shadow
文件中的,而 passwd
命令负责更新这个文件中的密码信息。
passwd [option] [userName]
选项 | 说明 |
---|---|
(无选项与用户名) | 更改当前用户的密码。 |
-e, --expire | 强制用户下次登录时更改密码。 |
-l, --lock | 锁定用户密码,防止登录。 |
-u, --unlock | 解锁先前被锁定的用户密码。 |
-S, --status | 显示密码更改策略信息。 |
-d, --delete | 删除密码,使用户无密码登录。 |
-n, --mindays MIN | 设置密码的最短使用期限。 |
-x, --maxdays MAX | 设置密码的最长使用期限。 |
-w, --warndays WARN | 在密码过期前的天数提供警告。 |
-i, --inactive INACTIVE | 设置密码过期后账户被禁用前的天数。 |
useradd文件指定默认配置
在Debian系列的Linux系统中,/etc/default/useradd
文件用于配置useradd
命令的默认行为。这个文件包含一些变量,这些变量定义了在使用useradd
命令创建新用户时的默认设置。
以下是一些在/etc/default/useradd
文件中常见的变量:
HOME
: 指定新用户的默认主目录。例如:
HOME=/home
SHELL
: 指定新用户的默认登录 shell。例如:
SHELL=/bin/bash
SKEL
: 指定包含默认用户配置文件的骨架目录。当创建新用户时,/etc/skel
目录中的内容会被复制到新用户的主目录。例如:
SKEL=/etc/skel
CREATE_MAIL_SPOOL
: 如果设置为 “yes”,则新用户在创建时将会有一个邮箱。如果设置为 “no”,则不创建邮箱。例如:
CREATE_MAIL_SPOOL=yes
GROUP
: 指定新用户的初始登录组。例如:
GROUP=users
passwd文件关联用户配置
passwd
文件是存储用户账户密码信息的文件(我们通常也用来查看系统中存在哪些用户),在Linux系统中通常位于/etc/passwd
。passwd
文件包含系统上所有用户的基本信息,包括用户名、用户ID(UID)、组ID(GID)、用户描述信息、主目录以及登录 shell 等。
注意:在Linux中/etc/passwd
文件中存放着所有用户的信息,则我们可以利用以下命令来查看用户信息
cat /etc/passwd/ | grep [用户名] # 查看用户名单
查询出的信息有以下内容,我们用kali展示其信息格式和各部分对应的东西:
注意:/etc/passwd
文件并不保存密码,所以密码处为x,下面还有其他查看信息的命令
禁用账户的方法
我们可以在/etc/passwd
文件中对应账户前面加上*
即可禁用该账户
如图所示,我们接下来切换xxx
用户,发现无法切换:
shadow文件关联密码配置
在linux中为了安全,将用户的密码以高安全性哈希算法加密后保存在/etc/shadow
中:
注意:保留段用于未来的扩展需求
用户组的种类与标识
用户组的种类
组群种类 | 说明 | 标识 |
---|---|---|
超级组 | 通常指的是root 组,具有最高权限。 | GID=0 |
系统组 | 用于系统服务和进程,GID为1~499。 | GID=1~499 |
自定义组 | 用户创建的普通组,用于自定义用户划分和权限管理。 | GID≥1000 |
用户组的标识
组群标识 | 说明 |
---|---|
主组 | 用户的默认组,用户默认创建时一般会被分配到一个同名的默认主组。 |
附加组 | 用户可以加入的其他组,允许用户在不同的组之间共享资源和权限。 |
group文件关联组配置
/etc/group
文件是Linux系统中存储用户组信息的文本文件。这个文件包含了系统中所有用户组的定义,以及每个用户组的成员列表。在该文件中,每一行表示一个用户组的信息,字段之间使用冒号(:)分隔
除去id
命令,我们查看用户组信息也可以查看/etc/group
配置文件:
同样的,此文件一样不会保存密码信息
gshadow文件关联密码配置
/etc/gshadow
文件是Linux系统中存储用户组密码信息的文件。与 /etc/group
文件类似,/etc/gshadow
文件用于存储加密的用户组密码,其中包含关于用户组的敏感信息。这个文件通常只能由超级用户(root)进行编辑
将组群密码加密存放在/etc/gshadow
文件中:
注意:未加密则显示!
usermod命令与常见选项
usermod
命令用于修改用户账户的属性,包括用户ID(UID)、主组ID(GID)、附加组、主目录、登录 shell 等。这个命令允许管理员对已有用户进行修改而无需创建新用户。
选项 | 说明 |
---|---|
-c, --comment COMMENT | 设置用户的注释信息。 |
-d, --home DIRECTORY | 修改用户的主目录。 |
-g, --gid GROUP | 修改用户的初始登录组。 |
-G, --groups GROUPS | 修改用户的附加组。多个组之间使用逗号分隔。 |
-s, --shell SHELL | 修改用户的登录 shell。 |
-u, --uid UID | 修改用户的用户ID。 |
-e, --expiredate EXPIRE | 修改用户的过期日期。 |
**注意:**默认的
useradd
添加的用户是没有权限使用sudo
命令的,需要修改附加组usermod -G sudo [userName]
groupadd命令与常见选项
groupadd
命令用于在Linux系统中创建新用户组。用户组是一种组织和管理用户的方式,允许用户在共享资源和权限方面进行更好的管理。常见选项有一个,其他可以用时进行了解.
- 创建自定义用户组
groupadd [groupName]
- 创建一个用户组,并且指定GID
groupadd -g [groupId] [groupName]
groupdel命令与使用示例
groupdel
命令用于在Linux系统中删除用户组。用户组是一种组织和管理用户的方式,使用 groupdel
命令可以删除不再需要的用户组。它通常不需要额外的选项
groupdel [groupName]