用户与组管理
用户与组管理

用户与组管理

在Linux这个多用户、多任务的操作系统中,离不开Linux强大的用户与组管理机制。

对于系统管理员而言,掌握用户和组的管理不仅仅是创建几个账号那么简单,它关乎系统的安全边界、资源的隔离以及协作的效率。

身份标识

在Linux系统中,系统通过UID来识别用户,而不是用户名。

  • Root用户:UID为0,拥有至高无上的权限,是系统的超级管理员。
  • 系统用户:UID通常在1-500之间(不同发行版略有差异),用于运行后台服务(如bin, daemon, mail等),通常禁止登录。
  • 普通用户:UID通常从500开始,用于日常操作,权限受限。

与之对应的,用户组也有组标识(GID)。每个用户至少属于一个主组,同时可以加入多个附加组,这种机制极大地简化了文件权限的批量管理。

组管理:

在创建用户之前,通常建议先规划好用户组。groupadd命令用于创建新的用户组。

1. 创建用户组
最基础的用法非常简单:

sudo groupadd unsk

这条命令会在/etc/group文件中添加一行记录。通常不建议直接手动编辑group文件,一旦出错可能导致系统异常。

2. 指定GID创建
如果你需要严格控制组ID,可以使用-g参数:

sudo groupadd -g 2024 unsk

3. 创建系统组
对于服务运行所需的组,可以使用-r参数创建系统组:

sudo groupadd -r frp_server

4. 删除用户组
当某个组不再需要时,可以使用groupdel删除:

sudo groupdel unsk

用户管理:

useradd是Linux中用于添加用户的命令,它提供了丰富的参数来定制用户的属性。

1. 基础创建与家目录
默认情况下,某些发行版使用useradd不会自动创建家目录。为了确保用户能正常登录并拥有个人空间,我们通常加上-m参数:

sudo useradd -m sanker

这会在/home下创建sanker目录,并从/etc/skel复制默认的配置文件(如.bashrc)。注意,-M则不会创建家目录。

2. 指定Shell与UID
为了安全或规范,我们可能需要指定用户的登录Shell或特定的UID:

sudo useradd -m -s /bin/bash -u 3470 sanker

这里-s指定了登录Shell为bash,-u指定了UID为3470。如果希望用户无法登录,可以将Shell指定为/sbin/nologin

3. 关联用户组(主组与附加组)
这是用户管理中最关键的一环。使用-g指定主组,使用-G指定附加组:

# 创建用户reknas,主组为unsk,同时加入docker和nginx组
sudo useradd -m -g unsk -G docker,nginx charlie

注意:-g后面的组必须预先存在,而-G可以一次性指定多个组,用逗号分隔。注意使用usermod时的覆盖问题,可以使用-a来进行追加,具体查看usermod命令。

4. 创建系统用户
类似于系统组,系统用户通常用于运行后台进程,不需要家目录且不能登录:

sudo useradd -r -s /sbin/nologin frp_server

用户属性的修改与删除

用户创建后,需求可能会发生变化。usermod命令允许我们调整用户的属性。

1. 修改用户组

  • 追加附加组:使用-aG非常重要,如果只用-G会覆盖原有的附加组。
sudo usermod -aG unsk sanker
  • 修改主组:直接使用-g
sudo usermod -g unsk reknas

2. 锁定与解锁用户
当员工离职或账号出现异常时,我们可以锁定账号而不是立即删除:

  • 锁定sudo usermod -L reknas
  • 解锁sudo usermod -U sanker

3. 删除用户
使用userdel删除用户。如果希望同时删除用户的家目录,务必加上-r参数,否则文件会残留在系统中成为无主文件:

sudo userdel -r sanker

密码管理:激活账号

使用useradd创建的用户默认是没有密码的,处于锁定状态。必须使用passwd命令设置密码后才能登录:

sudo passwd sanker

系统会提示输入并确认新密码。

核心配置文件解析

理解命令背后的文件存储机制,有助于更深层地排查问题。

  • /etc/passwd:存储用户的基本信息。每一行代表一个用户,用冒号分隔。例如:sanker:x:3470:3470::/home/sanker:/bin/bash。这里的x表示密码已加密存储在shadow文件中。
  • /etc/shadow:存储加密后的密码及密码过期信息,仅root可读,保障了系统安全。
  • /etc/group:存储用户组信息。格式为组名:密码占位符:GID:组成员列表

结语

记住,权限最小化原则是系统安全的黄金法则——只给予用户完成任务所需的最小权限。