Skip to content

权限管理

权限管理

用户类型

  • 超级用户:root,id为0,拥有最高权限
  • 系统用户:id为1-999,用于运行系统服务,不允许登录
  • 普通用户:id为1000+,仅对家目录拥有完整权限

用户存储

  • /etc/passwd:存储用户基本信息,每个字段含义如下: 用户名:密码占位符:UID:GID:注释:家目录:登录shell

  • /etc/shadow:存储用户的密码(加密后)及失效日期,仅 root 可读,每个字段含义如下: 用户名:加密密码:最后修改时间:最小间隔天数:最大有效天数:警告天数:宽限天数:失效时间:保留字段

管理用户

创建与修改用户

useradd [选项] 用户名 # 创建新用户。
  • -u:指定 UID。
  • -g:指定初始主组。
  • -d:指定用户的主目录
  • -G:指定附加组(用户可以属于多个组)。
  • -s:指定登录后的 Shell(如 /bin/bash 或禁止登录的 /sbin/nologin)。
  • -comment:指定用户的注释信息。

passwd [选项] 用户名 # 设置或修改用户密码
- -L:锁定用户的账号,使其无法登录 - -s:查看用户的密码状态 - -d:清空用户的密码 - -e:强制过期,下次登录时必须修改密码
usermod [选项] 用户名 # 修改用户现有信息

  • -d:修改用户的主目录
  • -L:锁定用户的账号,使其无法登录
  • -s:修改登录后的 Shell

删除用户

userdel [选项] 用户名 #删除用户

只有root用户或拥有sudo权限的用户

  • -r:递归删除,同时删除用户的家目录和邮件池。

管理组

组存储

  • /etc/group:存储用户组的信息,每个字段含义如下: 组名:组密码占位符:GID:成员列表(通常用逗号分割)
  • /etc/gshadow:存储用户组的加密密码信息,每个字段含义如下: 组名:加密密码:组管理员:组成员列表

创建和管理组

groupadd [选项] 组名
  • -g:指定组的gid。
  • r:创建一个系统账号组,id范围在$100-999$之间。

高级权限

Set位权限

分为SUIDSGID

SUID

获得文件的属主权限。

当执行文件的权限被设置为SUID时,任何用户在执行该文件时都会自动获得该文件的属主权限。

通过以下方法设置SUID权限:

chmod u+s 可执行文件 #设置SUID权限
chmod u-s 可执行文件 #移除SUID权限

设置后,该文件的属主权限第三位会变成s

SGID

获得文件的属组权限。

当执行文件的权限被设置为SGID时,任何用户在执行该文件时都会自动获得该文件的属组权限。

通过以下方法设置SGID权限:

chmod g+s 可执行文件 #设置SGID权限
chmod g-s 可执行文件 #移除SGID权限

设置后,该文件的属组权限第三位会变成s

粘滞位权限

使用户在该目录下只能修改和删除自己创建的文件,而不能修改和删除其他用户创建的文件。

只有root用户能够修改、删除该目录下的所有文件。

通过以下方法设置粘滞位权限:

chmod o+t 目录

设置后,该目录的其他用户权限第三位会变成t

ACL权限

用于给单独的用户设置权限,而不影响其属组。

设置权限

通过以下方法设置ACL权限:

setfacl [-bkRd] [-m|-x ACL参数] 目标文件名
  • -m:设置ACL参数。
  • -x:删除ACL参数。
  • -b:删除所有ACL参数。
  • -k:删除默认的ACL参数。
  • -R:递归地设置ACL参数。
  • d:设置默认的ACL参数,只对目录有效。

ACL参数的格式如下:

u/g:用户名/组名:权限列表

其中,u代表设置指定用户权限,g代表设置指定用户组权限。权限列表为rwx或它的部分。

管理权限

通过以下方法设置ACL权限:

getfacl [选项] 目标文件名
  • -a:仅显示访问控制列表
  • -d:仅显示默认控制列表
  • -c:忽略页眉,不显示文件名、所有者等前三行注释
  • -R:递归显示目录下所有子文件和子目录的权限