主题
用户与权限管理
在 Rocky Linux 中,用户和权限管理是系统管理的核心任务之一。有效的用户和权限管理可以确保系统安全,防止未授权访问,并使多个用户能够在同一系统上工作而不互相干扰。本教程将详细介绍 Rocky Linux 中的用户账户管理、组管理和权限控制。
Linux 用户系统概述
用户类型
在 Rocky Linux 中,有三种主要的用户类型:
- root 用户:系统管理员账户,拥有对系统的完全控制权
- 系统用户:用于运行系统服务和进程的特殊账户
- 普通用户:日常使用的用户账户,权限有限
UID 和 GID
每个用户都有一个唯一的用户 ID (UID) 和一个主组 ID (GID):
- UID 0:保留给 root 用户
- UID 1-999:保留给系统用户
- UID 1000+:普通用户的 UID
用户账户管理
创建用户
bash
# 创建新用户
sudo useradd username
# 创建用户时指定主目录
sudo useradd -d /home/username username
# 创建用户时指定 UID
sudo useradd -u 1001 username
# 创建用户时添加到附加组
sudo useradd -G group1,group2 username
# 创建用户并设置登录 Shell
sudo useradd -s /bin/bash username
# 创建用户时设置过期日期
sudo useradd -e 2023-12-31 username设置用户密码
bash
# 设置或更改用户密码
sudo passwd username
# 强制用户下次登录时更改密码
sudo passwd -e username
# 设置密码永不过期
sudo passwd -x -1 username
# 锁定用户账户
sudo passwd -l username
# 解锁用户账户
sudo passwd -u username修改用户属性
bash
# 修改用户信息
sudo usermod [options] username
# 更改用户名
sudo usermod -l new_username old_username
# 更改用户的主目录
sudo usermod -d /new/home/path -m username
# 添加用户到附加组
sudo usermod -a -G group_name username
# 更改用户的主组
sudo usermod -g group_name username
# 更改用户的登录 Shell
sudo usermod -s /bin/sh username
# 禁用用户登录
sudo usermod -s /sbin/nologin username删除用户
bash
# 删除用户(保留主目录)
sudo userdel username
# 删除用户及其主目录
sudo userdel -r username
# 删除用户及其邮件假脱机
sudo userdel -f username组管理
创建组
bash
# 创建新组
sudo groupadd groupname
# 创建组时指定 GID
sudo groupadd -g 1001 groupname修改组
bash
# 修改组信息
sudo groupmod [options] groupname
# 更改组名
sudo groupmod -n new_groupname old_groupname
# 更改组的 GID
sudo groupmod -g 1001 groupname删除组
bash
# 删除组
sudo groupdel groupname管理组成员
bash
# 向组添加用户
sudo gpasswd -a username groupname
# 从组中移除用户
sudo gpasswd -d username groupname
# 设置组管理员
sudo gpasswd -A admin_username groupname
# 创建密码保护的组
sudo gpasswd groupname
# 让用户临时加入组
newgrp groupname文件和目录权限
权限表示法
在 Linux 中,权限有两种表示方法:
- 符号表示法:如
rwxr-xr-x - 数字表示法:如
755
权限类型
- 读权限 (r, 4):允许查看文件内容或列出目录内容
- 写权限 (w, 2):允许修改文件内容或在目录中创建/删除文件
- 执行权限 (x, 1):允许执行文件或访问目录内容
权限对象
- 用户 (u):文件所有者
- 组 (g):文件所属组的成员
- 其他 (o):不属于上述两类的用户
- 全部 (a):所有用户
查看权限
bash
# 查看文件和目录权限
ls -l filename\lls -la directory/
# 查看文件的详细信息,包括 ACL
stat filename修改权限
bash
# 使用符号表示法修改权限
chmod u+rwx,g+rx,o+rx filename
chmod a-w filename
chmod u+x,g+w filename
# 使用数字表示法修改权限
chmod 755 filename # rwxr-xr-x
chmod 644 filename # rw-r--r--
chmod 700 directory # rwx------
# 递归修改目录及其内容的权限
chmod -R 755 directory/修改所有者
bash
# 修改文件所有者
sudo chown username filename
# 修改文件所属组
sudo chgrp groupname filename
# 同时修改所有者和组
sudo chown username:groupname filename
# 递归修改目录及其内容的所有者和组
sudo chown -R username:groupname directory/特殊权限
SetUID (SUID)
当设置了 SUID 权限时,文件将以文件所有者的权限执行,而不是以执行该文件的用户权限执行。
bash
# 设置 SUID
sudo chmod u+s filename
# 以数字表示法设置 SUID
sudo chmod 4755 filenameSetGID (SGID)
对于可执行文件,SGID 使文件以组的权限执行。对于目录,SGID 确保在该目录中创建的新文件继承该目录的组。
bash
# 设置 SGID
sudo chmod g+s filename
sudo chmod g+s directory/
# 以数字表示法设置 SGID
sudo chmod 2755 filename
sudo chmod 2775 directory/粘性位 (Sticky Bit)
粘性位主要用于目录,它确保只有文件所有者、目录所有者或 root 用户可以删除或重命名该目录中的文件。
bash
# 设置粘性位
sudo chmod +t directory/
# 以数字表示法设置粘性位
sudo chmod 1777 directory/访问控制列表 (ACL)
访问控制列表 (ACL) 提供了比标准 Linux 文件权限更细粒度的访问控制。
安装 ACL 工具
bash
sudo dnf install acl -y查看 ACL
bash
# 查看文件的 ACL
getfacl filename
# 查看目录的 ACL
getfacl directory/设置 ACL
bash
# 为用户设置 ACL
setfacl -m u:username:permissions filename
# 为组设置 ACL
setfacl -m g:groupname:permissions filename
# 为其他用户设置 ACL
setfacl -m o::permissions filename
# 设置默认 ACL(适用于目录中新创建的文件)
setfacl -m d:u:username:permissions directory/
# 递归设置 ACL
setfacl -R -m u:username:permissions directory/删除 ACL
bash
# 删除特定用户的 ACL
setfacl -x u:username filename
# 删除特定组的 ACL
setfacl -x g:groupname filename
# 删除所有 ACL
setfacl -b filename
# 删除默认 ACL
setfacl -k directory/sudo 权限管理
sudo 概述
sudo(superuser do)允许授权用户以其他用户(通常是 root)的身份执行命令。
配置 sudo
bash
# 编辑 sudo 配置文件(使用 visudo 确保语法正确)
sudo visudo
# 编辑特定用户的 sudo 配置
sudo visudo -f /etc/sudoers.d/usernamesudo 配置示例
# 允许用户执行所有命令
username ALL=(ALL) ALL
# 允许用户组执行所有命令
%groupname ALL=(ALL) ALL
# 允许用户无需密码执行特定命令
username ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart httpd
# 允许用户以特定用户身份执行命令
username ALL=(apache) NOPASSWD: ALLsudo 命令使用
bash
# 以 root 身份执行命令
sudo command
# 以特定用户身份执行命令
sudo -u username command
# 以 root 身份打开交互式 shell
sudo -i
sudo su -
# 查看用户可以使用的 sudo 命令
sudo -lPAM 认证模块
可插拔认证模块 (PAM) 提供了一种灵活的方式来验证用户身份并控制访问权限。
PAM 配置文件
主要 PAM 配置文件位于 /etc/pam.d/ 目录:
bash
ls -l /etc/pam.d/常见 PAM 模块
- pam_unix.so:标准 Unix 身份验证
- pam_cracklib.so:密码强度检查
- pam_limits.so:用户资源限制
- pam_tally2.so:失败登录尝试计数
用户资源限制
查看资源限制
bash
# 查看当前用户的资源限制
ulimit -a
# 查看特定限制
ulimit -n # 打开文件描述符数量
ulimit -u # 最大用户进程数
ulimit -s # 堆栈大小设置资源限制
bash
# 临时设置资源限制
ulimit -n 1024 # 设置最大打开文件数为 1024
# 永久设置资源限制(编辑 /etc/security/limits.conf)
sudo vim /etc/security/limits.conf在 /etc/security/limits.conf 中添加以下行:
# <domain> <type> <item> <value>
username soft nofile 1024
username hard nofile 2048
@groupname soft nproc 100
@groupname hard nproc 200
* soft core 0安全最佳实践
用户管理最佳实践
- 使用普通用户进行日常操作,仅在需要时使用 sudo
- 定期审计用户账户,删除不再需要的账户
- 为用户设置强密码策略
- 避免直接使用 root 账户登录
- 实施最小权限原则,只授予用户完成任务所需的最小权限
权限管理最佳实践
- 定期检查文件和目录权限,确保权限设置合理
- 避免使用 777 权限,这会给所有用户完全访问权限
- 对敏感文件使用 ACL 进行更细粒度的权限控制
- 谨慎使用 SUID 和 SGID 权限,它们可能带来安全风险
- 为共享目录设置粘性位,防止用户意外删除其他用户的文件
常见问题与解决方案
用户无法登录
- 问题:用户无法登录系统
- 解决方案:
- 检查用户密码是否正确
- 检查用户账户是否被锁定(
passwd -S username) - 检查用户的登录 Shell 是否存在
- 检查用户主目录的权限
sudo 权限被拒绝
- 问题:用户执行 sudo 命令时收到权限被拒绝的错误
- 解决方案:
- 确保用户已添加到 wheel 组或在 sudoers 文件中有相应权限
- 检查 sudoers 文件中的语法错误
- 验证用户输入的密码是否正确
权限设置不生效
- 问题:修改文件权限后,权限设置不生效
- 解决方案:
- 确保您有足够的权限修改文件权限(需要是文件所有者或 root)
- 检查文件系统是否以只读方式挂载
- 如果使用了 ACL,请检查 ACL 设置是否覆盖了基本权限
总结
用户和权限管理是 Rocky Linux 系统管理的基础,通过本文介绍的命令和技术,您可以有效地管理系统中的用户账户、组和权限。合理的用户和权限管理不仅可以确保系统安全,还可以提高多用户环境下的工作效率。
记住遵循最小权限原则,定期审计用户账户和权限设置,以及使用强密码策略,这些都是维护系统安全的重要措施。