教程 rockylinux tutorial

用户与权限管理

在 Rocky Linux 中,用户和权限管理是系统管理的核心任务之一。有效的用户和权限管理可以确保系统安全,防止未授权访问,并使多个用户能够在同一系统上工作而不互相干扰。本教程将详细介绍 Rocky Linux 中的用户账户管理、组管理和权限控制。

Linux 用户系统概述

用户类型

在 Rocky Linux 中,有三种主要的用户类型:

  1. root 用户:系统管理员账户,拥有对系统的完全控制权
  2. 系统用户:用于运行系统服务和进程的特殊账户
  3. 普通用户:日常使用的用户账户,权限有限

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 中,权限有两种表示方法:

  1. 符号表示法:如 rwxr-xr-x
  2. 数字表示法:如 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 filename

SetGID (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/username

sudo 配置示例

代码
# 允许用户执行所有命令
username ALL=(ALL) ALL

# 允许用户组执行所有命令
%groupname ALL=(ALL) ALL

# 允许用户无需密码执行特定命令
username ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart httpd

# 允许用户以特定用户身份执行命令
username ALL=(apache) NOPASSWD: ALL

sudo 命令使用

bash
# 以 root 身份执行命令
sudo command

# 以特定用户身份执行命令
sudo -u username command

# 以 root 身份打开交互式 shell
sudo -i
sudo su -

# 查看用户可以使用的 sudo 命令
sudo -l

PAM 认证模块

可插拔认证模块 (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

安全最佳实践

用户管理最佳实践

  1. 使用普通用户进行日常操作,仅在需要时使用 sudo
  2. 定期审计用户账户,删除不再需要的账户
  3. 为用户设置强密码策略
  4. 避免直接使用 root 账户登录
  5. 实施最小权限原则,只授予用户完成任务所需的最小权限

权限管理最佳实践

  1. 定期检查文件和目录权限,确保权限设置合理
  2. 避免使用 777 权限,这会给所有用户完全访问权限
  3. 对敏感文件使用 ACL 进行更细粒度的权限控制
  4. 谨慎使用 SUID 和 SGID 权限,它们可能带来安全风险
  5. 为共享目录设置粘性位,防止用户意外删除其他用户的文件

常见问题与解决方案

用户无法登录

  • 问题:用户无法登录系统
  • 解决方案:
    • 检查用户密码是否正确
    • 检查用户账户是否被锁定(passwd -S username)
    • 检查用户的登录 Shell 是否存在
    • 检查用户主目录的权限

sudo 权限被拒绝

  • 问题:用户执行 sudo 命令时收到权限被拒绝的错误
  • 解决方案:
    • 确保用户已添加到 wheel 组或在 sudoers 文件中有相应权限
    • 检查 sudoers 文件中的语法错误
    • 验证用户输入的密码是否正确

权限设置不生效

  • 问题:修改文件权限后,权限设置不生效
  • 解决方案:
    • 确保您有足够的权限修改文件权限(需要是文件所有者或 root)
    • 检查文件系统是否以只读方式挂载
    • 如果使用了 ACL,请检查 ACL 设置是否覆盖了基本权限

总结

用户和权限管理是 Rocky Linux 系统管理的基础,通过本文介绍的命令和技术,您可以有效地管理系统中的用户账户、组和权限。合理的用户和权限管理不仅可以确保系统安全,还可以提高多用户环境下的工作效率。

记住遵循最小权限原则,定期审计用户账户和权限设置,以及使用强密码策略,这些都是维护系统安全的重要措施。